[pulseaudio-discuss] [PATCH 04/10] remap: Add stereo to mono special case remapping
Thomas Martitz
kugel at rockbox.org
Mon Apr 1 05:28:35 PDT 2013
Am 01.04.2013 13:13, schrieb Peter Meerwald:
> Hello Tanu,
>
> thanks for reviewing!
>
>>>> + case PA_SAMPLE_S16NE:
>>>> + {
>>>> + int16_t *d = (int16_t *) dst, *s = (int16_t *) src;
>>>> +
>>>> + for (i = n>> 2; i> 0; i--) {
>>>> + d[0] += (s[0] + s[1])/2;
>>>> + d[1] += (s[2] + s[3])/2;
>>>> + d[2] += (s[4] + s[5])/2;
>>>> + d[3] += (s[6] + s[7])/2;
>>> You probably meant '=', not '+='?
>>>
>>> Also, s[0] + s[1] can overflow, so the inputs should be divided
>>> individually before summing.
>> Or the inputs could be cast to uint32_t, which I guess would be better
>> than dividing multiple times.
>
> I think (s[0] + s[1])/2 is correct; at least as long as sizeof(int) >
> sizeof(short); short gets promoted to int -- see 'integer promotion in
> C99'; also my compiler thinks above is correct :)
>
Why should int16+int16 be promoted to int32? Pretty sure this code is
prone to overflow.
Best regards
More information about the pulseaudio-discuss
mailing list