[FFmpeg-devel] [PATCH] fix raw FLAC muxer extradata handling

Justin Ruggles justin.ruggles
Fri Feb 13 02:06:25 CET 2009


Michael Niedermayer wrote:
> On Thu, Feb 12, 2009 at 07:26:33PM -0500, Justin Ruggles wrote:
>> Hi,
>>
>> This patch makes it so the raw FLAC muxer supports either full header or
>> STREAMINFO-only extradata.  It fixes support for converting FLAC-in-MKV
>> to raw FLAC using -acodec copy.
>>
>> -Justin
>>
> 
>> Index: libavformat/raw.c
>> ===================================================================
>> --- libavformat/raw.c	(revision 17188)
>> +++ libavformat/raw.c	(working copy)
>> @@ -24,6 +24,7 @@
>>  #include "libavcodec/ac3_parser.h"
>>  #include "libavcodec/bitstream.h"
>>  #include "libavcodec/bytestream.h"
>> +#include "libavcodec/flac.h"
>>  #include "avformat.h"
>>  #include "raw.h"
>>  #include "id3v2.h"
>> @@ -37,8 +38,12 @@
>>      };
>>      uint8_t *streaminfo = s->streams[0]->codec->extradata;
>>      int len = s->streams[0]->codec->extradata_size;
>> -    if(streaminfo != NULL && len > 0) {
>> -        put_buffer(s->pb, header, 8);
>> +    if (streaminfo != NULL && len >= FLAC_STREAMINFO_SIZE) {
>> +        if (len == FLAC_STREAMINFO_SIZE) {
>> +            put_buffer(s->pb, header, 8);
> 
>> +        } else if (AV_RL32(streaminfo) != MKTAG('f','L','a','C') || len < 8+FLAC_STREAMINFO_SIZE) {
>> +            return 0;
> 
> for which case is this?

Case when extradata does not contain only STREAMINFO, nor a valid header.

> also the whole does not look particularely robust, i mean an extra byte at the
> end will make it fail silently, it would be different if there was an error
> message ...

I see your point.  An alternative solution would be to only check for
"fLaC" and not extradata_size to determine the format of the extradata.
 The size checks could be done in each branch to just ensure minimum
sizes. I can also add an error message and error return value for
invalid extradata.  If that sounds better I can submit a new patch shortly.

-Justin




More information about the ffmpeg-devel mailing list