diff -r 000000000000 -r 6474c204b198 content/media/omx/AudioSink.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/content/media/omx/AudioSink.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,89 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim:set ts=2 sw=2 sts=2 et cindent: */ +/* + * Copyright (c) 2014 The Linux Foundation. All rights reserved. + * Copyright (C) 2007 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AUDIO_SINK_H_ +#define AUDIO_SINK_H_ + +#include +#include +#include + +#define DEFAULT_AUDIOSINK_BUFFERCOUNT 4 +#define DEFAULT_AUDIOSINK_BUFFERSIZE 1200 +#define DEFAULT_AUDIOSINK_SAMPLERATE 44100 + +// when the channel mask isn't known, use the channel count to derive a mask in +// AudioSink::open() +#define CHANNEL_MASK_USE_CHANNEL_ORDER 0 + +namespace mozilla { + +/** + * AudioSink: abstraction layer for audio output + * Stripped version of Android KK MediaPlayerBase::AudioSink class + */ + +class AudioSink : public android::RefBase +{ + typedef android::String8 String8; + typedef android::status_t status_t; + +public: + enum cb_event_t { + CB_EVENT_FILL_BUFFER, // Request to write more data to buffer. + CB_EVENT_STREAM_END, // Sent after all the buffers queued in AF and HW + // are played back (after stop is called) + CB_EVENT_TEAR_DOWN // The AudioTrack was invalidated due to usecase + // change. Need to re-evaluate offloading options + }; + + // Callback returns the number of bytes actually written to the buffer. + typedef size_t (*AudioCallback)(AudioSink* aAudioSink, + void* aBuffer, + size_t aSize, + void* aCookie, + cb_event_t aEvent); + virtual ~AudioSink() {} + virtual ssize_t FrameSize() const = 0; + virtual status_t GetPosition(uint32_t* aPosition) const = 0; + virtual status_t SetVolume(float aVolume) const = 0; + virtual status_t SetParameters(const String8& aKeyValuePairs) + { + return android::NO_ERROR; + } + + virtual status_t Open(uint32_t aSampleRate, + int aChannelCount, + audio_channel_mask_t aChannelMask, + audio_format_t aFormat=AUDIO_FORMAT_PCM_16_BIT, + AudioCallback aCb = nullptr, + void* aCookie = nullptr, + audio_output_flags_t aFlags = AUDIO_OUTPUT_FLAG_NONE, + const audio_offload_info_t* aOffloadInfo = nullptr) = 0; + + virtual status_t Start() = 0; + virtual void Stop() = 0; + virtual void Flush() = 0; + virtual void Pause() = 0; + virtual void Close() = 0; +}; + +} // namespace mozilla + +#endif // AUDIO_SINK_H_