Adding initial support for lock-less informing of muting
This CL adds the initial support for letting APM know when its output will be used or not. It also adds a new method for passing RuntimeInformation to APM that returns a bool indicating the success of the passing of information. Bug: b/177830919 Change-Id: Ic2e1b92c37241d74ca6394b785b91736ca7532aa Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/206061 Commit-Queue: Per Åhgren <peah@webrtc.org> Reviewed-by: Alessio Bazzica <alessiob@webrtc.org> Cr-Commit-Position: refs/heads/master@{#33201}
This commit is contained in:
@ -664,35 +664,49 @@ size_t AudioProcessingImpl::num_output_channels() const {
|
||||
|
||||
void AudioProcessingImpl::set_output_will_be_muted(bool muted) {
|
||||
MutexLock lock(&mutex_capture_);
|
||||
capture_.output_will_be_muted = muted;
|
||||
HandleCaptureOutputUsedSetting(!muted);
|
||||
}
|
||||
|
||||
void AudioProcessingImpl::HandleCaptureOutputUsedSetting(
|
||||
bool capture_output_used) {
|
||||
capture_.capture_output_used = capture_output_used;
|
||||
if (submodules_.agc_manager.get()) {
|
||||
submodules_.agc_manager->SetCaptureMuted(capture_.output_will_be_muted);
|
||||
submodules_.agc_manager->HandleCaptureOutputUsedChange(
|
||||
capture_.capture_output_used);
|
||||
}
|
||||
}
|
||||
|
||||
void AudioProcessingImpl::SetRuntimeSetting(RuntimeSetting setting) {
|
||||
PostRuntimeSetting(setting);
|
||||
}
|
||||
|
||||
bool AudioProcessingImpl::PostRuntimeSetting(RuntimeSetting setting) {
|
||||
switch (setting.type()) {
|
||||
case RuntimeSetting::Type::kCustomRenderProcessingRuntimeSetting:
|
||||
case RuntimeSetting::Type::kPlayoutAudioDeviceChange:
|
||||
render_runtime_settings_enqueuer_.Enqueue(setting);
|
||||
return;
|
||||
return render_runtime_settings_enqueuer_.Enqueue(setting);
|
||||
case RuntimeSetting::Type::kCapturePreGain:
|
||||
case RuntimeSetting::Type::kCaptureCompressionGain:
|
||||
case RuntimeSetting::Type::kCaptureFixedPostGain:
|
||||
case RuntimeSetting::Type::kCaptureOutputUsed:
|
||||
capture_runtime_settings_enqueuer_.Enqueue(setting);
|
||||
return;
|
||||
case RuntimeSetting::Type::kPlayoutVolumeChange:
|
||||
capture_runtime_settings_enqueuer_.Enqueue(setting);
|
||||
render_runtime_settings_enqueuer_.Enqueue(setting);
|
||||
return;
|
||||
return capture_runtime_settings_enqueuer_.Enqueue(setting);
|
||||
case RuntimeSetting::Type::kPlayoutVolumeChange: {
|
||||
bool enqueueing_successful;
|
||||
enqueueing_successful =
|
||||
capture_runtime_settings_enqueuer_.Enqueue(setting);
|
||||
enqueueing_successful =
|
||||
render_runtime_settings_enqueuer_.Enqueue(setting) &&
|
||||
enqueueing_successful;
|
||||
return enqueueing_successful;
|
||||
}
|
||||
case RuntimeSetting::Type::kNotSpecified:
|
||||
RTC_NOTREACHED();
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
// The language allows the enum to have a non-enumerator
|
||||
// value. Check that this doesn't happen.
|
||||
RTC_NOTREACHED();
|
||||
return true;
|
||||
}
|
||||
|
||||
AudioProcessingImpl::RuntimeSettingEnqueuer::RuntimeSettingEnqueuer(
|
||||
@ -704,7 +718,7 @@ AudioProcessingImpl::RuntimeSettingEnqueuer::RuntimeSettingEnqueuer(
|
||||
AudioProcessingImpl::RuntimeSettingEnqueuer::~RuntimeSettingEnqueuer() =
|
||||
default;
|
||||
|
||||
void AudioProcessingImpl::RuntimeSettingEnqueuer::Enqueue(
|
||||
bool AudioProcessingImpl::RuntimeSettingEnqueuer::Enqueue(
|
||||
RuntimeSetting setting) {
|
||||
int remaining_attempts = 10;
|
||||
while (!runtime_settings_.Insert(&setting) && remaining_attempts-- > 0) {
|
||||
@ -718,6 +732,7 @@ void AudioProcessingImpl::RuntimeSettingEnqueuer::Enqueue(
|
||||
RTC_HISTOGRAM_BOOLEAN("WebRTC.Audio.ApmRuntimeSettingCannotEnqueue", 1);
|
||||
RTC_LOG(LS_ERROR) << "Cannot enqueue a new runtime setting.";
|
||||
}
|
||||
return remaining_attempts == 0;
|
||||
}
|
||||
|
||||
int AudioProcessingImpl::MaybeInitializeCapture(
|
||||
@ -844,8 +859,9 @@ void AudioProcessingImpl::HandleCaptureRuntimeSettings() {
|
||||
RTC_NOTREACHED();
|
||||
break;
|
||||
case RuntimeSetting::Type::kCaptureOutputUsed:
|
||||
// TODO(b/154437967): Add support for reducing complexity when it is
|
||||
// known that the capture output will not be used.
|
||||
bool value;
|
||||
setting.GetBool(&value);
|
||||
HandleCaptureOutputUsedSetting(value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -1782,7 +1798,8 @@ void AudioProcessingImpl::InitializeGainController1() {
|
||||
submodules_.agc_manager->Initialize();
|
||||
submodules_.agc_manager->SetupDigitalGainControl(
|
||||
submodules_.gain_control.get());
|
||||
submodules_.agc_manager->SetCaptureMuted(capture_.output_will_be_muted);
|
||||
submodules_.agc_manager->HandleCaptureOutputUsedChange(
|
||||
capture_.capture_output_used);
|
||||
}
|
||||
|
||||
void AudioProcessingImpl::InitializeGainController2() {
|
||||
@ -1993,7 +2010,7 @@ void AudioProcessingImpl::RecordAudioProcessingState() {
|
||||
|
||||
AudioProcessingImpl::ApmCaptureState::ApmCaptureState()
|
||||
: was_stream_delay_set(false),
|
||||
output_will_be_muted(false),
|
||||
capture_output_used(true),
|
||||
key_pressed(false),
|
||||
capture_processing_format(kSampleRate16kHz),
|
||||
split_rate(kSampleRate16kHz),
|
||||
|
||||
Reference in New Issue
Block a user