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
release/0.6
David Conrad 15 years ago
parent 6abaa27211
commit 873d117e4b
  1. 15
      libavformat/oggdec.c
  2. 39
      tests/ref/seek/lavf.ogg.ref

@ -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;

@ -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

Loading…
Cancel
Save