diff options
author | Arun Raghavan <arun.raghavan@collabora.co.uk> | 2010-09-23 17:46:00 +0530 |
---|---|---|
committer | Arun Raghavan <arun.raghavan@collabora.co.uk> | 2010-09-23 17:46:00 +0530 |
commit | 6897217d26066353492b6b906ddbaa58c2dae054 (patch) | |
tree | 87093269fb4320b628d380b9dc7f153367bfd337 /src | |
parent | 83d3c8f22bab997dde81074fd547aef6e56451d5 (diff) |
echo-cancel: Ensure correct handling of endianness
The adrian module was using home-brewed endianness conversion instead of
the appropriate mactos, and speex assumed a little-endian host. This
fixes both of these.
Diffstat (limited to 'src')
-rw-r--r-- | src/modules/echo-cancel/adrian.c | 5 | ||||
-rw-r--r-- | src/modules/echo-cancel/speex.c | 2 |
2 files changed, 4 insertions, 3 deletions
diff --git a/src/modules/echo-cancel/adrian.c b/src/modules/echo-cancel/adrian.c index c8acaa8b..bf1918d3 100644 --- a/src/modules/echo-cancel/adrian.c +++ b/src/modules/echo-cancel/adrian.c @@ -30,6 +30,7 @@ #endif #include <pulsecore/modargs.h> +#include <pulsecore/endianmacros.h> #include "echo-cancel.h" /* should be between 10-20 ms */ @@ -103,8 +104,8 @@ void pa_adrian_ec_run(pa_echo_canceller *ec, const uint8_t *rec, const uint8_t * for (i = 0; i < ec->params.priv.adrian.blocksize; i += 2) { /* We know it's S16LE mono data */ - int r = (((int8_t) rec[i + 1]) << 8) | rec[i]; - int p = (((int8_t) play[i + 1]) << 8) | play[i]; + int r = PA_INT16_FROM_LE(*(int16_t *)(rec + i)); + int p = PA_INT16_FROM_LE(*(int16_t *)(play + i)); int res; res = AEC_doAEC(ec->params.priv.adrian.aec, r, p); diff --git a/src/modules/echo-cancel/speex.c b/src/modules/echo-cancel/speex.c index 4351d238..7851510b 100644 --- a/src/modules/echo-cancel/speex.c +++ b/src/modules/echo-cancel/speex.c @@ -42,7 +42,7 @@ static const char* const valid_modargs[] = { static void pa_speex_ec_fixate_spec(pa_sample_spec *source_ss, pa_channel_map *source_map, pa_sample_spec *sink_ss, pa_channel_map *sink_map) { - source_ss->format = PA_SAMPLE_S16LE; + source_ss->format = PA_SAMPLE_S16NE; *sink_ss = *source_ss; *sink_map = *source_map; |