[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