summaryrefslogtreecommitdiff
path: root/cras
diff options
context:
space:
mode:
authorCheng-Yi Chiang <cychiang@chromium.org>2016-09-18 03:01:53 +0800
committerchrome-bot <chrome-bot@chromium.org>2016-09-26 04:59:44 -0700
commit9e6d58368b2f2d1a3a9d9281433470a6319e9847 (patch)
tree82abbc3fb5b6f2bb7f77d86f5f218b6fd3c1c35e /cras
parent8213253c4745ac370b58bb1a1d514f69f25879cb (diff)
downloadadhd-9e6d58368b2f2d1a3a9d9281433470a6319e9847.tar.gz
CRAS: dps_mod_builtin - Add a swap_lr built-in module
This module swaps data on left and right channels. BUG=chromium:645051 TEST=Insert one swap_lr section in dsp.ini and check left and right channels are swapped. [swap_lr] library=builtin label=swap_lr input_0={swap_lr:0} input_1={swap_lr:1} output_2={dst:1} output_3={dst:0} Change-Id: I687e69bcc13375436f9535db97514b3a60580376 Reviewed-on: https://chromium-review.googlesource.com/386701 Commit-Ready: Cheng-Yi Chiang <cychiang@chromium.org> Tested-by: Cheng-Yi Chiang <cychiang@chromium.org> Reviewed-by: Chinyue Chen <chinyue@chromium.org> Reviewed-by: Dylan Reid <dgreid@chromium.org>
Diffstat (limited to 'cras')
-rw-r--r--cras/src/server/cras_dsp_mod_builtin.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/cras/src/server/cras_dsp_mod_builtin.c b/cras/src/server/cras_dsp_mod_builtin.c
index de93cb08..c6948795 100644
--- a/cras/src/server/cras_dsp_mod_builtin.c
+++ b/cras/src/server/cras_dsp_mod_builtin.c
@@ -56,6 +56,56 @@ static void empty_init_module(struct dsp_module *module)
}
/*
+ * swap_lr module functions
+ */
+static int swap_lr_instantiate(struct dsp_module *module,
+ unsigned long sample_rate)
+{
+ module->data = calloc(4, sizeof(float*));
+ return 0;
+}
+
+static void swap_lr_connect_port(struct dsp_module *module,
+ unsigned long port, float *data_location)
+{
+ float **ports;
+ ports = (float **)module->data;
+ ports[port] = data_location;
+}
+
+static void swap_lr_run(struct dsp_module *module,
+ unsigned long sample_count)
+{
+ size_t i;
+ float **ports = (float **)module->data;
+
+ /* This module runs dsp in-place, so ports[0] == ports[2],
+ * ports[1] == ports[3]. Here we swap data on two channels.
+ */
+ for (i = 0; i < sample_count; i++) {
+ float temp = ports[0][i];
+ ports[2][i] = ports[1][i];
+ ports[3][i] = temp;
+ }
+}
+
+static void swap_lr_deinstantiate(struct dsp_module *module)
+{
+ free(module->data);
+}
+
+static void swap_lr_init_module(struct dsp_module *module)
+{
+ module->instantiate = &swap_lr_instantiate;
+ module->connect_port = &swap_lr_connect_port;
+ module->get_delay = &empty_get_delay;
+ module->run = &swap_lr_run;
+ module->deinstantiate = &swap_lr_deinstantiate;
+ module->free_module = &empty_free_module;
+ module->get_properties = &empty_get_properties;
+}
+
+/*
* invert_lr module functions
*/
static int invert_lr_instantiate(struct dsp_module *module,
@@ -424,6 +474,8 @@ struct dsp_module *cras_dsp_module_load_builtin(struct plugin *plugin)
eq2_init_module(module);
} else if (strcmp(plugin->label, "drc") == 0) {
drc_init_module(module);
+ } else if (strcmp(plugin->label, "swap_lr") == 0) {
+ swap_lr_init_module(module);
} else {
empty_init_module(module);
}