Browse Source

avformat/utils: fix dts from pts code in compute_pkt_fields() during ascending delay

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
tags/n3.1
Michael Niedermayer 9 years ago
parent
commit
de1de49324
2 changed files with 4 additions and 3 deletions
  1. +3
    -2
      libavformat/utils.c
  2. +1
    -1
      tests/ref/fate/mkv

+ 3
- 2
libavformat/utils.c View File

@@ -1200,12 +1200,13 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st,
} }
} }


if (pkt->pts != AV_NOPTS_VALUE && delay <= MAX_REORDER_DELAY && has_decode_delay_been_guessed(st)) {
if (pkt->pts != AV_NOPTS_VALUE && delay <= MAX_REORDER_DELAY) {
st->pts_buffer[0] = pkt->pts; st->pts_buffer[0] = pkt->pts;
for (i = 0; i<delay && st->pts_buffer[i] > st->pts_buffer[i + 1]; i++) for (i = 0; i<delay && st->pts_buffer[i] > st->pts_buffer[i + 1]; i++)
FFSWAP(int64_t, st->pts_buffer[i], st->pts_buffer[i + 1]); FFSWAP(int64_t, st->pts_buffer[i], st->pts_buffer[i + 1]);


pkt->dts = select_from_pts_buffer(st, st->pts_buffer, pkt->dts);
if(has_decode_delay_been_guessed(st))
pkt->dts = select_from_pts_buffer(st, st->pts_buffer, pkt->dts);
} }
// We skipped it above so we try here. // We skipped it above so we try here.
if (!onein_oneout) if (!onein_oneout)


+ 1
- 1
tests/ref/fate/mkv View File

@@ -25,9 +25,9 @@
1, 264, 264, 21, 609, 0xc0dc255c 1, 264, 264, 21, 609, 0xc0dc255c
1, 285, 285, 21, 619, 0x9ac52dd1 1, 285, 285, 21, 619, 0x9ac52dd1
0, 292, 292, 41, 16751, 0xf293ab46, F=0x0 0, 292, 292, 41, 16751, 0xf293ab46, F=0x0
0, 292, 417, 41, 22029, 0x3696462b, F=0x0
1, 306, 306, 21, 574, 0xf6410d4d 1, 306, 306, 21, 574, 0xf6410d4d
1, 327, 327, 22, 565, 0xfd561191 1, 327, 327, 22, 565, 0xfd561191
0, 334, 417, 41, 22029, 0x3696462b, F=0x0
1, 350, 350, 21, 713, 0x48425147 1, 350, 350, 21, 713, 0x48425147
1, 371, 371, 21, 537, 0x09bbf515 1, 371, 371, 21, 537, 0x09bbf515
0, 375, 375, 41, 5044, 0xa0344ae6, F=0x0 0, 375, 375, 41, 5044, 0xa0344ae6, F=0x0


Loading…
Cancel
Save