[pulseaudio-discuss] [PATCH v3 09/24] echo-cancel: Allow enabling tracing output from the webrtc canceller

Tanu Kaskinen tanuk at iki.fi
Sat Jan 30 03:51:23 PST 2016


On Mon, 2016-01-18 at 13:06 +0530, arun at accosted.net wrote:
> From: Arun Raghavan <git at arunraghavan.net>
> 
> ---
>  src/modules/echo-cancel/echo-cancel.h |  1 +
>  src/modules/echo-cancel/webrtc.cc     | 34 ++++++++++++++++++++++++++++++++++
>  2 files changed, 35 insertions(+)
> 
> diff --git a/src/modules/echo-cancel/echo-cancel.h b/src/modules/echo-cancel/echo-cancel.h
> index 29d1574..142f8ac 100644
> --- a/src/modules/echo-cancel/echo-cancel.h
> +++ b/src/modules/echo-cancel/echo-cancel.h
> @@ -67,6 +67,7 @@ struct pa_echo_canceller_params {
>              uint32_t blocksize;
>              pa_sample_spec sample_spec;
>              bool agc;
> +            bool trace;
>          } webrtc;
>  #endif
>          /* each canceller-specific structure goes here */
> diff --git a/src/modules/echo-cancel/webrtc.cc b/src/modules/echo-cancel/webrtc.cc
> index 4dbd2fc..53ab7e1 100644
> --- a/src/modules/echo-cancel/webrtc.cc
> +++ b/src/modules/echo-cancel/webrtc.cc
> @@ -35,6 +35,7 @@ PA_C_DECL_END
>  
>  #include 
>  #include 
> +#include 
>  
>  #define BLOCK_SIZE_US 10000
>  
> @@ -48,6 +49,7 @@ PA_C_DECL_END
>  #define DEFAULT_DRIFT_COMPENSATION false
>  #define DEFAULT_EXTENDED_FILTER false
>  #define DEFAULT_INTELLIGIBILITY_ENHANCER false
> +#define DEFAULT_TRACE false
>  
>  static const char* const valid_modargs[] = {
>      "high_pass_filter",
> @@ -60,6 +62,7 @@ static const char* const valid_modargs[] = {
>      "drift_compensation",
>      "extended_filter",
>      "intelligibility_enhancer",
> +    "trace",
>      NULL
>  };
>  
> @@ -78,6 +81,20 @@ static int routing_mode_from_string(const char *rmode) {
>          return -1;
>  }
>  
> +class PaWebrtcTraceCallback : public webrtc::TraceCallback {
> +    void Print(webrtc::TraceLevel level, const char *message, int length)

I hope the presence of a length parameter doesn't mean that message
isn't null-terminated.

> +    {
> +        if (level & webrtc::kTraceError || level & webrtc::kTraceCritical)
> +            pa_log(message);
> +        else if (level & webrtc::kTraceWarning)
> +            pa_log_warn(message);
> +        else if (level & webrtc::kTraceInfo)
> +            pa_log_info(message);
> +        else
> +            pa_log_debug(message);
> +    }
> +};
> +
>  static void pa_webrtc_ec_fixate_spec(pa_sample_spec *rec_ss, pa_channel_map *rec_map,
>                                       pa_sample_spec *play_ss, pa_channel_map *play_map,
>                                       pa_sample_spec *out_ss, pa_channel_map *out_map)
> @@ -201,6 +218,18 @@ bool pa_webrtc_ec_init(pa_core *c, pa_echo_canceller *ec,
>      if (intelligibility)
>          config.Set(new webrtc::Intelligibility(true));
>  
> +    ec->params.priv.webrtc.trace = DEFAULT_TRACE;
> +    if (pa_modargs_get_value_boolean(ma, "trace", &ec->params.priv.webrtc.trace) < 0) {
> +        pa_log("Failed to parse trace value");
> +        goto fail;
> +    }
> +
> +    if (ec->params.priv.webrtc.trace) {
> +        webrtc::Trace::CreateTrace();
> +        webrtc::Trace::set_level_filter(webrtc::kTraceAll);
> +        webrtc::Trace::SetTraceCallback(new PaWebrtcTraceCallback());

Does webrtc::Trace delete the object that you allocate here?

> +    }
> +
>      pa_webrtc_ec_fixate_spec(rec_ss, rec_map, play_ss, play_map, out_ss, out_map);
>  
>      apm = webrtc::AudioProcessing::Create(config);
> @@ -263,6 +292,8 @@ bool pa_webrtc_ec_init(pa_core *c, pa_echo_canceller *ec,
>  fail:
>      if (ma)
>          pa_modargs_free(ma);
> +    if (ec->params.priv.webrtc.trace)
> +        webrtc::Trace::ReturnTrace();

What does this do? Is it safe to call this if you haven't yet set up
the tracing?

-- 
Tanu


More information about the pulseaudio-discuss mailing list