Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(33)

Unified Diff: webrtc/modules/audio_device/ios/audio_device_ios.h

Issue 1809343002: Refactor AudioUnit code into its own class. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: CR comments Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/modules/audio_device/audio_device.gypi ('k') | webrtc/modules/audio_device/ios/audio_device_ios.mm » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 fe6af6520565bf660ddb72cd3addfbecf8ce12a7..288f67747ca0ae3b19af94e5aa06a70a52836e14 100644
--- a/webrtc/modules/audio_device/ios/audio_device_ios.h
+++ b/webrtc/modules/audio_device/ios/audio_device_ios.h
@@ -13,14 +13,13 @@
#include <memory>
-#include <AudioUnit/AudioUnit.h>
-
#include "webrtc/base/asyncinvoker.h"
#include "webrtc/base/objc/RTCMacros.h"
#include "webrtc/base/thread.h"
#include "webrtc/base/thread_checker.h"
#include "webrtc/modules/audio_device/audio_device_generic.h"
#include "webrtc/modules/audio_device/ios/audio_session_observer.h"
+#include "webrtc/modules/audio_device/ios/voice_processing_audio_unit.h"
RTC_FWD_DECL_OBJC_CLASS(RTCAudioSessionDelegateAdapter);
@@ -42,7 +41,8 @@ class FineAudioBuffer;
// audio unit. The audio unit will also ask for audio data to play out on this
// same thread.
class AudioDeviceIOS : public AudioDeviceGeneric,
- public AudioSessionObserver {
+ public AudioSessionObserver,
+ public VoiceProcessingAudioUnitObserver {
public:
AudioDeviceIOS();
~AudioDeviceIOS();
@@ -163,6 +163,18 @@ class AudioDeviceIOS : public AudioDeviceGeneric,
void OnInterruptionEnd() override;
void OnValidRouteChange() override;
+ // VoiceProcessingAudioUnitObserver methods.
+ OSStatus OnDeliverRecordedData(AudioUnitRenderActionFlags* flags,
+ const AudioTimeStamp* time_stamp,
+ UInt32 bus_number,
+ UInt32 num_frames,
+ AudioBufferList* io_data) override;
+ OSStatus OnGetPlayoutData(AudioUnitRenderActionFlags* flags,
+ const AudioTimeStamp* time_stamp,
+ UInt32 bus_number,
+ UInt32 num_frames,
+ AudioBufferList* io_data) override;
+
private:
// Called by the relevant AudioSessionObserver methods on |thread_|.
void HandleInterruptionBegin();
@@ -180,15 +192,12 @@ class AudioDeviceIOS : public AudioDeviceGeneric,
// defines |playout_parameters_| and |record_parameters_|.
void SetupAudioBuffersForActiveAudioSession();
- // Creates a Voice-Processing I/O unit and configures it for full-duplex
- // audio. The selected stream format is selected to avoid internal resampling
- // and to match the 10ms callback rate for WebRTC as well as possible.
- // This method also initializes the created audio unit.
- bool SetupAndInitializeVoiceProcessingAudioUnit();
+ // Creates the audio unit.
+ bool CreateAudioUnit();
// Restarts active audio streams using a new sample rate. Required when e.g.
// a BT headset is enabled or disabled.
- bool RestartAudioUnitWithNewFormat(float sample_rate);
+ bool RestartAudioUnit(float sample_rate);
// Activates our audio session, creates and initializes the voice-processing
// audio unit and verifies that we got the preferred native audio parameters.
@@ -197,36 +206,6 @@ class AudioDeviceIOS : public AudioDeviceGeneric,
// Closes and deletes the voice-processing I/O unit.
void ShutdownPlayOrRecord();
- // Helper method for destroying the existing audio unit.
- void DisposeAudioUnit();
-
- // Callback function called on a real-time priority I/O thread from the audio
- // unit. This method is used to signal that recorded audio is available.
- static OSStatus RecordedDataIsAvailable(
- void* in_ref_con,
- AudioUnitRenderActionFlags* io_action_flags,
- const AudioTimeStamp* time_stamp,
- UInt32 in_bus_number,
- UInt32 in_number_frames,
- AudioBufferList* io_data);
- OSStatus OnRecordedDataIsAvailable(
- AudioUnitRenderActionFlags* io_action_flags,
- const AudioTimeStamp* time_stamp,
- UInt32 in_bus_number,
- UInt32 in_number_frames);
-
- // Callback function called on a real-time priority I/O thread from the audio
- // unit. This method is used to provide audio samples to the audio unit.
- static OSStatus GetPlayoutData(void* in_ref_con,
- AudioUnitRenderActionFlags* io_action_flags,
- const AudioTimeStamp* time_stamp,
- UInt32 in_bus_number,
- UInt32 in_number_frames,
- AudioBufferList* io_data);
- OSStatus OnGetPlayoutData(AudioUnitRenderActionFlags* io_action_flags,
- UInt32 in_number_frames,
- AudioBufferList* io_data);
-
// Ensures that methods are called from the same thread as this object is
// created on.
rtc::ThreadChecker thread_checker_;
@@ -252,12 +231,8 @@ class AudioDeviceIOS : public AudioDeviceGeneric,
AudioParameters playout_parameters_;
AudioParameters record_parameters_;
- // The Voice-Processing I/O unit has the same characteristics as the
- // Remote I/O unit (supports full duplex low-latency audio input and output)
- // and adds AEC for for two-way duplex communication. It also adds AGC,
- // adjustment of voice-processing quality, and muting. Hence, ideal for
- // VoIP applications.
- AudioUnit vpio_unit_;
+ // The AudioUnit used to play and record audio.
+ std::unique_ptr<VoiceProcessingAudioUnit> audio_unit_;
// FineAudioBuffer takes an AudioDeviceBuffer which delivers audio data
// in chunks of 10ms. It then allows for this data to be pulled in
@@ -277,7 +252,7 @@ class AudioDeviceIOS : public AudioDeviceGeneric,
// Extra audio buffer to be used by the playout side for rendering audio.
// The buffer size is given by FineAudioBuffer::RequiredBufferSizeBytes().
- std::unique_ptr<SInt8[]> playout_audio_buffer_;
+ std::unique_ptr<int8_t[]> playout_audio_buffer_;
// Provides a mechanism for encapsulating one or more buffers of audio data.
// Only used on the recording side.
@@ -285,7 +260,7 @@ class AudioDeviceIOS : public AudioDeviceGeneric,
// Temporary storage for recorded data. AudioUnitRender() renders into this
// array as soon as a frame of the desired buffer size has been recorded.
- std::unique_ptr<SInt8[]> record_audio_buffer_;
+ std::unique_ptr<int8_t[]> record_audio_buffer_;
// Set to 1 when recording is active and 0 otherwise.
volatile int recording_;
« no previous file with comments | « webrtc/modules/audio_device/audio_device.gypi ('k') | webrtc/modules/audio_device/ios/audio_device_ios.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698