[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