diff options
author | David Conrad <lessen42@gmail.com> | 2010-03-11 07:17:56 +0000 |
---|---|---|
committer | David Conrad <lessen42@gmail.com> | 2010-03-11 07:17:56 +0000 |
commit | 873d117e4be3268b26397b05ed1fa74396d2ae84 (patch) | |
tree | 93b309352f3b0c8a12cb3a23892a68e14efb0d5b | |
parent | 6abaa27211dab639d07414dc243620af697047cd (diff) | |
download | ffmpeg-873d117e4be3268b26397b05ed1fa74396d2ae84.tar.gz |
oggdec: Determine pts and filepos on a packet basis in read_timestamp
This takes into account whether the granule defines the start or end times
of packets, and sets the correct file offset of the associated page.
Originally committed as revision 22462 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavformat/oggdec.c | 15 | ||||
-rw-r--r-- | tests/ref/seek/lavf.ogg.ref | 39 |
2 files changed, 20 insertions, 34 deletions
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 |