Add ability to state whether the APM output will be used

This CL adds the ability for the surrounding code to state that the
APM output will not be used. The intended usecase for this is to allow
APM to run at a lower complexity when the endpoint is muted.
When APM has been informed that the output will not be used, it can
turn off code that is needed only for ensuring that the output audio
will sound good.

Bug: b/154437967,b/163802450
Change-Id: I8e22989e35354372e96191d15da44beb9d1b26ae
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/181200
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31949}
This commit is contained in:
Per Åhgren
2020-08-12 08:46:47 +02:00
committed by Commit Bot
parent 7f8b434009
commit 8be2f201ba
6 changed files with 32 additions and 1 deletions

View File

@ -203,6 +203,12 @@ void AecDumpImpl::WriteRuntimeSetting(
setting->set_capture_fixed_post_gain(x);
break;
}
case AudioProcessing::RuntimeSetting::Type::kCaptureOutputUsed: {
bool x;
runtime_setting.GetBool(&x);
setting->set_capture_output_used(x);
break;
}
case AudioProcessing::RuntimeSetting::Type::kPlayoutVolumeChange: {
int x;
runtime_setting.GetInt(&x);

View File

@ -705,6 +705,7 @@ void AudioProcessingImpl::SetRuntimeSetting(RuntimeSetting 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:
@ -865,6 +866,10 @@ void AudioProcessingImpl::HandleCaptureRuntimeSettings() {
case RuntimeSetting::Type::kNotSpecified:
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.
break;
}
}
}
@ -886,6 +891,7 @@ void AudioProcessingImpl::HandleRenderRuntimeSettings() {
case RuntimeSetting::Type::kCapturePreGain: // fall-through
case RuntimeSetting::Type::kCaptureCompressionGain: // fall-through
case RuntimeSetting::Type::kCaptureFixedPostGain: // fall-through
case RuntimeSetting::Type::kCaptureOutputUsed: // fall-through
case RuntimeSetting::Type::kNotSpecified:
RTC_NOTREACHED();
break;

View File

@ -91,6 +91,7 @@ message RuntimeSetting {
optional float capture_fixed_post_gain = 3;
optional int32 playout_volume_change = 4;
optional PlayoutAudioDeviceInfo playout_audio_device_change = 5;
optional bool capture_output_used = 6;
}
message Event {

View File

@ -384,7 +384,8 @@ class RTC_EXPORT AudioProcessing : public rtc::RefCountInterface {
kCaptureFixedPostGain,
kPlayoutVolumeChange,
kCustomRenderProcessingRuntimeSetting,
kPlayoutAudioDeviceChange
kPlayoutAudioDeviceChange,
kCaptureOutputUsed
};
// Play-out audio device properties.
@ -434,6 +435,10 @@ class RTC_EXPORT AudioProcessing : public rtc::RefCountInterface {
return {Type::kCustomRenderProcessingRuntimeSetting, payload};
}
static RuntimeSetting CreateCaptureOutputUsedSetting(bool payload) {
return {Type::kCaptureOutputUsed, payload};
}
Type type() const { return type_; }
// Getters do not return a value but instead modify the argument to protect
// from implicit casting.
@ -445,6 +450,10 @@ class RTC_EXPORT AudioProcessing : public rtc::RefCountInterface {
RTC_DCHECK(value);
*value = value_.int_value;
}
void GetBool(bool* value) const {
RTC_DCHECK(value);
*value = value_.bool_value;
}
void GetPlayoutAudioDeviceInfo(PlayoutAudioDeviceInfo* value) const {
RTC_DCHECK(value);
*value = value_.playout_audio_device_info;
@ -463,6 +472,7 @@ class RTC_EXPORT AudioProcessing : public rtc::RefCountInterface {
U(PlayoutAudioDeviceInfo value) : playout_audio_device_info(value) {}
float float_value;
int int_value;
bool bool_value;
PlayoutAudioDeviceInfo playout_audio_device_info;
} value_;
};

View File

@ -544,6 +544,10 @@ void AecDumpBasedSimulator::HandleMessage(
AudioProcessing::RuntimeSetting::CreatePlayoutAudioDeviceChange(
{msg.playout_audio_device_change().id(),
msg.playout_audio_device_change().max_volume()}));
} else if (msg.has_capture_output_used()) {
ap_->SetRuntimeSetting(
AudioProcessing::RuntimeSetting::CreateCaptureOutputUsedSetting(
msg.capture_output_used()));
}
}

View File

@ -41,6 +41,10 @@ void ReplayRuntimeSetting(AudioProcessing* apm,
AudioProcessing::RuntimeSetting::CreatePlayoutAudioDeviceChange(
{setting.playout_audio_device_change().id(),
setting.playout_audio_device_change().max_volume()}));
} else if (setting.has_capture_output_used()) {
apm->SetRuntimeSetting(
AudioProcessing::RuntimeSetting::CreateCaptureOutputUsedSetting(
setting.capture_output_used()));
}
}
} // namespace webrtc