diff options
author | Arun Raghavan <arun.raghavan@collabora.co.uk> | 2010-09-21 20:42:32 +0530 |
---|---|---|
committer | Arun Raghavan <arun.raghavan@collabora.co.uk> | 2010-09-23 17:17:03 +0530 |
commit | 963250abb99ab43b209281c2aa5398205492e555 (patch) | |
tree | 9f745ac8c630dd294c1a9a3c8255098526122117 /src/modules/echo-cancel/adrian.c | |
parent | ab4223e9cffbc21399c0468dd89a2e57122fbfee (diff) |
echo-cancel: Add SSE optimisation to the adrian module
Optimises the core inner-product function, which takes the most CPU. The
SSE-optimised bits of the adrian echo canceller only if the CPU that PA
is running on actually supports SSE.
Diffstat (limited to 'src/modules/echo-cancel/adrian.c')
-rw-r--r-- | src/modules/echo-cancel/adrian.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/modules/echo-cancel/adrian.c b/src/modules/echo-cancel/adrian.c index 86db1e2c..c8acaa8b 100644 --- a/src/modules/echo-cancel/adrian.c +++ b/src/modules/echo-cancel/adrian.c @@ -51,12 +51,12 @@ static void pa_adrian_ec_fixate_spec(pa_sample_spec *source_ss, pa_channel_map * *sink_map = *source_map; } -pa_bool_t pa_adrian_ec_init(pa_echo_canceller *ec, +pa_bool_t pa_adrian_ec_init(pa_core *c, pa_echo_canceller *ec, pa_sample_spec *source_ss, pa_channel_map *source_map, pa_sample_spec *sink_ss, pa_channel_map *sink_map, uint32_t *blocksize, const char *args) { - int framelen, rate; + int framelen, rate, have_vector = 0; uint32_t frame_size_ms; pa_modargs *ma; @@ -80,7 +80,11 @@ pa_bool_t pa_adrian_ec_init(pa_echo_canceller *ec, pa_log_debug ("Using framelen %d, blocksize %u, channels %d, rate %d", framelen, ec->params.priv.adrian.blocksize, source_ss->channels, source_ss->rate); - ec->params.priv.adrian.aec = AEC_init(rate); + /* For now we only support SSE */ + if (c->cpu_info.cpu_type == PA_CPU_X86 && (c->cpu_info.flags.x86 & PA_CPU_X86_SSE)) + have_vector = 1; + + ec->params.priv.adrian.aec = AEC_init(rate, have_vector); if (!ec->params.priv.adrian.aec) goto fail; |