The current scheme for setting parameters and specifying the behavior
of the audio processing module is quite complex and hard to implement in a threadsafe and efficient manner. Therefore a new scheme for setting the parameters in the audio processing module is introduced in this CL. The idea is to roll this scheme out gradually and as a first functionality in the audio processing module where this is applied the level controller was chosen. This CL includes the replacement of the Config-based level controller scheme with the new scheme. BUG=webrtc:5298 Review-Url: https://codereview.webrtc.org/2292863002 Cr-Commit-Position: refs/heads/master@{#14171}
This commit is contained in:
@ -154,15 +154,15 @@ struct AudioProcessingImpl::ApmPrivateSubmodules {
|
||||
};
|
||||
|
||||
AudioProcessing* AudioProcessing::Create() {
|
||||
Config config;
|
||||
webrtc::Config config;
|
||||
return Create(config, nullptr);
|
||||
}
|
||||
|
||||
AudioProcessing* AudioProcessing::Create(const Config& config) {
|
||||
AudioProcessing* AudioProcessing::Create(const webrtc::Config& config) {
|
||||
return Create(config, nullptr);
|
||||
}
|
||||
|
||||
AudioProcessing* AudioProcessing::Create(const Config& config,
|
||||
AudioProcessing* AudioProcessing::Create(const webrtc::Config& config,
|
||||
NonlinearBeamformer* beamformer) {
|
||||
AudioProcessingImpl* apm = new AudioProcessingImpl(config, beamformer);
|
||||
if (apm->Initialize() != kNoError) {
|
||||
@ -173,10 +173,10 @@ AudioProcessing* AudioProcessing::Create(const Config& config,
|
||||
return apm;
|
||||
}
|
||||
|
||||
AudioProcessingImpl::AudioProcessingImpl(const Config& config)
|
||||
AudioProcessingImpl::AudioProcessingImpl(const webrtc::Config& config)
|
||||
: AudioProcessingImpl(config, nullptr) {}
|
||||
|
||||
AudioProcessingImpl::AudioProcessingImpl(const Config& config,
|
||||
AudioProcessingImpl::AudioProcessingImpl(const webrtc::Config& config,
|
||||
NonlinearBeamformer* beamformer)
|
||||
: public_submodules_(new ApmPublicSubmodules()),
|
||||
private_submodules_(new ApmPrivateSubmodules(beamformer)),
|
||||
@ -194,8 +194,7 @@ AudioProcessingImpl::AudioProcessingImpl(const Config& config,
|
||||
config.Get<Beamforming>().array_geometry,
|
||||
config.Get<Beamforming>().target_direction),
|
||||
capture_nonlocked_(config.Get<Beamforming>().enabled,
|
||||
config.Get<Intelligibility>().enabled,
|
||||
config.Get<LevelControl>().enabled) {
|
||||
config.Get<Intelligibility>().enabled) {
|
||||
{
|
||||
rtc::CritScope cs_render(&crit_render_);
|
||||
rtc::CritScope cs_capture(&crit_capture_);
|
||||
@ -432,7 +431,34 @@ int AudioProcessingImpl::InitializeLocked(const ProcessingConfig& config) {
|
||||
return InitializeLocked();
|
||||
}
|
||||
|
||||
void AudioProcessingImpl::SetExtraOptions(const Config& config) {
|
||||
void AudioProcessingImpl::ApplyConfig(const AudioProcessing::Config& config) {
|
||||
AudioProcessing::Config config_to_use = config;
|
||||
|
||||
bool config_ok = LevelController::Validate(config_to_use.level_controller);
|
||||
if (!config_ok) {
|
||||
LOG(LS_ERROR) << "AudioProcessing module config error" << std::endl
|
||||
<< "level_controller: "
|
||||
<< LevelController::ToString(config_to_use.level_controller)
|
||||
<< std::endl
|
||||
<< "Reverting to default parameter set";
|
||||
config_to_use.level_controller = AudioProcessing::Config::LevelController();
|
||||
}
|
||||
|
||||
// Run in a single-threaded manner when applying the settings.
|
||||
rtc::CritScope cs_render(&crit_render_);
|
||||
rtc::CritScope cs_capture(&crit_capture_);
|
||||
|
||||
if (config.level_controller.enabled !=
|
||||
capture_nonlocked_.level_controller_enabled) {
|
||||
InitializeLevelController();
|
||||
LOG(LS_INFO) << "Level controller activated: "
|
||||
<< capture_nonlocked_.level_controller_enabled;
|
||||
capture_nonlocked_.level_controller_enabled =
|
||||
config.level_controller.enabled;
|
||||
}
|
||||
}
|
||||
|
||||
void AudioProcessingImpl::SetExtraOptions(const webrtc::Config& config) {
|
||||
// Run in a single-threaded manner when setting the extra options.
|
||||
rtc::CritScope cs_render(&crit_render_);
|
||||
rtc::CritScope cs_capture(&crit_capture_);
|
||||
@ -446,16 +472,6 @@ void AudioProcessingImpl::SetExtraOptions(const Config& config) {
|
||||
InitializeTransient();
|
||||
}
|
||||
|
||||
if (capture_nonlocked_.level_controller_enabled !=
|
||||
config.Get<LevelControl>().enabled) {
|
||||
capture_nonlocked_.level_controller_enabled =
|
||||
config.Get<LevelControl>().enabled;
|
||||
LOG(LS_INFO) << "Level controller activated: "
|
||||
<< config.Get<LevelControl>().enabled;
|
||||
|
||||
InitializeLevelController();
|
||||
}
|
||||
|
||||
#if WEBRTC_INTELLIGIBILITY_ENHANCER
|
||||
if(capture_nonlocked_.intelligibility_enabled !=
|
||||
config.Get<Intelligibility>().enabled) {
|
||||
|
||||
Reference in New Issue
Block a user