[pulseaudio-discuss] [PATCH v3 03/24] echo-cancel: Add support for the webrtc intelligibility enhancer

Arun Raghavan arun at accosted.net
Sun Jan 24 20:06:27 PST 2016


On 24 January 2016 at 22:00, Tanu Kaskinen <tanuk at iki.fi> wrote:
> On Mon, 2016-01-18 at 13:06 +0530, arun at accosted.net wrote:
>> From: Arun Raghavan <git at arunraghavan.net>
>>
>> Just exposing this, disabled by default. It's not used by Chromium at
>> the moment.
>> ---
>>  src/modules/echo-cancel/webrtc.cc | 14 ++++++++++++--
>>  1 file changed, 12 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/modules/echo-cancel/webrtc.cc b/src/modules/echo-cancel/webrtc.cc
>> index f4f1395..bbfa43f 100644
>> --- a/src/modules/echo-cancel/webrtc.cc
>> +++ b/src/modules/echo-cancel/webrtc.cc
>> @@ -47,6 +47,7 @@ PA_C_DECL_END
>>  #define DEFAULT_COMFORT_NOISE true
>>  #define DEFAULT_DRIFT_COMPENSATION false
>>  #define DEFAULT_EXTENDED_FILTER false
>> +#define DEFAULT_INTELLIGIBILITY_ENHANCER false
>>
>>  static const char* const valid_modargs[] = {
>>      "high_pass_filter",
>> @@ -58,6 +59,7 @@ static const char* const valid_modargs[] = {
>>      "comfort_noise",
>>      "drift_compensation",
>>      "extended_filter",
>> +    "intelligibility_enhancer",
>>      NULL
>>  };
>>
>> @@ -84,7 +86,7 @@ bool pa_webrtc_ec_init(pa_core *c, pa_echo_canceller *ec,
>>      webrtc::AudioProcessing *apm = NULL;
>>      webrtc::ProcessingConfig pconfig;
>>      webrtc::Config config;
>> -    bool hpf, ns, agc, dgc, mobile, cn, ext_filter;
>> +    bool hpf, ns, agc, dgc, mobile, cn, ext_filter, intelligibility;
>>      int rm = -1;
>>      pa_modargs *ma;
>>
>> @@ -163,8 +165,16 @@ bool pa_webrtc_ec_init(pa_core *c, pa_echo_canceller *ec,
>>          goto fail;
>>      }
>>
>> +    intelligibility = DEFAULT_INTELLIGIBILITY_ENHANCER;
>> +    if (pa_modargs_get_value_boolean(ma, "intelligibility_enhancer", &intelligibility) < 0) {
>> +        pa_log("Failed to parse intelligibility_enhancer value");
>> +        goto fail;
>> +    }
>> +
>>      if (ext_filter)
>>          config.Set(new webrtc::ExtendedFilter(true));
>> +    if (intelligibility)
>> +        config.Set<webrtc::Intelligibility>(new webrtc::Intelligibility(true));
>
> The same comment as in the previous patch: could the if statement be
> eliminated?

Ack.

>>
>>      apm = webrtc::AudioProcessing::Create(config);
>>
>> @@ -253,7 +263,7 @@ void pa_webrtc_ec_play(pa_echo_canceller *ec, const uint8_t *play) {
>>      pa_assert(play_frame.samples_per_channel_ <= webrtc::AudioFrame::kMaxDataSizeSamples);
>>      memcpy(play_frame.data_, play, ec->params.priv.webrtc.blocksize);
>>
>> -    apm->AnalyzeReverseStream(&play_frame);
>> +    apm->ProcessReverseStream(&play_frame);
>
> This looks like a potentially unrelated change. Why is this change
> done?

It is needed for the intelligibility enhancer to work, but I later
realised we don't actually support this -- unlike
AnalyzeReverseStream(), ProcessReverseStream() modifies the playback
samples. This is something that needs to be done in the future
(there's a later commit that disables this that I could not squash due
to some intermediate changes).

-- Arun


More information about the pulseaudio-discuss mailing list