Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 18 additions & 2 deletions modules/audio_device/audio_engine_device.h
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,8 @@ class AudioEngineDevice : public AudioDeviceModule, public AudioSessionObserver
bool advanced_ducking = true;
long ducking_level = 0; // 0 = Default

bool stereo_playout_enabled = false;

uint32_t output_device_id = 0; // kAudioObjectUnknown
uint32_t input_device_id = 0; // kAudioObjectUnknown

Expand All @@ -154,6 +156,7 @@ class AudioEngineDevice : public AudioDeviceModule, public AudioSessionObserver
voice_processing_bypassed == rhs.voice_processing_bypassed &&
voice_processing_agc_enabled == rhs.voice_processing_agc_enabled &&
advanced_ducking == rhs.advanced_ducking && ducking_level == rhs.ducking_level &&
stereo_playout_enabled == rhs.stereo_playout_enabled &&
output_device_id == rhs.output_device_id && input_device_id == rhs.input_device_id &&
default_output_device_update_count == rhs.default_output_device_update_count &&
default_input_device_update_count == rhs.default_input_device_update_count;
Expand Down Expand Up @@ -191,6 +194,8 @@ class AudioEngineDevice : public AudioDeviceModule, public AudioSessionObserver
return IsOutputInputLinked() ? input_running : input_running && output_running;
}

uint32_t DesiredOutputChannels() const { return stereo_playout_enabled ? 2u : 1u; }

bool IsOutputDefaultDevice() const {
#if TARGET_OS_OSX
return output_device_id == kAudioObjectUnknown;
Expand Down Expand Up @@ -359,6 +364,10 @@ class AudioEngineDevice : public AudioDeviceModule, public AudioSessionObserver
(prev.IsOutputEnabled() != next.IsOutputEnabled());
}

bool DidUpdateOutputChannels() const {
return prev.DesiredOutputChannels() != next.DesiredOutputChannels();
}

bool DidUpdateVoiceProcessingEnabled() const {
return prev.voice_processing_enabled != next.voice_processing_enabled;
}
Expand All @@ -378,7 +387,7 @@ class AudioEngineDevice : public AudioDeviceModule, public AudioSessionObserver
bool DidUpdateMuteMode() const { return prev.mute_mode != next.mute_mode; }

bool IsEngineRestartRequired() const {
return DidUpdateAudioGraph() ||
return DidUpdateAudioGraph() || DidUpdateOutputChannels() ||
// Voice processing enable state updates
DidUpdateVoiceProcessingEnabled();
}
Expand Down Expand Up @@ -412,7 +421,9 @@ class AudioEngineDevice : public AudioDeviceModule, public AudioSessionObserver

bool IsMicrophonePermissionGranted();
int32_t ModifyEngineState(std::function<EngineState(EngineState)> state_transform);
int32_t ApplyDeviceEngineState(EngineStateUpdate state);
int32_t ApplyDeviceEngineState(EngineStateUpdate state,
bool* stereo_playout_reset = nullptr,
bool* restore_voice_processing = nullptr);
int32_t ApplyManualEngineState(EngineStateUpdate state);

// AudioEngine observer methods. May be called from any thread.
Expand All @@ -438,6 +449,11 @@ class AudioEngineDevice : public AudioDeviceModule, public AudioSessionObserver
#endif

void DebugAudioEngine();
bool RouteSupportsStereo() const;

bool stereo_voice_processing_override_active_ = false;
bool stereo_saved_voice_processing_enabled_ = true;
bool stereo_saved_voice_processing_bypassed_ = false;

void StartRenderLoop();
AVAudioEngineManualRenderingBlock render_block_;
Expand Down
Loading