summaryrefslogtreecommitdiffstats
path: root/src/modules/echo-cancel/module-echo-cancel.c
diff options
context:
space:
mode:
authorArun Raghavan <arun.raghavan@collabora.co.uk>2010-09-06 21:24:55 +0530
committerArun Raghavan <arun.raghavan@collabora.co.uk>2011-03-28 14:40:59 +0530
commit668f4e49b6296431a3592e7fc7cc8846f0e7f272 (patch)
treeed499c14066683d054592e4ccbfe5913e7b3785e /src/modules/echo-cancel/module-echo-cancel.c
parent57c598393780e27915c84ff167d82fc85803ffe2 (diff)
echo-cancel: Pass arguments to the specific canceller module
This allows us to tweak module parameters for whichever AEC module is chosen.
Diffstat (limited to 'src/modules/echo-cancel/module-echo-cancel.c')
-rw-r--r--src/modules/echo-cancel/module-echo-cancel.c28
1 files changed, 3 insertions, 25 deletions
diff --git a/src/modules/echo-cancel/module-echo-cancel.c b/src/modules/echo-cancel/module-echo-cancel.c
index 2e724344..d6968cd0 100644
--- a/src/modules/echo-cancel/module-echo-cancel.c
+++ b/src/modules/echo-cancel/module-echo-cancel.c
@@ -70,13 +70,12 @@ PA_MODULE_USAGE(
"sink_name=<name for the sink> "
"sink_properties=<properties for the sink> "
"sink_master=<name of sink to filter> "
- "frame_size_ms=<amount of data to process at one time> "
- "filter_size_ms=<amount of echo to cancel> "
"adjust_time=<how often to readjust rates in s> "
"format=<sample format> "
"rate=<sample rate> "
"channels=<number of channels> "
"channel_map=<channel map> "
+ "aec_args=<parameters for the AEC engine> "
"save_aec=<save AEC data in /tmp> "
));
@@ -97,11 +96,6 @@ static const pa_echo_canceller ec_table[] = {
},
};
-/* should be between 10-20 ms */
-#define DEFAULT_FRAME_SIZE_MS 20
-/* should be between 100-500 ms */
-#define DEFAULT_FILTER_SIZE_MS 200
-
#define DEFAULT_ADJUST_TIME_USEC (1*PA_USEC_PER_SEC)
#define DEFAULT_SAVE_AEC 0
@@ -154,7 +148,6 @@ struct userdata {
pa_core *core;
pa_module *module;
- uint32_t frame_size_ms;
uint32_t save_aec;
pa_echo_canceller *ec;
@@ -199,13 +192,12 @@ static const char* const valid_modargs[] = {
"sink_name",
"sink_properties",
"sink_master",
- "frame_size_ms",
- "filter_size_ms",
"adjust_time",
"format",
"rate",
"channels",
"channel_map",
+ "aec_args",
"save_aec",
NULL
};
@@ -1287,7 +1279,6 @@ int pa__init(pa_module*m) {
pa_source_new_data source_data;
pa_sink_new_data sink_data;
pa_memchunk silence;
- uint32_t frame_size_ms, filter_size_ms;
uint32_t adjust_time_sec;
pa_assert(m);
@@ -1309,18 +1300,6 @@ int pa__init(pa_module*m) {
}
pa_assert(sink_master);
- frame_size_ms = DEFAULT_FRAME_SIZE_MS;
- if (pa_modargs_get_value_u32(ma, "frame_size_ms", &frame_size_ms) < 0 || frame_size_ms < 1 || frame_size_ms > 200) {
- pa_log("Invalid frame_size_ms specification");
- goto fail;
- }
-
- filter_size_ms = DEFAULT_FILTER_SIZE_MS;
- if (pa_modargs_get_value_u32(ma, "filter_size_ms", &filter_size_ms) < 0 || filter_size_ms < 1 || filter_size_ms > 2000) {
- pa_log("Invalid filter_size_ms specification");
- goto fail;
- }
-
ss = source_master->sample_spec;
ss.format = PA_SAMPLE_S16LE;
map = source_master->channel_map;
@@ -1337,7 +1316,6 @@ int pa__init(pa_module*m) {
u->core = m->core;
u->module = m;
m->userdata = u;
- u->frame_size_ms = frame_size_ms;
u->ec = pa_xnew0(pa_echo_canceller, 1);
if (!u->ec) {
@@ -1369,7 +1347,7 @@ int pa__init(pa_module*m) {
u->asyncmsgq = pa_asyncmsgq_new(0);
u->need_realign = TRUE;
if (u->ec->init) {
- if (!u->ec->init(u->ec, ss, map, filter_size_ms, frame_size_ms)) {
+ if (!u->ec->init(u->ec, ss, map, pa_modargs_get_value(ma, "aec_args", NULL))) {
pa_log("Failed to init AEC engine");
goto fail;
}