Sorry Alex, Seems it's my fault, av_frame_get_best_effort_timestamp was moved from libavcode to libavutil.
I'll run test again. Thanks 2013/10/31 YIRAN LI <[email protected]> > Hi Alex, > > Seems I couldn't find the source code of av_frame_get_best_effort_timestamp, > so I have to ask here, because I found that ffmpeg 1.1.3 return -1 for > every frame of same file. > > So definitely > int64_t position = av_frame_get_best_effort_timestamp(pFrame); > if ((position != AV_NOPTS_VALUE) && (position >=0)) > > is needed to check if best effort timestamp is valid, but I'd like to know > if it's enough. > > As you can see in ffmpeg2.0.1 (with which av_frame_get_best_effort_timestamp > returns correct value) the best effort time stamp returned equals to > frame.pkt_dts, > that's ok. > > But if it's possible, for exmpale, av_frame_get_best_effort_timestamp > returns all 0 for every frame? > > So in summary I'd like to know on what condition can I totally trust time > stamp returned by this function (so I can forget about those packet.dts, > packet.pts, frame.pkt_dts) > > Thanks! > > > 2013/10/30 YIRAN LI <[email protected]> > >> Thanks Alex, >> >> I just had a quick check, called >> av_frame_get_best_effort_timestamp(pFrame); and seems >> pFrame->best_effort_timestamp was filled with desired values (1st frame >> having 0, 2nd having 1 and so on). >> >> I'll read through the link you gave me later on. >> >> Great Thanks! >> >> >> 2013/10/30 Alex Cohn <[email protected]> >> >>> On Wed, Oct 30, 2013 at 5:51 AM, YIRAN LI <[email protected]> wrote: >>> > >>> > Hi friends, >>> > >>> > Here I have a question about AVFrame pts needs your help. >>> > >>> > My application uses av_read_frame to get packets and then calls >>> avcodec_decode_video2 to get video frames. But recently I found one >>> specific video file generates strange pts/dts. >>> > >>> > Below is a part of the log: >>> > >>> > 00:00:17.301 MAIN timestamp_debug: pkt.pts = -9223372036854775808, >>> dts = 0 >>> > 00:00:17.301 MAIN timestamp_debug: frame.pkt_pts = >>> -9223372036854775808, frame.pkt_dts = -9223372036854775808, frame.pts = >>> -9223372036854775808 >>> > 00:00:17.301 1108 FFMPEG: looks like this file was encoded with >>> (divx4/(old)xvid/opendivx) -> forcing low_delay flag >>> > >>> > 00:00:17.301 MAIN timestamp_debug: pkt.pts = -9223372036854775808, >>> dts = 1 >>> > 00:00:17.301 MAIN timestamp_debug: frame.pkt_pts = >>> -9223372036854775808, frame.pkt_dts = -9223372036854775808, frame.pts = >>> -9223372036854775808 >>> > 00:00:17.301 MAIN timestamp_debug: pkt.pts = -9223372036854775808, >>> dts = 2 >>> > 00:00:17.301 MAIN timestamp_debug: frame.pkt_pts = >>> -9223372036854775808, frame.pkt_dts = -9223372036854775808, frame.pts = >>> -9223372036854775808 >>> > 00:00:17.301 MAIN timestamp_debug: pkt.pts = -9223372036854775808, >>> dts = 3 >>> > 00:00:17.301 MAIN timestamp_debug: frame.pkt_pts = >>> -9223372036854775808, frame.pkt_dts = -9223372036854775808, frame.pts = >>> -9223372036854775808 >>> > 00:00:17.301 MAIN timestamp_debug: pkt.pts = -9223372036854775808, >>> dts = 4 >>> > 00:00:17.301 MAIN timestamp_debug: [a full frame : frame.pkt_pts = >>> -9223372036854775808, frame.pkt_dts = 0], frame.pts = 0 >>> > 00:00:18.393 LVid236 timestamp_debug: pkt.pts = >>> -9223372036854775808, dts = 5 >>> > 00:00:18.408 LVid236 timestamp_debug: [a full frame : frame.pkt_pts >>> = -9223372036854775808, frame.pkt_dts = 1], frame.pts = 0 >>> > 00:00:18.439 LVid236 timestamp_debug: pkt.pts = >>> -9223372036854775808, dts = 6 >>> > 00:00:18.439 LVid236 timestamp_debug: [a full frame : frame.pkt_pts >>> = -9223372036854775808, frame.pkt_dts = 2], frame.pts = 0 >>> > 00:00:18.439 LSou259 FFMPEG: first_dts 0 not matching first dts >>> 113424 in the queue >>> > 00:00:18.486 LVid236 timestamp_debug: pkt.pts = >>> -9223372036854775808, dts = 7 >>> > 00:00:18.486 LVid236 timestamp_debug: [a full frame : frame.pkt_pts >>> = -9223372036854775808, frame.pkt_dts = 3], frame.pts = 0 >>> > 00:00:18.517 LVid236 timestamp_debug: pkt.pts = >>> -9223372036854775808, dts = 8 >>> > 00:00:18.517 LVid236 timestamp_debug: [a full frame : frame.pkt_pts >>> = -9223372036854775808, frame.pkt_dts = 4], frame.pts = 0 >>> > 00:00:18.549 LSou259 FFMPEG: first_dts 0 not matching first dts >>> 114675 in the queue >>> > >>> > We can see that, it was until 4th packet is sent to decode function >>> that we got the first full frame. and all frames had pts = 0 >>> > >>> > So here I want to know, frame.pts, frame.pkt_dts, packet,dts. which is >>> best to represent the time stamp of a video frame (I mean pts, but in this >>> case, no pts is valid). >>> > >>> > For example, in this case, for the 1st frame, should I use >>> frame.pkt_dts (that's 0), or pkt.pts (the last packet that generates this >>> frame, in this case 4) as the time position >>> > of the frame? >>> > >>> > The file I used to test is here >>> https://dl.dropboxusercontent.com/u/89678527/av_divx_24_yuv420p_mp3_44100_2_1.avi >>> > >>> > Thanks >>> >>> >>> That's what best_effort_timestamp is for. See >>> http://dranger.com/ffmpeg/tutorial05.html about different values of >>> pts/dts. >>> >>> BR, >>> Alex Cohn >>> _______________________________________________ >>> Libav-user mailing list >>> [email protected] >>> http://ffmpeg.org/mailman/listinfo/libav-user >>> >> >> >
_______________________________________________ Libav-user mailing list [email protected] http://ffmpeg.org/mailman/listinfo/libav-user
