[FFmpeg-user] decoder changes avframe's pts/dts during decoding

Jake Eastwood cheloveck2.0 at gmail.com
Fri Jul 1 18:51:19 EEST 2022

 I have a stream that has correct input pts/dts packet order. By 'correct'
I mean all pts >= dts and dts is monotonically increasing. From some point
I start to decode that stream from key_packet. And to validate result
before muxing it again, I check pts/pkt_dts of AVFrame again.

It happens when at some point next packet didn't produce any frames without
errors. And with next packet my next frame's "pts" can't keep up with

while (ret >= 0) {
    AVFrame *frame = av_frame_alloc();
    ret = avcodec_receive_frame(context_, frame);

    if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {


 And my pts became less than pkt_dts. Example:
 source pts/dts: 255600/255600  decoded pts/dts 252000 255600 type: P
 source pts/dts: 259200/259200  decoded pts/dts 255600 259200 type: P
 source pts/dts: 262800/262800  decoded pts/dts 259200 262800 type: P
 source pts/dts: 266400/266400  decoded pts/dts 262800 266400 type: P

 I drop this avframe because mixer won't consume it anyways as I checked.
 So why pts became bigger. What checks I really have to do to ensure
correctness of frames?

More information about the ffmpeg-user mailing list