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
This commit is contained in:
Michael Niedermayer 2008-02-15 21:45:12 +00:00
parent 805d0232c5
commit 19d5da500f

View File

@ -1055,14 +1055,6 @@ static int output_packet(AVInputStream *ist, int ist_index,
AVSubtitle subtitle, *subtitle_to_free; AVSubtitle subtitle, *subtitle_to_free;
int got_subtitle; 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) { if (pkt == NULL) {
/* EOF handling */ /* EOF handling */
ptr = NULL; ptr = NULL;
@ -1074,6 +1066,14 @@ static int output_packet(AVInputStream *ist, int ist_index,
ptr = pkt->data; ptr = pkt->data;
while (len > 0) { while (len > 0) {
handle_eof: 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 */ /* decode the packet if needed */
data_buf = NULL; /* fail safe */ data_buf = NULL; /* fail safe */
data_size = 0; data_size = 0;