From befe3b05d3d326073ea0a61da795e0c817904525 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Fri, 16 Mar 2007 22:59:45 +0000 Subject: add a delay variable to hold the timestamp buffer size set cur_dts correctly for delay>1 Originally committed as revision 8424 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/utils.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'libavformat') diff --git a/libavformat/utils.c b/libavformat/utils.c index dd3ca3e533..f8548cd58c 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -578,7 +578,7 @@ static int64_t lsb2full(int64_t lsb, int64_t last_ts, int lsb_bits){ static void compute_pkt_fields(AVFormatContext *s, AVStream *st, AVCodecParserContext *pc, AVPacket *pkt) { - int num, den, presentation_delayed; + int num, den, presentation_delayed, delay; /* handle wrapping */ if(st->cur_dts != AV_NOPTS_VALUE){ if(pkt->pts != AV_NOPTS_VALUE) @@ -598,11 +598,12 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st, pkt->flags |= PKT_FLAG_KEY; /* do we have a video B frame ? */ + delay= st->codec->has_b_frames; presentation_delayed = 0; if (st->codec->codec_type == CODEC_TYPE_VIDEO) { /* XXX: need has_b_frame, but cannot get it if the codec is not initialized */ - if (st->codec->has_b_frames && + if (delay && pc && pc->pict_type != FF_B_TYPE) presentation_delayed = 1; /* this may be redundant, but it shouldnt hurt */ @@ -611,8 +612,7 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st, } if(st->cur_dts == AV_NOPTS_VALUE){ - if(presentation_delayed) st->cur_dts = -pkt->duration; - else st->cur_dts = 0; + st->cur_dts = -delay * pkt->duration; } // av_log(NULL, AV_LOG_DEBUG, "IN delayed:%d pts:%"PRId64", dts:%"PRId64" cur_dts:%"PRId64" st:%d pc:%p\n", presentation_delayed, pkt->pts, pkt->dts, st->cur_dts, pkt->stream_index, pc); -- cgit v1.2.3