[FFmpeg-devel] [PATCH] H.264 timestamps in h264_parser - complete set

Michael Niedermayer michaelni
Thu Feb 26 00:56:30 CET 2009

On Wed, Feb 25, 2009 at 09:38:17PM +0100, Ivan Schreter wrote:
> Michael Niedermayer wrote:
>> On Tue, Feb 24, 2009 at 09:38:55PM +0100, Ivan Schreter wrote:
>>> Michael Niedermayer wrote:
>>>> On Tue, Feb 24, 2009 at 08:20:53PM +0100, Ivan Schreter wrote
>>>>> I'd propose adding a flag field_picture_flag to AVPacket (and pass it 
>>>>> from the parser) to notify the user about field pictures, so it can 
>>>>> correctly compute frame rate. What do you think? Or do you have a 
>>>>> better idea?
>>>> i dont know, it doesnt seem to be such a big issue to me to have 2*fps 
>>>> ...
>>> It is for the user. See, I want to convert a H.264 interlaced video to 
>>> some other format. So I'd call ffmpeg -i h264.mts -vcodec mpeg2video 
>>> -acodec mp2 -f vob h264.vob. What will this do? It will create a vob with 
>>> 2*fps and each picture duplicated, which is definitely not what we 
>>> want... True, the user could specify -r 25 to force frame rate to 25fps, 
>>> but it's not logical. So IMHO we need this. Agreed?
>> yes, there is a problem
> The three attached patches introduce field_frame_flag for 
> AVCodecParserContext and AVPacket, use it to correct durations and generate 
> field frame flag in H.264. This fixes the problem and interlaced H.264 
> movies are now detected at correct fps.

i think (but maybe i miss something) that a solution based on
your "ticks_per_frame" and repeat_pict == 0
could be used to detect fields and this would have the advantage of also
providing a simple way to find the "old time_base" that is
time_base*ticks_per_frame if ticks_per_frame is in AVCodecContext.

> @@ -149,6 +149,17 @@
>       * subtitles are correctly displayed after seeking.
>       */
>      int64_t convergence_duration;
> +
> +    /**
> +     * Normally, parsed container frames contain a complete video frame.
> +     * However, for some formats (e.g., H.264), it is possible that a frame
> +     * contains only a field. As fields have just half the duration of normal
> +     * frame, frame rate detection would detect 2*fps instead of fps.
> +     * By setting this field, frame rate detection will detect correct fps.
> +     *
> +     * Default 0, set to 1 by parser, if a frame containing single field detected.
> +     */
> +    int field_frame_flag;
>  } AVPacket;
>  #define PKT_FLAG_KEY   0x0001

possibly irrelevant now, but this could be done simpler, like PKT_FLAG_KEY


Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

I know you won't believe me, but the highest form of Human Excellence is
to question oneself and others. -- Socrates
-------------- 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/20090226/bcd27ae5/attachment.pgp>

More information about the ffmpeg-devel mailing list