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:
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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 {
|
||||
|
@ -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_;
|
||||
};
|
||||
|
@ -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()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user