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:
parent
805d0232c5
commit
19d5da500f
16
ffmpeg.c
16
ffmpeg.c
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user