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:
peah
2016-09-09 14:15:57 -07:00
committed by Commit bot
parent e753641ef1
commit c8bbe3fe9a
17 changed files with 167 additions and 76 deletions

View File

@ -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) {