[MPlayer-users] bug in audio resample code - not calling clip()
    mplayer at tonyRobinson.com 
    mplayer at tonyRobinson.com
       
    Thu Jan 19 18:54:57 CET 2006
    
    
  
The audio resampling code has a bad bug whereby clipping isn't performed
properly (probably because an intermediate value is stored in an int16_t
and so overflow isn't detected).
More detail:
I'm using the CVS build via http://rpm.greysector.net which identifies
itself as:
MPlayer dev-Fedora-GS-CVS-051128-12:25-4.0.1 (C) 2000-2005 MPlayer Team
I have a saturated wmv file from which I am extracting the audio like so:
unix$ mplayer -vo null -vc null -ao pcm:file=tmp.wav tmp.wmv
All is well and good until I try to resample on output:
unix$ mplayer -vo null -vc null -ao pcm:file=tmp.wav -af format=s16le,channels=1,resample=16000:0:2 tmp16.wmv
Now the saturated sections sound really crappy, some samples just wrap
around, so if the value was just smaller than -32768 to becomes very
large and if just larger than 32767 it becomes very small.  Here's an
example of the output, the 4th sample in the middle line should have
been thresholded to -32768 but instead it has wrapped to 32682.
unix$: od -i tmp16.wav
0124640  12346  16373  20678  22063  21900  23751  25914  29666
0124660  32348  26396  15695  15901  14977  10416  -6392 -20418
0124700 -20371 -25761 -32003  32682 -32764 -32766  32498 -28444
0124720 -14496  -6723  -2997  -2003   8648  18561  24677  26113
0124740  20633  20948  22690  20785  19837  14354  11278   5237
It's an easy bug to let in, I've done it myself lots of times.  I've had
a look at resample[2].c but can't find the right bit of code so I'm
hoping someone else will know it well enough to squash this bug.
Tony Robinson
    
    
More information about the MPlayer-users
mailing list