summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2007-03-16 22:59:45 +0000
committerMichael Niedermayer <michaelni@gmx.at>2007-03-16 22:59:45 +0000
commitbefe3b05d3d326073ea0a61da795e0c817904525 (patch)
treecc7b5694156bcb7db3e1889230d7e57d8994757c /libavformat
parent741887cf3e36e4f7733058505a160a2d5f9eea0e (diff)
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
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/utils.c8
1 files changed, 4 insertions, 4 deletions
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);