blob: c921ee7f4077d1bc1fa8d46919e186e7217188ef [file] [log] [blame]
/* Copyright 2018 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include <syslog.h>
#include "apm_config.h"
#define APM_CONFIG_NAME "apm.ini"
#define APM_GET_INT(ini, key) \
iniparser_getint( \
ini, key, \
key ## _VALUE)
#define APM_GET_FLOAT(ini, key) \
iniparser_getdouble( \
ini, key, \
key ## _VALUE)
typedef webrtc::AudioProcessing::Config ApConfig;
void apm_config_apply(dictionary *ini, webrtc::AudioProcessing *apm)
{
ApConfig config;
int level_estimator;
if (ini == NULL)
return;
config.residual_echo_detector.enabled =
APM_GET_INT(ini, APM_RESIDUAL_ECHO_DETECTOR_ENABLED);
config.high_pass_filter.enabled =
APM_GET_INT(ini, APM_HIGH_PASS_FILTER_ENABLED);
config.high_pass_filter.apply_in_full_band =
APM_GET_INT(ini, APM_HIGH_PASS_FILTER_APPLY_IN_FULL_BAND);
config.pre_amplifier.enabled =
APM_GET_INT(ini, APM_PRE_AMPLIFIER_ENABLED);
config.pre_amplifier.fixed_gain_factor =
APM_GET_FLOAT(ini, APM_PRE_AMPLIFIER_FIXED_GAIN_FACTOR);
config.echo_canceller.enabled =
APM_GET_INT(ini, APM_ECHO_CANCELLER_ENABLED);
config.echo_canceller.mobile_mode =
APM_GET_INT(ini, APM_ECHO_CANCELLER_MOBILE_MODE);
config.echo_canceller.export_linear_aec_output =
APM_GET_INT(ini, APM_ECHO_CANCELLER_EXPORT_LINEAR_AEC_OUTPUT);
config.echo_canceller.enforce_high_pass_filtering =
APM_GET_INT(ini, APM_ECHO_CANCELLER_ENFORCE_HIGH_PASS_FILTERING);
config.transient_suppression.enabled =
APM_GET_INT(ini, APM_TRANSIENT_SUPPRESSION_ENABLED);
config.voice_detection.enabled =
APM_GET_INT(ini, APM_VOICE_DETECTION_ENABLED);
config.gain_controller1.enabled =
APM_GET_INT(ini, APM_GAIN_CONTROL_ENABLED);
config.gain_controller1.mode = static_cast<ApConfig::GainController1::Mode>(
APM_GET_INT(ini, APM_GAIN_CONTROL_MODE));
config.gain_controller1.compression_gain_db =
APM_GET_INT(ini, APM_GAIN_CONTROL_COMPRESSION_GAIN_DB);
config.gain_controller1.target_level_dbfs =
APM_GET_INT(ini, APM_GAIN_CONTROL_TARGET_LEVEL_DBFS);
config.gain_controller1.enable_limiter =
APM_GET_INT(ini, APM_GAIN_CONTROL_ENABLE_LIMITER);
config.gain_controller1.analog_level_minimum =
APM_GET_INT(ini, APM_GAIN_CONTROL_ANALOG_LEVEL_MINIMUM);
config.gain_controller1.analog_level_maximum =
APM_GET_INT(ini, APM_GAIN_CONTROL_ANALOG_LEVEL_MAXIMUM);
/* GainController1::AnalogGainController */
config.gain_controller1.analog_gain_controller.enabled =
APM_GET_INT(ini, APM_ANALOG_GAIN_CONTROLLER_ENABLED);
config.gain_controller1.analog_gain_controller.startup_min_volume =
APM_GET_INT(ini, APM_ANALOG_GAIN_CONTROLLER_STARTUP_MIN_VOLUME);
config.gain_controller1.analog_gain_controller.clipped_level_min =
APM_GET_INT(ini, APM_ANALOG_GAIN_CONTROLLER_CLIPPED_LEVEL_MIN);
config.gain_controller1.analog_gain_controller.enable_agc2_level_estimator =
APM_GET_INT(ini, APM_ANALOG_GAIN_CONTROLLER_ENABLE_AGC2_LEVEL_ESTIMATOR);
config.gain_controller1.analog_gain_controller.enable_digital_adaptive =
APM_GET_INT(ini, APM_ANALOG_GAIN_CONTROLLER_ENABLE_DIGITAL_ADAPTIVE);
config.gain_controller2.enabled =
APM_GET_INT(ini, APM_GAIN_CONTROLLER2_ENABLED);
config.gain_controller2.adaptive_digital.enabled =
APM_GET_INT(ini, ADAPTIVE_DIGITAL_ENABLED);
config.gain_controller2.adaptive_digital.vad_probability_attack =
APM_GET_FLOAT(ini, ADAPTIVE_DIGITAL_VAD_PROBABILITY_ATTACK);
config.gain_controller2.adaptive_digital.level_estimator_adjacent_speech_frames_threshold =
APM_GET_INT(ini, ADAPTIVE_DIGITAL_LEVEL_ESTIMATOR_ADJACENT_SPEECH_FRAMES_THRESHOLD);
config.gain_controller2.adaptive_digital.initial_saturation_margin_db =
APM_GET_FLOAT(ini, ADAPTIVE_DIGITAL_INITIAL_SATURATION_MARGIN_DB);
config.gain_controller2.adaptive_digital.gain_applier_adjacent_speech_frames_threshold =
APM_GET_INT(ini, ADAPTIVE_DIGITAL_GAIN_APPLIER_ADJACENT_SPEECH_FRAMES_THRESHOLD);
config.gain_controller2.adaptive_digital.max_gain_change_db_per_second =
APM_GET_FLOAT(ini, ADAPTIVE_DIGITAL_MAX_GAIN_CHANGE_DB_PER_SECOND);
config.gain_controller2.adaptive_digital.max_output_noise_level_dbfs =
APM_GET_FLOAT(ini, ADAPTIVE_DIGITAL_MAX_OUTPUT_NOISE_LEVEL_DBFS);
config.gain_controller2.adaptive_digital.extra_saturation_margin_db =
APM_GET_FLOAT(ini, ADAPTIVE_DIGITAL_EXTRA_SATURATION_MARGIN_DB);
level_estimator = APM_GET_INT(
ini, ADAPTIVE_DIGITAL_LEVEL_ESTIMATOR);
config.gain_controller2.adaptive_digital.level_estimator =
static_cast<ApConfig::GainController2::LevelEstimator>(
level_estimator);
config.gain_controller2.adaptive_digital.use_saturation_protector =
APM_GET_INT(ini, ADAPTIVE_DIGITAL_USE_SATURATION_PROTECTOR);
config.gain_controller2.fixed_digital.gain_db =
APM_GET_FLOAT(ini, APM_GAIN_CONTROLLER2_FIXED_DIGITAL_GAIN_DB);
config.level_estimation.enabled =
APM_GET_INT(ini, APM_LEVEL_ESTIMATION_ENABLED);
config.noise_suppression.enabled =
APM_GET_INT(ini, APM_NOISE_SUPPRESSION_ENABLED);
config.noise_suppression.level = static_cast<ApConfig::NoiseSuppression::Level>(
APM_GET_INT(ini, APM_NOISE_SUPPRESSION_LEVEL));
config.noise_suppression.analyze_linear_aec_output_when_available =
APM_GET_INT(ini, APM_NOISE_SUPPRESSION_ANALYZE_LINEAR_AEC_OUTPUT_WHEN_AVAILABLE);
apm->ApplyConfig(config);
}
void apm_config_dump(dictionary *ini)
{
syslog(LOG_ERR, "---- apm config dump ----");
syslog(LOG_ERR, "residual_echo_detector_enabled %u",
APM_GET_INT(ini, APM_RESIDUAL_ECHO_DETECTOR_ENABLED));
syslog(LOG_ERR, "high_pass_filter_enabled %u",
APM_GET_INT(ini, APM_HIGH_PASS_FILTER_ENABLED));
syslog(LOG_ERR, "high_pass_filter_apply_in_full_band %d",
APM_GET_INT(ini, APM_HIGH_PASS_FILTER_APPLY_IN_FULL_BAND));
syslog(LOG_ERR, "pre_amplifier_enabled %u",
APM_GET_INT(ini, APM_PRE_AMPLIFIER_ENABLED));
syslog(LOG_ERR, "pre_amplifier_fixed_gain_factor %f",
APM_GET_FLOAT(ini, APM_PRE_AMPLIFIER_FIXED_GAIN_FACTOR));
syslog(LOG_ERR, "echo_canceller_enabled %d",
APM_GET_INT(ini, APM_ECHO_CANCELLER_ENABLED));
syslog(LOG_ERR, "echo_canceller_mobile_mode %d",
APM_GET_INT(ini, APM_ECHO_CANCELLER_MOBILE_MODE));
syslog(LOG_ERR, "echo_canceller_export_linear_aec_output %d",
APM_GET_INT(ini, APM_ECHO_CANCELLER_EXPORT_LINEAR_AEC_OUTPUT));
syslog(LOG_ERR, "echo_canceller_enforce_high_pass_filtering %d",
APM_GET_INT(ini, APM_ECHO_CANCELLER_ENFORCE_HIGH_PASS_FILTERING));
syslog(LOG_ERR, "transient_suppression_enabled %d",
APM_GET_INT(ini, APM_TRANSIENT_SUPPRESSION_ENABLED));
syslog(LOG_ERR, "voice_detection_enabled %d",
APM_GET_INT(ini, APM_VOICE_DETECTION_ENABLED));
syslog(LOG_ERR, "gain_controller2_enabled %u",
APM_GET_INT(ini, APM_GAIN_CONTROLLER2_ENABLED));
syslog(LOG_ERR, "adaptive_digital_enabled %d",
APM_GET_INT(ini, ADAPTIVE_DIGITAL_ENABLED));
syslog(LOG_ERR, "adaptive_digital_vad_probability_attack %f",
APM_GET_FLOAT(ini, ADAPTIVE_DIGITAL_VAD_PROBABILITY_ATTACK));
syslog(LOG_ERR, "adaptive_digital_level_estimator_adjacent_speech_frames_threshold %d",
APM_GET_INT(ini, ADAPTIVE_DIGITAL_LEVEL_ESTIMATOR_ADJACENT_SPEECH_FRAMES_THRESHOLD));
syslog(LOG_ERR, "adaptive_digital_initial_saturation_margin_db %f",
APM_GET_FLOAT(ini, ADAPTIVE_DIGITAL_INITIAL_SATURATION_MARGIN_DB));
syslog(LOG_ERR, "adaptive_digital_gain_applier_adjacent_speech_frames_threshold %d",
APM_GET_INT(ini, ADAPTIVE_DIGITAL_GAIN_APPLIER_ADJACENT_SPEECH_FRAMES_THRESHOLD));
syslog(LOG_ERR, "adaptive_digital_max_gain_change_db_per_second %f",
APM_GET_FLOAT(ini, ADAPTIVE_DIGITAL_MAX_GAIN_CHANGE_DB_PER_SECOND));
syslog(LOG_ERR, "adaptive_digital_max_output_noise_level_dbfs %f",
APM_GET_FLOAT(ini, ADAPTIVE_DIGITAL_MAX_OUTPUT_NOISE_LEVEL_DBFS));
syslog(LOG_ERR, "adaptive_digital_extra_saturation_margin_db %f",
APM_GET_FLOAT(ini,
ADAPTIVE_DIGITAL_EXTRA_SATURATION_MARGIN_DB));
syslog(LOG_ERR, "adaptive_digital_level_estimator %d",
APM_GET_INT(ini, ADAPTIVE_DIGITAL_LEVEL_ESTIMATOR));
syslog(LOG_ERR, "adaptive_digital_use_saturation_protector %d",
APM_GET_INT(ini, ADAPTIVE_DIGITAL_USE_SATURATION_PROTECTOR));
syslog(LOG_ERR, "adaptive_digital_sse2_allowed %d",
APM_GET_INT(ini, ADAPTIVE_DIGITAL_SSE2_ALLOWED));
syslog(LOG_ERR, "adaptive_digital_avx2_allowed %d",
APM_GET_INT(ini, ADAPTIVE_DIGITAL_AVX2_ALLOWED));
syslog(LOG_ERR, "adaptive_digital_neon_allowed %d",
APM_GET_INT(ini, ADAPTIVE_DIGITAL_NEON_ALLOWED));
syslog(LOG_ERR, "gain_controller2_fixed_digital_gain_db %f",
APM_GET_FLOAT(ini, APM_GAIN_CONTROLLER2_FIXED_DIGITAL_GAIN_DB));
syslog(LOG_ERR, "level_estimation_enabled %d",
APM_GET_INT(ini, APM_LEVEL_ESTIMATION_ENABLED));
syslog(LOG_ERR, "gain_control_compression_gain_db %u",
APM_GET_INT(ini, APM_GAIN_CONTROL_COMPRESSION_GAIN_DB));
syslog(LOG_ERR, "gain_control_target_level_dbfs %d",
APM_GET_INT(ini, APM_GAIN_CONTROL_TARGET_LEVEL_DBFS));
syslog(LOG_ERR, "gain_control_enable_limiter %d",
APM_GET_INT(ini, APM_GAIN_CONTROL_ENABLE_LIMITER));
syslog(LOG_ERR, "gain_control_analog_level_minimum %d",
APM_GET_INT(ini, APM_GAIN_CONTROL_ANALOG_LEVEL_MINIMUM));
syslog(LOG_ERR, "gain_control_analog_level_maximumc %d",
APM_GET_INT(ini, APM_GAIN_CONTROL_ANALOG_LEVEL_MAXIMUM));
syslog(LOG_ERR, "gain_control_mode %u",
APM_GET_INT(ini, APM_GAIN_CONTROL_MODE));
syslog(LOG_ERR, "gain_control_enabled %u",
APM_GET_INT(ini, APM_GAIN_CONTROL_ENABLED));
syslog(LOG_ERR, "analog_gain_controller_enabled %d",
APM_GET_INT(ini, APM_ANALOG_GAIN_CONTROLLER_ENABLED));
syslog(LOG_ERR, "analog_gain_controller_startup_min_volume %d",
APM_GET_INT(ini, APM_ANALOG_GAIN_CONTROLLER_STARTUP_MIN_VOLUME));
syslog(LOG_ERR, "analog_gain_controller_clipped_level_min %d",
APM_GET_INT(ini, APM_ANALOG_GAIN_CONTROLLER_CLIPPED_LEVEL_MIN));
syslog(LOG_ERR, "analog_gain_controller_enable_agc2_level_estimator %d",
APM_GET_INT(ini, APM_ANALOG_GAIN_CONTROLLER_ENABLE_AGC2_LEVEL_ESTIMATOR));
syslog(LOG_ERR, "analog_gain_controller_enable_digital_adaptive %d",
APM_GET_INT(ini, APM_ANALOG_GAIN_CONTROLLER_ENABLE_DIGITAL_ADAPTIVE));
syslog(LOG_ERR, "noise_suppression_level %u",
APM_GET_INT(ini, APM_NOISE_SUPPRESSION_LEVEL));
syslog(LOG_ERR, "noise_suppression_enabled %u",
APM_GET_INT(ini, APM_NOISE_SUPPRESSION_ENABLED));
}