[Libav-user] pkt.dts/pts clarification
Gonzalo Garramuno
ggarra13 at gmail.com
Thu Apr 18 00:37:19 CEST 2013
I am looking for the final word on pkt.pts/dts for movies that are not
streaming and how to hold a valid packet queue.
int got_pict = 0;
while( pkt.size > 0 )
{
int err = avcodec_decode_video2( stream->codec, av_frame, &got_pict,
&pkt );
if ( err < 0 ) {
return kDecodeError;
}
if ( got_pict ) {
ptsframe = av_frame_get_best_effort_timestamp( av_frame );
ptsframe = pts2frame( stream, ptsframe );
store_image( ptsframe ); // store image in queue
std::cerr << "STORE REPEAT " << store << " PTSFRAME " << ptsframe
<< " pkt.pts " << pkt.pts
<< " pkt.dts " << pkt.dts
<< " f->pts " << _av_frame->pts << " f->pkt_pts "
<< _av_frame->pkt_pts << " f->pkt_dts "
<< _av_frame->pkt_dts << std::endl;
}
pkt.size -= err;
pkt.data += err;
}
if ( got_pict ) return kDecodeOK;
return kDecodeMissingFrame;
The above works well with decoding images with a proper pts. However, it
does not work well with the "cached" frames of the video (mainly 2
frames in my case).
I am wondering how should I work around that. The demuxing example is
very barebones and ffplay seems not to care about them.
More information about the Libav-user
mailing list