[FFmpeg-user] Revisit FFmpeg Frame Lost

Thilo Borgmann thilo.borgmann at googlemail.com
Sat Feb 16 09:34:22 CET 2013


Hi,

> Sorry to bug all of you. This is actually a very old topic, but I still
> would like to mention it again.
> [...]
> As mentioned in *av_read_frame()* documentation,
> *For video, the packet contains * exactly one frame*
> [...]
> However,
> for .mpg, I got 267 images after decoding; (lack of 1 frame)
> for .mp4, I got 260 images after decoding (lack of 8 frames)


> It seems http://ffmpeg.org/doxygen/trunk/api-example_8c-source.html is able
> to handle the "frame lost" issue, but it uses* fread()* instead of *
> av_read_frame()*. If I insist on using *av_read_frame()*, how can I avoid
> this "frame lost" issue?

The difference is that the example calls avcodec_decode_video2() in a loop until
the frame is found which is also what I alway do:

    if (packet.stream_index == format_video_stream_idx) {
        avcodec_get_frame_defaults(&frame);
        got_frame = 0;

        while (!got_frame) {
            if ((ret = avcodec_decode_video2(codec_ctx, &frame, &got_frame,
&packet)) < 0) {
                av_free_packet(&packet);
                return false;
            }
        }
    }

Maybe you give it a try.

-Thilo


More information about the ffmpeg-user mailing list