From 19d5da500fa787a369f588d7f7abd9b0af5cca8d Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Fri, 15 Feb 2008 21:45:12 +0000 Subject: [PATCH] Update ist->pts after decoding a codec frame not after decoding a container frame. Originally committed as revision 12062 to svn://svn.ffmpeg.org/ffmpeg/trunk --- ffmpeg.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/ffmpeg.c b/ffmpeg.c index 65cc3f4c3f..6d0924d43c 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -1055,14 +1055,6 @@ static int output_packet(AVInputStream *ist, int ist_index, AVSubtitle subtitle, *subtitle_to_free; int got_subtitle; - if(!pkt){ - ist->pts= ist->next_pts; // needed for last packet if vsync=0 - } else if (pkt->dts != AV_NOPTS_VALUE) { //FIXME seems redundant, as libavformat does this too - ist->next_pts = ist->pts = av_rescale_q(pkt->dts, ist->st->time_base, AV_TIME_BASE_Q); - } else { -// assert(ist->pts == ist->next_pts); - } - if (pkt == NULL) { /* EOF handling */ ptr = NULL; @@ -1074,6 +1066,14 @@ static int output_packet(AVInputStream *ist, int ist_index, ptr = pkt->data; while (len > 0) { handle_eof: + if(!pkt || ptr != pkt->data){ + ist->pts= ist->next_pts; // needed for last packet if vsync=0 and for multi pkt + } else if (pkt->dts != AV_NOPTS_VALUE) { //FIXME seems redundant, as libavformat does this too + ist->next_pts = ist->pts = av_rescale_q(pkt->dts, ist->st->time_base, AV_TIME_BASE_Q); + } else { + // assert(ist->pts == ist->next_pts); + } + /* decode the packet if needed */ data_buf = NULL; /* fail safe */ data_size = 0;