opensles_input.h revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef MEDIA_AUDIO_ANDROID_OPENSLES_INPUT_H_ 6#define MEDIA_AUDIO_ANDROID_OPENSLES_INPUT_H_ 7 8#include <SLES/OpenSLES.h> 9#include <SLES/OpenSLES_Android.h> 10 11#include "base/compiler_specific.h" 12#include "media/audio/audio_io.h" 13#include "media/audio/audio_parameters.h" 14#include "media/audio/android/opensles_util.h" 15 16namespace media { 17 18class AudioManagerAndroid; 19 20// Implements PCM audio input support for Android using the OpenSLES API. 21class OpenSLESInputStream : public AudioInputStream { 22 public: 23 static const int kNumOfQueuesInBuffer = 2; 24 25 OpenSLESInputStream(AudioManagerAndroid* manager, 26 const AudioParameters& params); 27 28 virtual ~OpenSLESInputStream(); 29 30 // Implementation of AudioInputStream. 31 virtual bool Open() OVERRIDE; 32 virtual void Start(AudioInputCallback* callback) OVERRIDE; 33 virtual void Stop() OVERRIDE; 34 virtual void Close() OVERRIDE; 35 virtual double GetMaxVolume() OVERRIDE; 36 virtual void SetVolume(double volume) OVERRIDE; 37 virtual double GetVolume() OVERRIDE; 38 virtual void SetAutomaticGainControl(bool enabled) OVERRIDE; 39 virtual bool GetAutomaticGainControl() OVERRIDE; 40 41 private: 42 bool CreateRecorder(); 43 44 static void SimpleBufferQueueCallback( 45 SLAndroidSimpleBufferQueueItf buffer_queue, void* instance); 46 47 void ReadBufferQueue(); 48 49 // Called in Open(); 50 void SetupAudioBuffer(); 51 52 // Called in Close(); 53 void ReleaseAudioBuffer(); 54 55 // If OpenSLES reports an error this function handles it and passes it to 56 // the attached AudioInputCallback::OnError(). 57 void HandleError(SLresult error); 58 59 AudioManagerAndroid* audio_manager_; 60 61 AudioInputCallback* callback_; 62 63 // Shared engine interfaces for the app. 64 media::ScopedSLObjectItf recorder_object_; 65 media::ScopedSLObjectItf engine_object_; 66 67 SLRecordItf recorder_; 68 69 // Buffer queue recorder interface. 70 SLAndroidSimpleBufferQueueItf simple_buffer_queue_; 71 72 SLDataFormat_PCM format_; 73 74 // Audio buffers that are allocated in the constructor based on 75 // info from audio parameters. 76 uint8* audio_data_[kNumOfQueuesInBuffer]; 77 78 int active_queue_; 79 int buffer_size_bytes_; 80 81 bool started_; 82 83 DISALLOW_COPY_AND_ASSIGN(OpenSLESInputStream); 84}; 85 86} // namespace media 87 88#endif // MEDIA_AUDIO_ANDROID_OPENSLES_INPUT_H_ 89