[FFmpeg-devel] [PATCH] H264 parser fix

Michael Niedermayer michaelni
Tue May 25 17:55:10 CEST 2010

On Tue, May 25, 2010 at 07:29:11AM -0700, Howard Chu wrote:
> Michael Niedermayer wrote:
>> On Mon, May 24, 2010 at 11:25:05AM -0700, Howard Chu wrote:
>>> Michael Niedermayer wrote:
>>>> On Wed, May 19, 2010 at 01:15:17AM -0700, Howard Chu wrote:
>>>>> When decoding an H264 stream that uses global headers, you get an 
>>>>> endless
>>>>> stream of "non-existing PPS referenced" messages. This message comes 
>>>>> from
>>>>> h264_parser.c, and it happens because it's using an H264Context hanging
>>>>> off
>>>>> the AVCodecParserContext, which is separate from the H264Context 
>>>>> hanging
>>>>> off the AVCodecContext, and only the AVCodecContext contains the
>>>>> extradata
>>>>> that provides the PPS and SPS.
>>>>> This patch is admittedly a hack, but it stops the error. It just checks
>>>>> in
>>>>> the AVCodecContext if the PPS wasn't found in the AVCodecParserContext.
>>>> ugly ugly ugly
>>>> if iam not mistaken this would be fixed by making the parser work with
>>>> mov/mkv ("avc") style h264
>>> I read thru mov.c and matroskadec.c and couldn't find anything relevant, 
>>> so
>>> I don't understand what your suggestion means.
>> i thought that the problem is that the parser is feeded a format it does 
>> not
>> support. I did not confirm this but i see no reason that this is a 
>> different
>> issue.
> That is not the problem I was reporting. The parser has no trouble with the 
> data format. It is simply missing the PPS and SPS because they were not 
> available in the AVCodecParserContext. The extradata is only available in 
> the AVCodecContext.
>> The format difference should be easiest vissible by looking at code
>> surrounding is_avc in h264.c
>> if this is the issue the parser should be improved to suport the slghtly
>> differnt way to pack things and also to look in extradata.
> Before we can tell the parser to look in the extradata, we have to give the 
> parser a way to access it, ideally when the parser is initialized. Right 
> now there's no reliable way to do that. 

The parse function has the AVCodecContext extradata

> It seems odd to me that the parser 
> entry points all require an AVCodecContext but av_parser_init() only takes 
> a codec_id. If av_parser_init() took an AVCodecContext instead, all of the 
> necessary information would be available.

well, yes, its not given during init but just later, i dont see how this
would be a problem

Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Frequently ignored awnser#1 FFmpeg bugs should be sent to our bugtracker. User
questions about the command line tools should be sent to the ffmpeg-user ML.
And questions about how to use libav* should be sent to the libav-user ML.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20100525/bc18a2f2/attachment.pgp>

More information about the ffmpeg-devel mailing list