[Ffmpeg-devel] Timestamps on Decoding
Ronald S. Bultje
rbultje
Mon Oct 24 15:15:26 CEST 2005
On Mon, 2005-10-24 at 05:16 -0400, Rich Felker wrote:
> On Sun, Oct 23, 2005 at 09:02:37PM -0400, Ronald S. Bultje wrote:
> > On Sun, 2005-10-23 at 18:45 -0400, Paul Curtis wrote:
> > > But the last question was never answered: when I receive a complete raw
> > > frame, how can I accurately tell what it is I have received? Queueing
> > > the frames (audio or video) and presenting them to the Helix encoder
> > > wouldn't be a problem IF I could determine when the frame SHOULD be
> > > presented. This is the crux of the problem, and even Richard has said
> > > it's a problem.
> >
> > Depends on how you call av_decode_video(). I call it in a loop, like
> > this (quasi-code):
> >
> > for (;;) {
> > if (output = av_decode_video (ctx, input)) {
> > // do something with output
> > }
> > }
> >
> > 1) if it's an I frame, then output == input, roughly. Timestamps, all
>
> Nope. You only have output == input for B frames. I and P frames will
> always be delayed (if has_b_frames is true). (Work out the logic if
> this isn't clear already..)
Only if you don't loop. I loop the decode cycle with the same input
several times, and with no input (like as if it were end-of-stream)
until lavc tells me there's no more delayed frames (or the I frame
itself) left.
Note that "is this an I-frame" is not decided based on keyframe flags in
the container-level or the input data; it is decided based on frame_type
in the AVPicture structure in output. I'm pretty sure that if you do
this correctly and input is an I-frame, the last returned output will be
that I-frame, too.
Cheers,
Ronald
More information about the ffmpeg-devel
mailing list