Added flags for the adaptive analog AGC in audioproc_f.
Added back the 'agc2 level estimation' flag. Also added a flag for moving the level measurement before AEC and NS. This is to run offline experiments with audioproc_f. Bug: webrtc:7494 Change-Id: I3e3ffceede7166b754130be2b707b620ba527e9f Reviewed-on: https://webrtc-review.googlesource.com/97442 Reviewed-by: Alessio Bazzica <alessiob@webrtc.org> Commit-Queue: Alex Loiko <aleloi@webrtc.org> Cr-Commit-Position: refs/heads/master@{#24657}
This commit is contained in:
parent
b2d7116733
commit
d934244feb
@ -17,7 +17,7 @@ namespace webrtc {
|
||||
AdaptiveModeLevelEstimatorAgc::AdaptiveModeLevelEstimatorAgc(
|
||||
ApmDataDumper* apm_data_dumper)
|
||||
: level_estimator_(apm_data_dumper) {
|
||||
set_target_level_dbfs(kDefaultLevelDbfs);
|
||||
set_target_level_dbfs(kDefaultAgc2LevelHeadroomDbfs);
|
||||
}
|
||||
|
||||
// |audio| must be mono; in a multi-channel stream, provide the first (usually
|
||||
|
||||
@ -38,7 +38,7 @@ class AdaptiveModeLevelEstimatorAgc : public Agc {
|
||||
|
||||
private:
|
||||
static constexpr int kTimeUntilConfidentMs = 700;
|
||||
static constexpr int kDefaultLevelDbfs = 0;
|
||||
static constexpr int kDefaultAgc2LevelHeadroomDbfs = -1;
|
||||
int32_t time_in_ms_since_last_estimate_ = 0;
|
||||
AdaptiveModeLevelEstimator level_estimator_;
|
||||
VadWithLevel agc2_vad_;
|
||||
|
||||
@ -365,13 +365,15 @@ AudioProcessingImpl::AudioProcessingImpl(
|
||||
constants_(config.Get<ExperimentalAgc>().startup_min_volume,
|
||||
config.Get<ExperimentalAgc>().clipped_level_min,
|
||||
#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
|
||||
false,
|
||||
false,
|
||||
false),
|
||||
/* enabled= */ false,
|
||||
/* enabled_agc2_level_estimator= */ false,
|
||||
/* digital_adaptive_disabled= */ false,
|
||||
/* analyze_before_aec= */ false),
|
||||
#else
|
||||
config.Get<ExperimentalAgc>().enabled,
|
||||
config.Get<ExperimentalAgc>().enabled_agc2_level_estimator,
|
||||
config.Get<ExperimentalAgc>().digital_adaptive_disabled),
|
||||
config.Get<ExperimentalAgc>().digital_adaptive_disabled,
|
||||
config.Get<ExperimentalAgc>().analyze_before_aec),
|
||||
#endif
|
||||
#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
|
||||
capture_(false),
|
||||
@ -1221,6 +1223,13 @@ int AudioProcessingImpl::ProcessCaptureStreamLocked() {
|
||||
private_submodules_->agc_manager->AnalyzePreProcess(
|
||||
capture_buffer->channels()[0], capture_buffer->num_channels(),
|
||||
capture_nonlocked_.capture_processing_format.num_frames());
|
||||
|
||||
if (constants_.use_experimental_agc_process_before_aec) {
|
||||
private_submodules_->agc_manager->Process(
|
||||
capture_buffer->channels()[0],
|
||||
capture_nonlocked_.capture_processing_format.num_frames(),
|
||||
capture_nonlocked_.capture_processing_format.sample_rate_hz());
|
||||
}
|
||||
}
|
||||
|
||||
if (submodule_states_.CaptureMultiBandSubModulesActive() &&
|
||||
@ -1290,7 +1299,8 @@ int AudioProcessingImpl::ProcessCaptureStreamLocked() {
|
||||
public_submodules_->voice_detection->ProcessCaptureAudio(capture_buffer);
|
||||
|
||||
if (constants_.use_experimental_agc &&
|
||||
public_submodules_->gain_control->is_enabled()) {
|
||||
public_submodules_->gain_control->is_enabled() &&
|
||||
!constants_.use_experimental_agc_process_before_aec) {
|
||||
private_submodules_->agc_manager->Process(
|
||||
capture_buffer->split_bands_const(0)[kBand0To8kHz],
|
||||
capture_buffer->num_frames_per_band(), capture_nonlocked_.split_rate);
|
||||
|
||||
@ -355,7 +355,8 @@ class AudioProcessingImpl : public AudioProcessing {
|
||||
int agc_clipped_level_min,
|
||||
bool use_experimental_agc,
|
||||
bool use_experimental_agc_agc2_level_estimation,
|
||||
bool use_experimental_agc_agc2_digital_adaptive)
|
||||
bool use_experimental_agc_agc2_digital_adaptive,
|
||||
bool use_experimental_agc_process_before_aec)
|
||||
: // Format of processing streams at input/output call sites.
|
||||
agc_startup_min_volume(agc_startup_min_volume),
|
||||
agc_clipped_level_min(agc_clipped_level_min),
|
||||
@ -363,12 +364,15 @@ class AudioProcessingImpl : public AudioProcessing {
|
||||
use_experimental_agc_agc2_level_estimation(
|
||||
use_experimental_agc_agc2_level_estimation),
|
||||
use_experimental_agc_agc2_digital_adaptive(
|
||||
use_experimental_agc_agc2_digital_adaptive) {}
|
||||
use_experimental_agc_agc2_digital_adaptive),
|
||||
use_experimental_agc_process_before_aec(
|
||||
use_experimental_agc_process_before_aec) {}
|
||||
int agc_startup_min_volume;
|
||||
int agc_clipped_level_min;
|
||||
bool use_experimental_agc;
|
||||
bool use_experimental_agc_agc2_level_estimation;
|
||||
bool use_experimental_agc_agc2_digital_adaptive;
|
||||
bool use_experimental_agc_process_before_aec;
|
||||
|
||||
} constants_;
|
||||
|
||||
|
||||
@ -122,10 +122,12 @@ struct ExperimentalAgc {
|
||||
explicit ExperimentalAgc(bool enabled) : enabled(enabled) {}
|
||||
ExperimentalAgc(bool enabled,
|
||||
bool enabled_agc2_level_estimator,
|
||||
bool digital_adaptive_disabled)
|
||||
bool digital_adaptive_disabled,
|
||||
bool analyze_before_aec)
|
||||
: enabled(enabled),
|
||||
enabled_agc2_level_estimator(enabled_agc2_level_estimator),
|
||||
digital_adaptive_disabled(digital_adaptive_disabled) {}
|
||||
digital_adaptive_disabled(digital_adaptive_disabled),
|
||||
analyze_before_aec(analyze_before_aec) {}
|
||||
|
||||
ExperimentalAgc(bool enabled, int startup_min_volume)
|
||||
: enabled(enabled), startup_min_volume(startup_min_volume) {}
|
||||
@ -140,6 +142,9 @@ struct ExperimentalAgc {
|
||||
int clipped_level_min = kClippedLevelMin;
|
||||
bool enabled_agc2_level_estimator = false;
|
||||
bool digital_adaptive_disabled = false;
|
||||
// 'analyze_before_aec' is an experimental flag. It is intended to be removed
|
||||
// at some point.
|
||||
bool analyze_before_aec = false;
|
||||
};
|
||||
|
||||
// Use to enable experimental noise suppression. It can be set in the
|
||||
|
||||
@ -730,7 +730,9 @@ void AudioProcessingSimulator::CreateAudioProcessor() {
|
||||
!!settings_.use_experimental_agc_agc2_level_estimator &&
|
||||
*settings_.use_experimental_agc_agc2_level_estimator,
|
||||
!!settings_.experimental_agc_disable_digital_adaptive &&
|
||||
*settings_.experimental_agc_disable_digital_adaptive));
|
||||
*settings_.experimental_agc_disable_digital_adaptive,
|
||||
!!settings_.experimental_agc_analyze_before_aec &&
|
||||
*settings_.experimental_agc_analyze_before_aec));
|
||||
if (settings_.use_ed) {
|
||||
apm_config.residual_echo_detector.enabled = *settings_.use_ed;
|
||||
}
|
||||
|
||||
@ -68,6 +68,7 @@ struct SimulationSettings {
|
||||
absl::optional<bool> use_experimental_agc;
|
||||
absl::optional<bool> use_experimental_agc_agc2_level_estimator;
|
||||
absl::optional<bool> experimental_agc_disable_digital_adaptive;
|
||||
absl::optional<bool> experimental_agc_analyze_before_aec;
|
||||
absl::optional<int> aecm_routing_mode;
|
||||
absl::optional<bool> use_aecm_comfort_noise;
|
||||
absl::optional<int> agc_mode;
|
||||
|
||||
@ -119,6 +119,15 @@ DEFINE_int(experimental_agc_disable_digital_adaptive,
|
||||
kParameterNotSpecifiedValue,
|
||||
"Force-deactivate (1) digital adaptation in "
|
||||
"experimental AGC. Digital adaptation is active by default (0).");
|
||||
DEFINE_int(experimental_agc_analyze_before_aec,
|
||||
kParameterNotSpecifiedValue,
|
||||
"Make level estimation happen before AEC"
|
||||
" in the experimental AGC. After AEC is the default (0)");
|
||||
DEFINE_int(
|
||||
experimental_agc_agc2_level_estimator,
|
||||
kParameterNotSpecifiedValue,
|
||||
"AGC2 level estimation"
|
||||
" in the experimental AGC. AGC1 level estimation is the default (0)");
|
||||
DEFINE_int(
|
||||
refined_adaptive_filter,
|
||||
kParameterNotSpecifiedValue,
|
||||
@ -259,7 +268,10 @@ SimulationSettings CreateSettings() {
|
||||
SetSettingIfFlagSet(FLAG_experimental_agc, &settings.use_experimental_agc);
|
||||
SetSettingIfFlagSet(FLAG_experimental_agc_disable_digital_adaptive,
|
||||
&settings.experimental_agc_disable_digital_adaptive);
|
||||
|
||||
SetSettingIfFlagSet(FLAG_experimental_agc_analyze_before_aec,
|
||||
&settings.experimental_agc_analyze_before_aec);
|
||||
SetSettingIfFlagSet(FLAG_experimental_agc_agc2_level_estimator,
|
||||
&settings.use_experimental_agc_agc2_level_estimator);
|
||||
SetSettingIfSpecified(FLAG_aecm_routing_mode, &settings.aecm_routing_mode);
|
||||
SetSettingIfFlagSet(FLAG_aecm_comfort_noise,
|
||||
&settings.use_aecm_comfort_noise);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user