[FFmpeg-devel] [PATCH] wmapro decoder

Vitor Sessak vitor1001
Mon Jun 22 23:37:18 CEST 2009


Sascha Sommer wrote:
> Hi,
> 
> On Sonntag, 21. Juni 2009, Vitor Sessak wrote:
>> Sascha Sommer wrote:
>>> Hi Vitor,
>>>
>>> thanks for your comments.
>>>
>>>>> The code still outputs shorts. Float produced clicks all around the
>>>>> place. I'm not sure yet if the problem is in my code or in ffmpeg.
>>>> It looks like it works for me, see attached.
>>> So your code does not produce clicks at second 16-18 for you with the
>>> sample file you mentioned below? It does for me when I'm using ffmpeg to
>>> produce a 16-bit wav file and play that back with MPlayer.
>> That's due to the lack of clipping. The attached patch is bit-exact for
>> wav output for me for the sample
>> http://samples.mplayerhq.hu/A-codecs/WMA9/wmapro/Beethovens%20nionde%20symf
>> oni%20(Scherzo)-2.wma .
>>
>> Note that outputting floats can make the "Output buffer too small" error 
>> twice as bad, since the decoder will need an output buffer twice the size.
> 
> The patch is similar to the one you submitted the first time, isn't it? 

Yes, the only change is an additional call to av_clipf().

> Shouldn't it add clipping for audioconvert.c ?

That is a hard question. For formats that already output data in the 
right range (see below), this clipping is slow and useless.

> The problem here is that float audio ranges from -1.0 to 1.0 and the converter 
> multiplies with 1<<15 so the audio will be from -32768 to 32768. The later 
> value written as int16 becomes -32768. This causes the annoying clicks.
> That means we need to clip the float values in the wmapro decoder and we need 
> to clip the integer values in audioconvert.c

There is no need to clip twice. Clipping the floats from -1. to 
32767./32768 does the trick as I did in my patch (rescaling everything 
by 32767./32768 should also work).

-Vitor



More information about the ffmpeg-devel mailing list