diff options
author | Lennart Poettering <lennart@poettering.net> | 2008-10-02 02:29:56 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2008-10-02 02:29:56 +0200 |
commit | ea82dec294310b83be25b4e0c940fd2cd2c7eeb3 (patch) | |
tree | f68e05851c314a8caed9cd0084d43e56f37f6883 /src/pulsecore | |
parent | 08cf9db0d17f8e2cfc68976fd96f0374721cdf22 (diff) |
when we mix into a 16bit accumulator make sure we clamp before we scale with a volume to avoid range faults when multiplying
Diffstat (limited to 'src/pulsecore')
-rw-r--r-- | src/pulsecore/sample-util.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/pulsecore/sample-util.c b/src/pulsecore/sample-util.c index b4234af5..25178a8a 100644 --- a/src/pulsecore/sample-util.c +++ b/src/pulsecore/sample-util.c @@ -214,8 +214,8 @@ size_t pa_mix( m->ptr = (uint8_t*) m->ptr + sizeof(int16_t); } - sum = (sum * linear[channel]) / 0x10000; sum = PA_CLAMP_UNLIKELY(sum, -0x8000, 0x7FFF); + sum = (sum * linear[channel]) / 0x10000; *((int16_t*) data) = (int16_t) sum; data = (uint8_t*) data + sizeof(int16_t); @@ -253,8 +253,8 @@ size_t pa_mix( m->ptr = (uint8_t*) m->ptr + sizeof(int16_t); } - sum = (sum * linear[channel]) / 0x10000; sum = PA_CLAMP_UNLIKELY(sum, -0x8000, 0x7FFF); + sum = (sum * linear[channel]) / 0x10000; *((int16_t*) data) = PA_INT16_SWAP((int16_t) sum); data = (uint8_t*) data + sizeof(int16_t); @@ -411,8 +411,8 @@ size_t pa_mix( m->ptr = (uint8_t*) m->ptr + 1; } - sum = (sum * linear[channel]) / 0x10000; sum = PA_CLAMP_UNLIKELY(sum, -0x8000, 0x7FFF); + sum = (sum * linear[channel]) / 0x10000; *((uint8_t*) data) = (uint8_t) st_14linear2ulaw((int16_t) sum >> 2); data = (uint8_t*) data + 1; @@ -450,8 +450,8 @@ size_t pa_mix( m->ptr = (uint8_t*) m->ptr + 1; } - sum = (sum * linear[channel]) / 0x10000; sum = PA_CLAMP_UNLIKELY(sum, -0x8000, 0x7FFF); + sum = (sum * linear[channel]) / 0x10000; *((uint8_t*) data) = (uint8_t) st_13linear2alaw((int16_t) sum >> 3); data = (uint8_t*) data + 1; |