Reland "Add ability to state whether the APM output will be used"

This is a reland of 8be2f201ba

Original change's description:
> 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}

Bug: b/154437967
Bug: b/163802450
Change-Id: Ia77a9e43f913929d1afa72212f1ea6c192d0e519
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/181887
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31957}
This commit is contained in:
Per Åhgren 2020-08-12 08:46:47 +02:00 committed by Commit Bot
parent 88816e373d
commit 552d3e3d5e
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