diff options
author | Cheng-Yi Chiang <cychiang@chromium.org> | 2016-09-18 03:01:53 +0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-09-26 04:59:44 -0700 |
commit | 9e6d58368b2f2d1a3a9d9281433470a6319e9847 (patch) | |
tree | 82abbc3fb5b6f2bb7f77d86f5f218b6fd3c1c35e /cras | |
parent | 8213253c4745ac370b58bb1a1d514f69f25879cb (diff) | |
download | adhd-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.c | 52 |
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); } |