X-Git-Url: https://code.delx.au/pulseaudio/blobdiff_plain/168be3830ae291dd819abebec813f76151487bb3..66f04c3bdcbdd550d8a7ce0486251bf1d502fb3a:/src/pulsecore/sample-util.c diff --git a/src/pulsecore/sample-util.c b/src/pulsecore/sample-util.c index 74600dec..f2017aa8 100644 --- a/src/pulsecore/sample-util.c +++ b/src/pulsecore/sample-util.c @@ -29,6 +29,7 @@ #include #include #include +#include #include @@ -37,9 +38,9 @@ #include #include #include +#include #include "sample-util.h" -#include "endianmacros.h" #define PA_SILENCE_MAX (PA_PAGE_SIZE*16) @@ -224,22 +225,21 @@ size_t pa_mix( pa_mix_info *m = streams + i; int32_t v, lo, hi, cv = m->linear[channel].i; - if (PA_UNLIKELY(cv <= 0)) - continue; + if (PA_LIKELY(cv > 0)) { - /* Multiplying the 32bit volume factor with the - * 16bit sample might result in an 48bit value. We - * want to do without 64 bit integers and hence do - * the multiplication independantly for the HI and - * LO part of the volume. */ + /* Multiplying the 32bit volume factor with the + * 16bit sample might result in an 48bit value. We + * want to do without 64 bit integers and hence do + * the multiplication independently for the HI and + * LO part of the volume. */ - hi = cv >> 16; - lo = cv & 0xFFFF; - - v = *((int16_t*) m->ptr); - v = ((v * lo) >> 16) + (v * hi); - sum += v; + hi = cv >> 16; + lo = cv & 0xFFFF; + v = *((int16_t*) m->ptr); + v = ((v * lo) >> 16) + (v * hi); + sum += v; + } m->ptr = (uint8_t*) m->ptr + sizeof(int16_t); } @@ -268,16 +268,15 @@ size_t pa_mix( pa_mix_info *m = streams + i; int32_t v, lo, hi, cv = m->linear[channel].i; - if (PA_UNLIKELY(cv <= 0)) - continue; - - hi = cv >> 16; - lo = cv & 0xFFFF; + if (PA_LIKELY(cv > 0)) { - v = PA_INT16_SWAP(*((int16_t*) m->ptr)); - v = ((v * lo) >> 16) + (v * hi); - sum += v; + hi = cv >> 16; + lo = cv & 0xFFFF; + v = PA_INT16_SWAP(*((int16_t*) m->ptr)); + v = ((v * lo) >> 16) + (v * hi); + sum += v; + } m->ptr = (uint8_t*) m->ptr + sizeof(int16_t); } @@ -307,13 +306,12 @@ size_t pa_mix( int32_t cv = m->linear[channel].i; int64_t v; - if (PA_UNLIKELY(cv <= 0)) - continue; - - v = *((int32_t*) m->ptr); - v = (v * cv) >> 16; - sum += v; + if (PA_LIKELY(cv > 0)) { + v = *((int32_t*) m->ptr); + v = (v * cv) >> 16; + sum += v; + } m->ptr = (uint8_t*) m->ptr + sizeof(int32_t); } @@ -343,13 +341,12 @@ size_t pa_mix( int32_t cv = m->linear[channel].i; int64_t v; - if (PA_UNLIKELY(cv <= 0)) - continue; - - v = PA_INT32_SWAP(*((int32_t*) m->ptr)); - v = (v * cv) >> 16; - sum += v; + if (PA_LIKELY(cv > 0)) { + v = PA_INT32_SWAP(*((int32_t*) m->ptr)); + v = (v * cv) >> 16; + sum += v; + } m->ptr = (uint8_t*) m->ptr + sizeof(int32_t); } @@ -379,13 +376,12 @@ size_t pa_mix( int32_t cv = m->linear[channel].i; int64_t v; - if (PA_UNLIKELY(cv <= 0)) - continue; - - v = (int32_t) (PA_READ24NE(m->ptr) << 8); - v = (v * cv) >> 16; - sum += v; + if (PA_LIKELY(cv > 0)) { + v = (int32_t) (PA_READ24NE(m->ptr) << 8); + v = (v * cv) >> 16; + sum += v; + } m->ptr = (uint8_t*) m->ptr + 3; } @@ -415,13 +411,12 @@ size_t pa_mix( int32_t cv = m->linear[channel].i; int64_t v; - if (PA_UNLIKELY(cv <= 0)) - continue; - - v = (int32_t) (PA_READ24RE(m->ptr) << 8); - v = (v * cv) >> 16; - sum += v; + if (PA_LIKELY(cv > 0)) { + v = (int32_t) (PA_READ24RE(m->ptr) << 8); + v = (v * cv) >> 16; + sum += v; + } m->ptr = (uint8_t*) m->ptr + 3; } @@ -451,13 +446,12 @@ size_t pa_mix( int32_t cv = m->linear[channel].i; int64_t v; - if (PA_UNLIKELY(cv <= 0)) - continue; - - v = (int32_t) (*((uint32_t*)m->ptr) << 8); - v = (v * cv) >> 16; - sum += v; + if (PA_LIKELY(cv > 0)) { + v = (int32_t) (*((uint32_t*)m->ptr) << 8); + v = (v * cv) >> 16; + sum += v; + } m->ptr = (uint8_t*) m->ptr + sizeof(int32_t); } @@ -487,13 +481,12 @@ size_t pa_mix( int32_t cv = m->linear[channel].i; int64_t v; - if (PA_UNLIKELY(cv <= 0)) - continue; - - v = (int32_t) (PA_UINT32_SWAP(*((uint32_t*) m->ptr)) << 8); - v = (v * cv) >> 16; - sum += v; + if (PA_LIKELY(cv > 0)) { + v = (int32_t) (PA_UINT32_SWAP(*((uint32_t*) m->ptr)) << 8); + v = (v * cv) >> 16; + sum += v; + } m->ptr = (uint8_t*) m->ptr + 3; } @@ -522,13 +515,12 @@ size_t pa_mix( pa_mix_info *m = streams + i; int32_t v, cv = m->linear[channel].i; - if (PA_UNLIKELY(cv <= 0)) - continue; - - v = (int32_t) *((uint8_t*) m->ptr) - 0x80; - v = (v * cv) >> 16; - sum += v; + if (PA_LIKELY(cv > 0)) { + v = (int32_t) *((uint8_t*) m->ptr) - 0x80; + v = (v * cv) >> 16; + sum += v; + } m->ptr = (uint8_t*) m->ptr + 1; } @@ -557,16 +549,15 @@ size_t pa_mix( pa_mix_info *m = streams + i; int32_t v, hi, lo, cv = m->linear[channel].i; - if (PA_UNLIKELY(cv <= 0)) - continue; - - hi = cv >> 16; - lo = cv & 0xFFFF; + if (PA_LIKELY(cv > 0)) { - v = (int32_t) st_ulaw2linear16(*((uint8_t*) m->ptr)); - v = ((v * lo) >> 16) + (v * hi); - sum += v; + hi = cv >> 16; + lo = cv & 0xFFFF; + v = (int32_t) st_ulaw2linear16(*((uint8_t*) m->ptr)); + v = ((v * lo) >> 16) + (v * hi); + sum += v; + } m->ptr = (uint8_t*) m->ptr + 1; } @@ -595,16 +586,15 @@ size_t pa_mix( pa_mix_info *m = streams + i; int32_t v, hi, lo, cv = m->linear[channel].i; - if (PA_UNLIKELY(cv <= 0)) - continue; + if (PA_LIKELY(cv > 0)) { - hi = cv >> 16; - lo = cv & 0xFFFF; - - v = (int32_t) st_alaw2linear16(*((uint8_t*) m->ptr)); - v = ((v * lo) >> 16) + (v * hi); - sum += v; + hi = cv >> 16; + lo = cv & 0xFFFF; + v = (int32_t) st_alaw2linear16(*((uint8_t*) m->ptr)); + v = ((v * lo) >> 16) + (v * hi); + sum += v; + } m->ptr = (uint8_t*) m->ptr + 1; } @@ -633,13 +623,12 @@ size_t pa_mix( pa_mix_info *m = streams + i; float v, cv = m->linear[channel].f; - if (PA_UNLIKELY(cv <= 0)) - continue; - - v = *((float*) m->ptr); - v *= cv; - sum += v; + if (PA_LIKELY(cv > 0)) { + v = *((float*) m->ptr); + v *= cv; + sum += v; + } m->ptr = (uint8_t*) m->ptr + sizeof(float); } @@ -667,13 +656,12 @@ size_t pa_mix( pa_mix_info *m = streams + i; float v, cv = m->linear[channel].f; - if (PA_UNLIKELY(cv <= 0)) - continue; - - v = PA_FLOAT32_SWAP(*(float*) m->ptr); - v *= cv; - sum += v; + if (PA_LIKELY(cv > 0)) { + v = PA_FLOAT32_SWAP(*(float*) m->ptr); + v *= cv; + sum += v; + } m->ptr = (uint8_t*) m->ptr + sizeof(float); } @@ -733,7 +721,7 @@ void pa_volume_memchunk( pa_assert(c); pa_assert(spec); - pa_assert(c->length % pa_frame_size(spec) == 0); + pa_assert(pa_frame_aligned(c->length, spec)); pa_assert(volume); if (pa_memblock_is_silence(c->memblock)) @@ -747,12 +735,12 @@ void pa_volume_memchunk( return; } - if (spec->format < 0 || spec->format > PA_SAMPLE_MAX) { - pa_log_warn(" Unable to change volume of format %s.", pa_sample_format_to_string(spec->format)); + if (spec->format < 0 || spec->format >= PA_SAMPLE_MAX) { + pa_log_warn("Unable to change volume of format"); return; } - do_volume = pa_get_volume_func (spec->format); + do_volume = pa_get_volume_func(spec->format); pa_assert(do_volume); calc_volume_table[spec->format] ((void *)linear, volume);