diff options
Diffstat (limited to 'media/audio/android/opensles_input.h')
-rw-r--r-- | media/audio/android/opensles_input.h | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/media/audio/android/opensles_input.h b/media/audio/android/opensles_input.h index 9743992fc6..e05831c671 100644 --- a/media/audio/android/opensles_input.h +++ b/media/audio/android/opensles_input.h @@ -9,18 +9,23 @@ #include <SLES/OpenSLES_Android.h> #include "base/compiler_specific.h" +#include "base/synchronization/lock.h" +#include "base/threading/thread_checker.h" +#include "media/audio/android/opensles_util.h" #include "media/audio/audio_io.h" #include "media/audio/audio_parameters.h" -#include "media/audio/android/opensles_util.h" namespace media { class AudioManagerAndroid; // Implements PCM audio input support for Android using the OpenSLES API. +// This class is created and lives on the Audio Manager thread but recorded +// audio buffers are given to us from an internal OpenSLES audio thread. +// All public methods should be called on the Audio Manager thread. class OpenSLESInputStream : public AudioInputStream { public: - static const int kNumOfQueuesInBuffer = 2; + static const int kMaxNumOfBuffersInQueue = 2; OpenSLESInputStream(AudioManagerAndroid* manager, const AudioParameters& params); @@ -41,9 +46,12 @@ class OpenSLESInputStream : public AudioInputStream { private: bool CreateRecorder(); + // Called from OpenSLES specific audio worker thread. static void SimpleBufferQueueCallback( - SLAndroidSimpleBufferQueueItf buffer_queue, void* instance); + SLAndroidSimpleBufferQueueItf buffer_queue, + void* instance); + // Called from OpenSLES specific audio worker thread. void ReadBufferQueue(); // Called in Open(); @@ -56,6 +64,12 @@ class OpenSLESInputStream : public AudioInputStream { // the attached AudioInputCallback::OnError(). void HandleError(SLresult error); + base::ThreadChecker thread_checker_; + + // Protects |callback_|, |active_buffer_index_|, |audio_data_|, + // |buffer_size_bytes_| and |simple_buffer_queue_|. + base::Lock lock_; + AudioManagerAndroid* audio_manager_; AudioInputCallback* callback_; @@ -73,9 +87,9 @@ class OpenSLESInputStream : public AudioInputStream { // Audio buffers that are allocated in the constructor based on // info from audio parameters. - uint8* audio_data_[kNumOfQueuesInBuffer]; + uint8* audio_data_[kMaxNumOfBuffersInQueue]; - int active_queue_; + int active_buffer_index_; int buffer_size_bytes_; bool started_; |