Index: webrtc/modules/audio_device/ios/audio_device_ios.h |
diff --git a/webrtc/modules/audio_device/ios/audio_device_ios.h b/webrtc/modules/audio_device/ios/audio_device_ios.h |
index a3674502859903c36af4ca3384a04f8a6d41ef02..c052e488c1119640dcf49038789214f8c995e8d7 100644 |
--- a/webrtc/modules/audio_device/ios/audio_device_ios.h |
+++ b/webrtc/modules/audio_device/ios/audio_device_ios.h |
@@ -13,17 +13,14 @@ |
#include <AudioUnit/AudioUnit.h> |
-#include "webrtc/modules/audio_device/audio_device_generic.h" |
+#include "webrtc/base/thread_checker.h" |
+#include "webrtc/modules/audio_device/ios/audio_device_not_implemented_ios.h" |
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h" |
#include "webrtc/system_wrappers/interface/thread_wrapper.h" |
namespace webrtc { |
-const uint32_t N_REC_SAMPLES_PER_SEC = 44000; |
-const uint32_t N_PLAY_SAMPLES_PER_SEC = 44000; |
- |
-const uint32_t N_REC_CHANNELS = 1; // default is mono recording |
-const uint32_t N_PLAY_CHANNELS = 1; // default is mono playout |
-const uint32_t N_DEVICE_CHANNELS = 8; |
+const uint32_t N_REC_SAMPLES_PER_SEC = 44100; |
+const uint32_t N_PLAY_SAMPLES_PER_SEC = 44100; |
const uint32_t ENGINE_REC_BUF_SIZE_IN_SAMPLES = (N_REC_SAMPLES_PER_SEC / 100); |
const uint32_t ENGINE_PLAY_BUF_SIZE_IN_SAMPLES = (N_PLAY_SAMPLES_PER_SEC / 100); |
@@ -31,139 +28,50 @@ const uint32_t ENGINE_PLAY_BUF_SIZE_IN_SAMPLES = (N_PLAY_SAMPLES_PER_SEC / 100); |
// Number of 10 ms recording blocks in recording buffer |
const uint16_t N_REC_BUFFERS = 20; |
-class AudioDeviceIOS : public AudioDeviceGeneric { |
+class AudioDeviceIOS : public AudioDeviceNotImplementedIOS { |
public: |
- AudioDeviceIOS(const int32_t id); |
+ AudioDeviceIOS(); |
~AudioDeviceIOS(); |
- // Retrieve the currently utilized audio layer |
- virtual int32_t ActiveAudioLayer( |
- AudioDeviceModule::AudioLayer& audioLayer) const; |
- |
- // Main initializaton and termination |
- virtual int32_t Init(); |
- virtual int32_t Terminate(); |
- virtual bool Initialized() const; |
- |
- // Device enumeration |
- virtual int16_t PlayoutDevices(); |
- virtual int16_t RecordingDevices(); |
- virtual int32_t PlayoutDeviceName(uint16_t index, |
- char name[kAdmMaxDeviceNameSize], |
- char guid[kAdmMaxGuidSize]); |
- virtual int32_t RecordingDeviceName(uint16_t index, |
- char name[kAdmMaxDeviceNameSize], |
- char guid[kAdmMaxGuidSize]); |
- |
- // Device selection |
- virtual int32_t SetPlayoutDevice(uint16_t index); |
- virtual int32_t SetPlayoutDevice(AudioDeviceModule::WindowsDeviceType device); |
- virtual int32_t SetRecordingDevice(uint16_t index); |
- virtual int32_t SetRecordingDevice( |
- AudioDeviceModule::WindowsDeviceType device); |
- |
- // Audio transport initialization |
- virtual int32_t PlayoutIsAvailable(bool& available); |
- virtual int32_t InitPlayout(); |
- virtual bool PlayoutIsInitialized() const; |
- virtual int32_t RecordingIsAvailable(bool& available); |
- virtual int32_t InitRecording(); |
- virtual bool RecordingIsInitialized() const; |
- |
- // Audio transport control |
- virtual int32_t StartPlayout(); |
- virtual int32_t StopPlayout(); |
- virtual bool Playing() const; |
- virtual int32_t StartRecording(); |
- virtual int32_t StopRecording(); |
- virtual bool Recording() const; |
- |
- // Microphone Automatic Gain Control (AGC) |
- virtual int32_t SetAGC(bool enable); |
- virtual bool AGC() const; |
- |
- // Volume control based on the Windows Wave API (Windows only) |
- virtual int32_t SetWaveOutVolume(uint16_t volumeLeft, uint16_t volumeRight); |
- virtual int32_t WaveOutVolume(uint16_t& volumeLeft, |
- uint16_t& volumeRight) const; |
- |
- // Audio mixer initialization |
- virtual int32_t InitSpeaker(); |
- virtual bool SpeakerIsInitialized() const; |
- virtual int32_t InitMicrophone(); |
- virtual bool MicrophoneIsInitialized() const; |
- |
- // Speaker volume controls |
- virtual int32_t SpeakerVolumeIsAvailable(bool& available); |
- virtual int32_t SetSpeakerVolume(uint32_t volume); |
- virtual int32_t SpeakerVolume(uint32_t& volume) const; |
- virtual int32_t MaxSpeakerVolume(uint32_t& maxVolume) const; |
- virtual int32_t MinSpeakerVolume(uint32_t& minVolume) const; |
- virtual int32_t SpeakerVolumeStepSize(uint16_t& stepSize) const; |
- |
- // Microphone volume controls |
- virtual int32_t MicrophoneVolumeIsAvailable(bool& available); |
- virtual int32_t SetMicrophoneVolume(uint32_t volume); |
- virtual int32_t MicrophoneVolume(uint32_t& volume) const; |
- virtual int32_t MaxMicrophoneVolume(uint32_t& maxVolume) const; |
- virtual int32_t MinMicrophoneVolume(uint32_t& minVolume) const; |
- virtual int32_t MicrophoneVolumeStepSize(uint16_t& stepSize) const; |
- |
- // Microphone mute control |
- virtual int32_t MicrophoneMuteIsAvailable(bool& available); |
- virtual int32_t SetMicrophoneMute(bool enable); |
- virtual int32_t MicrophoneMute(bool& enabled) const; |
- |
- // Speaker mute control |
- virtual int32_t SpeakerMuteIsAvailable(bool& available); |
- virtual int32_t SetSpeakerMute(bool enable); |
- virtual int32_t SpeakerMute(bool& enabled) const; |
- |
- // Microphone boost control |
- virtual int32_t MicrophoneBoostIsAvailable(bool& available); |
- virtual int32_t SetMicrophoneBoost(bool enable); |
- virtual int32_t MicrophoneBoost(bool& enabled) const; |
- |
- // Stereo support |
- virtual int32_t StereoPlayoutIsAvailable(bool& available); |
- virtual int32_t SetStereoPlayout(bool enable); |
- virtual int32_t StereoPlayout(bool& enabled) const; |
- virtual int32_t StereoRecordingIsAvailable(bool& available); |
- virtual int32_t SetStereoRecording(bool enable); |
- virtual int32_t StereoRecording(bool& enabled) const; |
- |
- // Delay information and control |
- virtual int32_t SetPlayoutBuffer(const AudioDeviceModule::BufferType type, |
- uint16_t sizeMS); |
- virtual int32_t PlayoutBuffer(AudioDeviceModule::BufferType& type, |
- uint16_t& sizeMS) const; |
- virtual int32_t PlayoutDelay(uint16_t& delayMS) const; |
- virtual int32_t RecordingDelay(uint16_t& delayMS) const; |
- |
- // CPU load |
- virtual int32_t CPULoad(uint16_t& load) const; |
+ void AttachAudioBuffer(AudioDeviceBuffer* audioBuffer) override; |
- public: |
- virtual bool PlayoutWarning() const; |
- virtual bool PlayoutError() const; |
- virtual bool RecordingWarning() const; |
- virtual bool RecordingError() const; |
- virtual void ClearPlayoutWarning(); |
- virtual void ClearPlayoutError(); |
- virtual void ClearRecordingWarning(); |
- virtual void ClearRecordingError(); |
+ int32_t Init() override; |
+ int32_t Terminate() override; |
+ bool Initialized() const override { return _initialized; } |
- public: |
- virtual void AttachAudioBuffer(AudioDeviceBuffer* audioBuffer); |
+ int32_t InitPlayout() override; |
+ bool PlayoutIsInitialized() const override { return _playIsInitialized; } |
+ |
+ int32_t InitRecording() override; |
+ bool RecordingIsInitialized() const override { return _recIsInitialized; } |
+ |
+ int32_t StartPlayout() override; |
+ int32_t StopPlayout() override; |
+ bool Playing() const override { return _playing; } |
+ |
+ int32_t StartRecording() override; |
+ int32_t StopRecording() override; |
+ bool Recording() const override { return _recording; } |
+ |
+ int32_t SetLoudspeakerStatus(bool enable) override; |
+ int32_t GetLoudspeakerStatus(bool& enabled) const override; |
+ |
+ // TODO(henrika): investigate if we can reduce the complexity here. |
+ // Do we even need delay estimates? |
+ int32_t PlayoutDelay(uint16_t& delayMS) const override; |
+ int32_t RecordingDelay(uint16_t& delayMS) const override; |
+ |
+ int32_t PlayoutBuffer(AudioDeviceModule::BufferType& type, |
+ uint16_t& sizeMS) const override; |
- // Reset Audio Device (for mobile devices only) |
- virtual int32_t ResetAudioDevice(); |
+ // These methods are unique for the iOS implementation. |
- // enable or disable loud speaker (for iphone only) |
- virtual int32_t SetLoudspeakerStatus(bool enable); |
- virtual int32_t GetLoudspeakerStatus(bool& enabled) const; |
+ // Native audio parameters stored during construction. |
+ int GetPlayoutAudioParameters(AudioParameters* params) const override; |
+ int GetRecordAudioParameters(AudioParameters* params) const override; |
private: |
+ // TODO(henrika): try to remove these. |
void Lock() { |
_critSect.Enter(); |
} |
@@ -172,10 +80,6 @@ class AudioDeviceIOS : public AudioDeviceGeneric { |
_critSect.Leave(); |
} |
- int32_t Id() { |
- return _id; |
- } |
- |
// Init and shutdown |
int32_t InitPlayOrRecord(); |
int32_t ShutdownPlayOrRecord(); |
@@ -209,18 +113,24 @@ class AudioDeviceIOS : public AudioDeviceGeneric { |
bool CaptureWorkerThread(); |
private: |
- AudioDeviceBuffer* _ptrAudioBuffer; |
+ rtc::ThreadChecker thread_checker_; |
+ |
+ // Raw pointer handle provided to us in AttachAudioBuffer(). Owned by the |
+ // AudioDeviceModuleImpl class and called by AudioDeviceModuleImpl::Create(). |
+ // The AudioDeviceBuffer is a member of the AudioDeviceModuleImpl instance |
+ // and therefore outlives this object. |
+ AudioDeviceBuffer* audio_device_buffer_; |
CriticalSectionWrapper& _critSect; |
- rtc::scoped_ptr<ThreadWrapper> _captureWorkerThread; |
+ AudioParameters playout_parameters_; |
+ AudioParameters record_parameters_; |
- int32_t _id; |
+ rtc::scoped_ptr<ThreadWrapper> _captureWorkerThread; |
AudioUnit _auVoiceProcessing; |
void* _audioInterruptionObserver; |
- private: |
bool _initialized; |
bool _isShutDown; |
bool _recording; |
@@ -228,15 +138,8 @@ class AudioDeviceIOS : public AudioDeviceGeneric { |
bool _recIsInitialized; |
bool _playIsInitialized; |
- bool _recordingDeviceIsSpecified; |
- bool _playoutDeviceIsSpecified; |
- bool _micIsInitialized; |
- bool _speakerIsInitialized; |
- |
- bool _AGC; |
- |
// The sampling rate to use with Audio Device Buffer |
- uint32_t _adbSampFreq; |
+ int _adbSampFreq; |
// Delay calculation |
uint32_t _recordingDelay; |
@@ -245,12 +148,6 @@ class AudioDeviceIOS : public AudioDeviceGeneric { |
uint32_t _recordingDelayHWAndOS; |
uint32_t _recordingDelayMeasurementCounter; |
- // Errors and warnings count |
- uint16_t _playWarning; |
- uint16_t _playError; |
- uint16_t _recWarning; |
- uint16_t _recError; |
- |
// Playout buffer, needed for 44.0 / 44.1 kHz mismatch |
int16_t _playoutBuffer[ENGINE_PLAY_BUF_SIZE_IN_SAMPLES]; |
uint32_t _playoutBufferUsed; // How much is filled |