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