[FFmpeg-devel] [PATCH 06/16] vmdaudio: correct the silent chunk count in the first block.

Justin Ruggles justin.ruggles
Tue Feb 22 21:33:08 CET 2011


On 02/22/2011 02:28 PM, Reimar D?ffinger wrote:

> On Tue, Feb 22, 2011 at 02:05:25PM -0500, Justin Ruggles wrote:
>> diff --git a/libavcodec/vmdav.c b/libavcodec/vmdav.c
>> index 025d23a..ed3c5f8 100644
>> --- a/libavcodec/vmdav.c
>> +++ b/libavcodec/vmdav.c
>> @@ -517,11 +517,7 @@ static int vmdaudio_decode_frame(AVCodecContext *avctx,
>>          uint32_t flags = AV_RB32(p);
>>          int raw_block_size = s->block_align *
>>                               (av_get_bits_per_sample_fmt(avctx->sample_fmt) / 8);
>> -        int silent_chunks;
>> -        if(flags == 0xFFFFFFFF)
>> -            silent_chunks = 32;
>> -        else
>> -            silent_chunks = av_log2(flags + 1);
>> +        int silent_chunks = av_popcount(flags);
> 
> Hm, what exactly is the difference in meaning between
> 0x1, 0x2, 0x4 for example?

Unknown. The 1 bits are not necessarily consecutive, but I don't know
what the positions correspond to.  The format description on Multimedia
Wiki says that the bit position corresponds to interleaving of silence
and audio, but that is wrong for the samples we have on
samples.mplayerhq.hu (although it is closer to being correct than the
current code).

>>          if(*data_size < (s->block_align*silent_chunks + buf_size - 20) * 2)
> 
> Unrelated, but isn't it possible this might overflow?


Yes, that should be changed.  In practice it does not overflow, but it
could with a damaged file.  There are likely many such checks scattered
throughout the 120 or so audio decoders...

-Justin



More information about the ffmpeg-devel mailing list