[FFmpeg-devel] About guess_correct_pts / AVFrame.best_effort_timestamp

Måns Rullgård mans
Wed Feb 16 18:47:15 CET 2011

Martin Storsj? <martin at martin.st> writes:

> On Wed, 16 Feb 2011, M?ns Rullg?rd wrote:
>> Nicolas George <nicolas.george at normalesup.org> writes:
>> > L'octidi 28 pluvi?se, an CCXIX, M?ns Rullg?rd a ?crit?:
>> >> AVI doesn't have timestamps, so the first decoded frame has PTS 0, and
>> >> the following ones increment it by 1/framerate.  Simple.
>> >
>> > Are you saying that Mr X should put a special case in his code for AVI?
>> No, he should put a special case for no PTS on an input frame:
>> pts = frame.pkt_pts != AV_NOPTS_VALUE? frame.pkt_pts : prev_pts + 1/framerate;
>> prev_pts = pts;
>> This code will always work.
> Wouldn't this break for VFR-streams? That is, shouldn't it prefer 
> frame.pkt_dts over the calculated pts, if pkt_dts is present (and 
> reliable, assuming that all guessing code is disabled).

A VFR stream obviously needs timestamps.  I'm not aware of any
VFR-capable container providing only DTS.  In fact, I'm not aware of
_any_ container providing only DTS.  Even if such a container did exist,
DTS is not PTS.  PTS can, of course be derived from DTS, decoder delay,
and frame reordering, but that is not what any code in ffmpeg does, at
least not correctly.

M?ns Rullg?rd
mans at mansr.com

More information about the ffmpeg-devel mailing list