[FFmpeg-devel] [PATCH] mpeg4video: ignore broken GOP headers

Anatoly Nenashev anatoly.nenashev
Mon Feb 14 16:40:43 CET 2011


On 14.02.2011 15:18, Michael Niedermayer wrote:
> On Sun, Feb 13, 2011 at 07:22:19PM +0100, Janne Grunau wrote:
>    
>> On Sun, Feb 13, 2011 at 03:57:44PM +0000, Mans Rullgard wrote:
>>      
>>> From: Anatoly Nenashev<anatoly.nenashev at ovsoft.ru>
>>>
>>> Some MPEG4 cameras produce files with empty GOP headers.
>>> This patch makes the decoder ignore such broken headers and proceed
>>> with the following I-frame.  Without this change, the following
>>> start code is missed resulting in the entire I-frame being skipped.
>>>
>>> Signed-off-by: Mans Rullgard<mans at mansr.com>
>>> ---
>>>   libavcodec/mpeg4videodec.c |   21 +++++++++++----------
>>>   1 files changed, 11 insertions(+), 10 deletions(-)
>>>
>>> diff --git a/libavcodec/mpeg4videodec.c b/libavcodec/mpeg4videodec.c
>>> index 673c4e8..617dcb9 100644
>>> --- a/libavcodec/mpeg4videodec.c
>>> +++ b/libavcodec/mpeg4videodec.c
>>> @@ -1494,16 +1494,17 @@ end:
>>>
>>>   static int mpeg4_decode_gop_header(MpegEncContext * s, GetBitContext *gb){
>>>       int hours, minutes, seconds;
>>> -
>>> -    hours= get_bits(gb, 5);
>>> -    minutes= get_bits(gb, 6);
>>> -    skip_bits1(gb);
>>> -    seconds= get_bits(gb, 6);
>>> -
>>> -    s->time_base= seconds + 60*(minutes + 60*hours);
>>> -
>>> -    skip_bits1(gb);
>>> -    skip_bits1(gb);
>>> +    unsigned time_code = show_bits(gb, 18);
>>> +
>>> +    if (time_code&  0x40) {     /* marker_bit */
>>> +        hours   = time_code>>  13;
>>> +        minutes = time_code>>   7&  0x3f;
>>> +        seconds = time_code&  0x3f;
>>> +        s->time_base = seconds + 60*(minutes + 60*hours);
>>> +        skip_bits(gb, 20);      /* time_code, closed_gov, broken_link */
>>> +    } else {
>>> +        av_log(s->avctx, AV_LOG_WARNING, "GOP header missing marker_bit\n");
>>> +    }
>>>
>>>       return 0;
>>>   }
>>>        
>> ok
>>      
> rejected and implemented correctly in ffmpeg at videolan
>
>
>    

Why do you think that your version is better? You just check that 
time_code bits is zero. Why do you think that this is more robust than 
checking marker_bit?
And moreover why you've said nothing before? I don't follow the flame 
about current situation and leadership but I don't believe that you have 
no rights for review.
I very much appreciate your comments about my previous patches but now I 
can't understand what you are trying to do. It looks like you have your 
own repository and push there your versions of other people's patches 
without any type of discussion. It just increases a precipice between 
ffmpeg at ffmpeg and ffmpeg at videolan.

Regards,
Anatoly.



More information about the ffmpeg-devel mailing list