[pulseaudio-discuss] [PATCH] echo-cancel: add api support for webrtc echo suppression

Tanu Kaskinen tanuk at iki.fi
Sun Sep 17 16:21:28 UTC 2017


On Thu, 2017-09-14 at 12:21 -0700, James Huang wrote:
> ---
>  src/modules/echo-cancel/webrtc.cc | 11 ++++++++++-
>  1 file changed, 10 insertions(+), 1 deletion(-)
> 
> diff --git a/src/modules/echo-cancel/webrtc.cc b/src/modules/echo-cancel/webrtc.cc
> index aadb1af2..107d2301 100644
> --- a/src/modules/echo-cancel/webrtc.cc
> +++ b/src/modules/echo-cancel/webrtc.cc
> @@ -55,6 +55,7 @@ PA_C_DECL_END
>  #define DEFAULT_AGC_START_VOLUME 85
>  #define DEFAULT_BEAMFORMING false
>  #define DEFAULT_TRACE false
> +#define DEFAULT_ECHO_SUPPRESSION_LEVEL 0
>  
>  #define WEBRTC_AGC_MAX_VOLUME 255
>  
> @@ -76,6 +77,7 @@ static const char* const valid_modargs[] = {
>      "mic_geometry", /* documented in parse_mic_geometry() */
>      "target_direction", /* documented in parse_mic_geometry() */
>      "trace",
> +    "echo_suppression_level",
>      NULL
>  };
>  
> @@ -240,7 +242,7 @@ bool pa_webrtc_ec_init(pa_core *c, pa_echo_canceller *ec,
>      webrtc::Config config;
>      bool hpf, ns, agc, dgc, mobile, cn, vad, ext_filter, intelligibility, experimental_agc, beamforming;
>      int rm = -1, i;
> -    uint32_t agc_start_volume;
> +    uint32_t agc_start_volume, echo_suppression_level;
>      pa_modargs *ma;
>      bool trace = false;
>  
> @@ -290,6 +292,12 @@ bool pa_webrtc_ec_init(pa_core *c, pa_echo_canceller *ec,
>          goto fail;
>      }
>  
> +    echo_suppression_level = DEFAULT_ECHO_SUPPRESSION_LEVEL;
> +    if (pa_modargs_get_value_u32(ma, "echo_suppression_level", &echo_suppression_level) < 0) {
> +        pa_log("Failed to parse echo_suppression_level value");
> +        goto fail;
> +    }
> +
>      if (mobile) {
>          if (ec->params.drift_compensation) {
>              pa_log("Can't use drift_compensation in mobile mode");
> @@ -439,6 +447,7 @@ bool pa_webrtc_ec_init(pa_core *c, pa_echo_canceller *ec,
>      if (hpf)
>          apm->high_pass_filter()->Enable(true);
>  
> +    apm->echo_cancellation()->set_suppression_level((webrtc::EchoCancellation::SuppressionLevel) echo_suppression_level);
>      if (!mobile) {
>          apm->echo_cancellation()->enable_drift_compensation(ec->params.drift_compensation);
>          apm->echo_cancellation()->Enable(true);

The code looks fine, but the commit message should explain the
following things:

What problem does the patch solve? What does the "echo suppression
level" mean? What's the range of valid values for the level? (Oh, now I
realized that the code needs some changes too: it should check that the
passed value is in the valid range, unless the range covers all
possible u32 values.) If the set_suppression_level() function is not
called, is that equivalent to setting the level to 0?

-- 
Tanu

https://www.patreon.com/tanuk


More information about the pulseaudio-discuss mailing list