The handling of 16bit samples in the peak calculations has a bug when
a sample with 0x8000 is passed. As abs() treats 32bit int, it returns
0x8000. And yet the code stores back into 16bit value again.
To fix that overflow, use 32bit value (i.e. val instead of sval) for
the further calculations.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
else
sval = be16toh(*valp);
sval ^= mask;
- sval = abs(sval);
- if (max_peak[c] < sval)
- max_peak[c] = sval;
+ val = abs(sval);
+ if (max_peak[c] < val)
+ max_peak[c] = val;
valp++;
if (vumeter == VUMETER_STEREO)
c = !c;