diff --git a/libavformat/oggdec.c b/libavformat/oggdec.c index f627c1efb3..ca88140cc6 100644 --- a/libavformat/oggdec.c +++ b/libavformat/oggdec.c @@ -581,15 +581,14 @@ ogg_read_timestamp (AVFormatContext * s, int stream_index, int64_t * pos_arg, int64_t pts = AV_NOPTS_VALUE; int i; url_fseek(bc, *pos_arg, SEEK_SET); - while (url_ftell(bc) < pos_limit && !ogg_read_page (s, &i)) { - if (ogg->streams[i].granule != -1 && ogg->streams[i].granule != 0 && - ogg->streams[i].codec && i == stream_index) { - pts = ogg_gptopts(s, i, ogg->streams[i].granule, NULL); - // FIXME: this is the position of the packet after the one with above - // pts. - *pos_arg = url_ftell(bc); - break; + ogg_reset(ogg); + + while (url_ftell(bc) < pos_limit && !ogg_packet(s, &i, NULL, NULL, pos_arg)) { + if (i == stream_index) { + pts = ogg_calc_pts(s, i, NULL); } + if (pts != AV_NOPTS_VALUE) + break; } ogg_reset(ogg); return pts; diff --git a/tests/ref/seek/lavf.ogg.ref b/tests/ref/seek/lavf.ogg.ref index d366a59505..0c49d89b6a 100644 --- a/tests/ref/seek/lavf.ogg.ref +++ b/tests/ref/seek/lavf.ogg.ref @@ -1,52 +1,39 @@ ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 125 size: 1364 ret: 0 st:-1 flags:0 ts:-1.000000 ret: 0 st: 0 flags:1 dts: NOPTS pts: NOPTS pos: 4353 size: 1382 -ret: 0 st:-1 flags:1 ts: 1.894167 -ret:-EIO +ret:-1 st:-1 flags:1 ts: 1.894167 ret: 0 st: 0 flags:0 ts: 0.788345 ret: 0 st: 0 flags:1 dts: NOPTS pts: NOPTS pos: 11410 size: 1365 ret: 0 st: 0 flags:1 ts:-0.317506 ret: 0 st: 0 flags:1 dts: NOPTS pts: NOPTS pos: 1522 size: 1381 -ret: 0 st:-1 flags:0 ts: 2.576668 -ret: 0 st: 0 flags:1 dts: NOPTS pts: NOPTS pos: 12808 size: 1223 -ret: 0 st:-1 flags:1 ts: 1.470835 -ret:-EIO +ret:-1 st:-1 flags:0 ts: 2.576668 +ret:-1 st:-1 flags:1 ts: 1.470835 ret: 0 st: 0 flags:0 ts: 0.365011 ret: 0 st: 0 flags:1 dts: NOPTS pts: NOPTS pos: 7191 size: 1370 ret: 0 st: 0 flags:1 ts:-0.740839 ret: 0 st: 0 flags:1 dts: NOPTS pts: NOPTS pos: 1522 size: 1381 -ret: 0 st:-1 flags:0 ts: 2.153336 -ret: 0 st: 0 flags:1 dts: NOPTS pts: NOPTS pos: 12808 size: 1223 -ret: 0 st:-1 flags:1 ts: 1.047503 -ret:-EIO +ret:-1 st:-1 flags:0 ts: 2.153336 +ret:-1 st:-1 flags:1 ts: 1.047503 ret: 0 st: 0 flags:0 ts:-0.058322 ret: 0 st: 0 flags:1 dts: NOPTS pts: NOPTS pos: 4353 size: 1382 -ret: 0 st: 0 flags:1 ts: 2.835828 -ret:-EIO -ret: 0 st:-1 flags:0 ts: 1.730004 -ret: 0 st: 0 flags:1 dts: NOPTS pts: NOPTS pos: 12808 size: 1223 +ret:-1 st: 0 flags:1 ts: 2.835828 +ret:-1 st:-1 flags:0 ts: 1.730004 ret: 0 st:-1 flags:1 ts: 0.624171 ret: 0 st: 0 flags:1 dts: NOPTS pts: NOPTS pos: 5768 size: 1390 ret: 0 st: 0 flags:0 ts:-0.481655 ret: 0 st: 0 flags:1 dts: NOPTS pts: NOPTS pos: 4353 size: 1382 -ret: 0 st: 0 flags:1 ts: 2.412494 -ret:-EIO -ret: 0 st:-1 flags:0 ts: 1.306672 -ret: 0 st: 0 flags:1 dts: NOPTS pts: NOPTS pos: 12808 size: 1223 +ret:-1 st: 0 flags:1 ts: 2.412494 +ret:-1 st:-1 flags:0 ts: 1.306672 ret: 0 st:-1 flags:1 ts: 0.200839 ret: 0 st: 0 flags:1 dts: NOPTS pts: NOPTS pos: 1522 size: 1381 ret: 0 st: 0 flags:0 ts:-0.904989 ret: 0 st: 0 flags:1 dts: NOPTS pts: NOPTS pos: 4353 size: 1382 -ret: 0 st: 0 flags:1 ts: 1.989184 -ret:-EIO -ret: 0 st:-1 flags:0 ts: 0.883340 -ret: 0 st: 0 flags:1 dts: NOPTS pts: NOPTS pos: 12808 size: 1223 +ret:-1 st: 0 flags:1 ts: 1.989184 +ret:-1 st:-1 flags:0 ts: 0.883340 ret: 0 st:-1 flags:1 ts:-0.222493 ret: 0 st: 0 flags:1 dts: NOPTS pts: NOPTS pos: 1522 size: 1381 -ret: 0 st: 0 flags:0 ts: 2.671678 -ret: 0 st: 0 flags:1 dts: NOPTS pts: NOPTS pos: 12808 size: 1223 -ret: 0 st: 0 flags:1 ts: 1.565850 -ret:-EIO +ret:-1 st: 0 flags:0 ts: 2.671678 +ret:-1 st: 0 flags:1 ts: 1.565850 ret: 0 st:-1 flags:0 ts: 0.460008 ret: 0 st: 0 flags:1 dts: NOPTS pts: NOPTS pos: 8594 size: 1381 ret: 0 st:-1 flags:1 ts:-0.645825