[pulseaudio-discuss] [PATCH v2 09/25] echo-cancel: Allow enabling tracing output from the webrtc canceller
arun at accosted.net
arun at accosted.net
Tue Dec 15 19:39:55 PST 2015
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 a8b69b5..58af280 100644
--- a/src/modules/echo-cancel/webrtc.cc
+++ b/src/modules/echo-cancel/webrtc.cc
@@ -35,6 +35,7 @@ PA_C_DECL_END
#include <webrtc/modules/audio_processing/include/audio_processing.h>
#include <webrtc/modules/interface/module_common_types.h>
+#include <webrtc/system_wrappers/include/trace.h>
#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)
+ {
+ 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)
@@ -203,6 +220,18 @@ bool pa_webrtc_ec_init(pa_core *c, pa_echo_canceller *ec,
if (intelligibility)
config.Set<webrtc::Intelligibility>(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());
+ }
+
pa_webrtc_ec_fixate_spec(rec_ss, rec_map, play_ss, play_map, out_ss, out_map);
apm = webrtc::AudioProcessing::Create(config);
@@ -265,6 +294,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();
if (apm)
delete apm;
@@ -331,6 +362,9 @@ void pa_webrtc_ec_run(pa_echo_canceller *ec, const uint8_t *rec, const uint8_t *
}
void pa_webrtc_ec_done(pa_echo_canceller *ec) {
+ if (ec->params.priv.webrtc.trace)
+ webrtc::Trace::ReturnTrace();
+
if (ec->params.priv.webrtc.apm) {
delete (webrtc::AudioProcessing*)ec->params.priv.webrtc.apm;
ec->params.priv.webrtc.apm = NULL;
--
2.5.0
More information about the pulseaudio-discuss
mailing list