diff --git a/libavcodec/dv.h b/libavcodec/dv.h index 29f97b6089..b473bdc992 100644 --- a/libavcodec/dv.h +++ b/libavcodec/dv.h @@ -60,6 +60,9 @@ enum DVPackType { */ #define DV_MAX_FRAME_SIZE 576000 +// LCM of video framerate numerators +#define DV_TIMESCALE_VIDEO 60000 + /** * maximum number of blocks per macroblock in any DV format */ diff --git a/libavformat/avidec.c b/libavformat/avidec.c index 7a3fad6392..00bd7a98a9 100644 --- a/libavformat/avidec.c +++ b/libavformat/avidec.c @@ -1869,13 +1869,20 @@ static int avi_read_seek(AVFormatContext *s, int stream_index, st = s->streams[stream_index]; sti = ffstream(st); ast = st->priv_data; - index = av_index_search_timestamp(st, - timestamp * FFMAX(ast->sample_size, 1), - flags); + + if (avi->dv_demux) { + // index entries are in the AVI scale/rate timebase, which does + // not match DV demuxer's stream timebase + timestamp = av_rescale_q(timestamp, st->time_base, + (AVRational){ ast->scale, ast->rate }); + } else + timestamp *= FFMAX(ast->sample_size, 1); + + index = av_index_search_timestamp(st, timestamp, flags); if (index < 0) { if (sti->nb_index_entries > 0) av_log(s, AV_LOG_DEBUG, "Failed to find timestamp %"PRId64 " in index %"PRId64 " .. %"PRId64 "\n", - timestamp * FFMAX(ast->sample_size, 1), + timestamp, sti->index_entries[0].timestamp, sti->index_entries[sti->nb_index_entries - 1].timestamp); return AVERROR_INVALIDDATA; @@ -1883,7 +1890,7 @@ static int avi_read_seek(AVFormatContext *s, int stream_index, /* find the position */ pos = sti->index_entries[index].pos; - timestamp = sti->index_entries[index].timestamp / FFMAX(ast->sample_size, 1); + timestamp = sti->index_entries[index].timestamp; av_log(s, AV_LOG_TRACE, "XX %"PRId64" %d %"PRId64"\n", timestamp, index, sti->index_entries[index].timestamp); @@ -1898,11 +1905,14 @@ static int avi_read_seek(AVFormatContext *s, int stream_index, /* Feed the DV video stream version of the timestamp to the */ /* DV demux so it can synthesize correct timestamps. */ - ff_dv_offset_reset(avi->dv_demux, timestamp); + ff_dv_ts_reset(avi->dv_demux, + av_rescale_q(timestamp, (AVRational){ ast->scale, ast->rate }, + st->time_base)); avi->stream_index = -1; return 0; } + timestamp /= FFMAX(ast->sample_size, 1); pos_min = pos; for (i = 0; i < s->nb_streams; i++) { diff --git a/libavformat/dv.c b/libavformat/dv.c index ffed1a7a90..9888c10b48 100644 --- a/libavformat/dv.c +++ b/libavformat/dv.c @@ -69,6 +69,8 @@ struct DVDemuxContext { uint8_t audio_buf[4][8192]; int ach; int frames; + + int64_t next_pts_video; }; static inline uint16_t dv_audio_12to16(uint16_t sample) @@ -314,8 +316,6 @@ static int dv_extract_video_info(DVDemuxContext *c, const uint8_t *frame) par = c->vst->codecpar; - avpriv_set_pts_info(c->vst, 64, c->sys->time_base.num, - c->sys->time_base.den); c->vst->avg_frame_rate = av_inv_q(c->vst->time_base); /* finding out SAR is a little bit messy */ @@ -360,6 +360,8 @@ static int dv_init_demux(AVFormatContext *s, DVDemuxContext *c) c->vst->codecpar->bit_rate = 25000000; c->vst->start_time = 0; + avpriv_set_pts_info(c->vst, 64, 1, DV_TIMESCALE_VIDEO); + /* Audio streams are added later as they are encountered. */ s->ctx_flags |= AVFMTCTX_NOHEADER; @@ -463,7 +465,10 @@ int avpriv_dv_produce_packet(DVDemuxContext *c, AVPacket *pkt, pkt->size = size; pkt->flags |= AV_PKT_FLAG_KEY; pkt->stream_index = c->vst->index; - pkt->pts = c->frames; + pkt->pts = c->next_pts_video; + pkt->duration = av_rescale_q(1, c->sys->time_base, c->vst->time_base); + + c->next_pts_video += pkt->duration; } c->frames++; @@ -472,28 +477,34 @@ int avpriv_dv_produce_packet(DVDemuxContext *c, AVPacket *pkt, } static int64_t dv_frame_offset(AVFormatContext *s, DVDemuxContext *c, - int64_t timestamp, int flags) + int64_t *timestamp) { // FIXME: sys may be wrong if last dv_read_packet() failed (buffer is junk) FFFormatContext *const si = ffformatcontext(s); const int frame_size = c->sys->frame_size; + int64_t frame_count = av_rescale_q(*timestamp, c->vst->time_base, c->sys->time_base); int64_t offset; int64_t size = avio_size(s->pb) - si->data_offset; int64_t max_offset = ((size - 1) / frame_size) * frame_size; - offset = frame_size * timestamp; + offset = frame_size * frame_count; if (size >= 0 && offset > max_offset) offset = max_offset; else if (offset < 0) offset = 0; + *timestamp = av_rescale_q(offset / frame_size, c->sys->time_base, c->vst->time_base); + return offset + si->data_offset; } -void ff_dv_offset_reset(DVDemuxContext *c, int64_t frame_offset) +void ff_dv_ts_reset(DVDemuxContext *c, int64_t ts) { - c->frames = frame_offset; + c->frames = !c->sys ? 0 : + av_rescale_q(ts, c->vst->time_base, c->sys->time_base); + c->next_pts_video = ts; + c->audio_pkt[0].size = c->audio_pkt[1].size = 0; c->audio_pkt[2].size = c->audio_pkt[3].size = 0; } @@ -618,12 +629,19 @@ static int dv_read_seek(AVFormatContext *s, int stream_index, { RawDVContext *r = s->priv_data; DVDemuxContext *c = &r->dv_demux; - int64_t offset = dv_frame_offset(s, c, timestamp, flags); + int64_t offset; + + // seek using the video stream + if (stream_index != c->vst->index) + timestamp = av_rescale_q(timestamp, s->streams[stream_index]->time_base, + c->vst->time_base); + + offset = dv_frame_offset(s, c, ×tamp); if (avio_seek(s->pb, offset, SEEK_SET) < 0) return -1; - ff_dv_offset_reset(c, offset / c->sys->frame_size); + ff_dv_ts_reset(c, timestamp); return 0; } diff --git a/libavformat/dv.h b/libavformat/dv.h index efced6ccf0..d21ea19e02 100644 --- a/libavformat/dv.h +++ b/libavformat/dv.h @@ -34,6 +34,6 @@ typedef struct DVDemuxContext DVDemuxContext; DVDemuxContext* avpriv_dv_init_demux(AVFormatContext* s); int avpriv_dv_get_packet(DVDemuxContext*, AVPacket *); int avpriv_dv_produce_packet(DVDemuxContext*, AVPacket*, uint8_t*, int, int64_t); -void ff_dv_offset_reset(DVDemuxContext *c, int64_t frame_offset); +void ff_dv_ts_reset(DVDemuxContext *c, int64_t ts_video); #endif /* AVFORMAT_DV_H */ diff --git a/tests/ref/seek/lavf-dv b/tests/ref/seek/lavf-dv index f63e4460be..95f19d28f0 100644 --- a/tests/ref/seek/lavf-dv +++ b/tests/ref/seek/lavf-dv @@ -3,9 +3,9 @@ ret: 0 st:-1 flags:0 ts:-1.000000 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:144000 ret: 0 st:-1 flags:1 ts: 1.894167 ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000 -ret: 0 st: 0 flags:0 ts: 0.800000 +ret: 0 st: 0 flags:0 ts: 0.788333 ret: 0 st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:2880000 size:144000 -ret: 0 st: 0 flags:1 ts:-0.320000 +ret: 0 st: 0 flags:1 ts:-0.317500 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:144000 ret: 0 st: 1 flags:0 ts: 2.560000 ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000 @@ -15,9 +15,9 @@ ret: 0 st:-1 flags:0 ts: 0.365002 ret: 0 st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:1296000 size:144000 ret: 0 st:-1 flags:1 ts:-0.740831 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:144000 -ret: 0 st: 0 flags:0 ts: 2.160000 +ret: 0 st: 0 flags:0 ts: 2.153333 ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000 -ret: 0 st: 0 flags:1 ts: 1.040000 +ret: 0 st: 0 flags:1 ts: 1.047500 ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000 ret: 0 st: 1 flags:0 ts:-0.040000 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:144000 @@ -27,9 +27,9 @@ ret: 0 st:-1 flags:0 ts: 1.730004 ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000 ret: 0 st:-1 flags:1 ts: 0.624171 ret: 0 st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos:2304000 size:144000 -ret: 0 st: 0 flags:0 ts:-0.480000 +ret: 0 st: 0 flags:0 ts:-0.481667 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:144000 -ret: 0 st: 0 flags:1 ts: 2.400000 +ret: 0 st: 0 flags:1 ts: 2.412500 ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000 ret: 0 st: 1 flags:0 ts: 1.320000 ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000 @@ -39,9 +39,9 @@ ret: 0 st:-1 flags:0 ts:-0.904994 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:144000 ret: 0 st:-1 flags:1 ts: 1.989173 ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000 -ret: 0 st: 0 flags:0 ts: 0.880000 +ret: 0 st: 0 flags:0 ts: 0.883333 ret: 0 st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:3168000 size:144000 -ret: 0 st: 0 flags:1 ts:-0.240000 +ret: 0 st: 0 flags:1 ts:-0.222500 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:144000 ret: 0 st: 1 flags:0 ts: 2.680000 ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000 diff --git a/tests/ref/seek/vsynth_lena-dv b/tests/ref/seek/vsynth_lena-dv index d318794157..afed1fbe72 100644 --- a/tests/ref/seek/vsynth_lena-dv +++ b/tests/ref/seek/vsynth_lena-dv @@ -3,49 +3,49 @@ ret: 0 st:-1 flags:0 ts:-1.000000 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:144000 ret: 0 st:-1 flags:1 ts: 1.894167 ret: 0 st: 0 flags:1 dts: 1.880000 pts: 1.880000 pos:6768000 size:144000 -ret: 0 st: 0 flags:0 ts: 0.800000 +ret: 0 st: 0 flags:0 ts: 0.788333 ret: 0 st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:2880000 size:144000 -ret: 0 st: 0 flags:1 ts:-0.320000 +ret: 0 st: 0 flags:1 ts:-0.317500 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:144000 ret: 0 st:-1 flags:0 ts: 2.576668 ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000 ret: 0 st:-1 flags:1 ts: 1.470835 ret: 0 st: 0 flags:1 dts: 1.480000 pts: 1.480000 pos:5328000 size:144000 -ret: 0 st: 0 flags:0 ts: 0.360000 +ret: 0 st: 0 flags:0 ts: 0.365000 ret: 0 st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:1296000 size:144000 -ret: 0 st: 0 flags:1 ts:-0.760000 +ret: 0 st: 0 flags:1 ts:-0.740833 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:144000 ret: 0 st:-1 flags:0 ts: 2.153336 ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000 ret: 0 st:-1 flags:1 ts: 1.047503 ret: 0 st: 0 flags:1 dts: 1.040000 pts: 1.040000 pos:3744000 size:144000 -ret: 0 st: 0 flags:0 ts:-0.040000 +ret: 0 st: 0 flags:0 ts:-0.058333 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:144000 -ret: 0 st: 0 flags:1 ts: 2.840000 +ret: 0 st: 0 flags:1 ts: 2.835833 ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000 ret: 0 st:-1 flags:0 ts: 1.730004 ret: 0 st: 0 flags:1 dts: 1.720000 pts: 1.720000 pos:6192000 size:144000 ret: 0 st:-1 flags:1 ts: 0.624171 ret: 0 st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos:2304000 size:144000 -ret: 0 st: 0 flags:0 ts:-0.480000 +ret: 0 st: 0 flags:0 ts:-0.481667 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:144000 -ret: 0 st: 0 flags:1 ts: 2.400000 +ret: 0 st: 0 flags:1 ts: 2.412500 ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000 ret: 0 st:-1 flags:0 ts: 1.306672 ret: 0 st: 0 flags:1 dts: 1.320000 pts: 1.320000 pos:4752000 size:144000 ret: 0 st:-1 flags:1 ts: 0.200839 ret: 0 st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos: 720000 size:144000 -ret: 0 st: 0 flags:0 ts:-0.920000 +ret: 0 st: 0 flags:0 ts:-0.905000 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:144000 -ret: 0 st: 0 flags:1 ts: 2.000000 +ret: 0 st: 0 flags:1 ts: 1.989167 ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000 ret: 0 st:-1 flags:0 ts: 0.883340 ret: 0 st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:3168000 size:144000 ret: 0 st:-1 flags:1 ts:-0.222493 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:144000 -ret: 0 st: 0 flags:0 ts: 2.680000 +ret: 0 st: 0 flags:0 ts: 2.671667 ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000 -ret: 0 st: 0 flags:1 ts: 1.560000 +ret: 0 st: 0 flags:1 ts: 1.565833 ret: 0 st: 0 flags:1 dts: 1.560000 pts: 1.560000 pos:5616000 size:144000 ret: 0 st:-1 flags:0 ts: 0.460008 ret: 0 st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:1728000 size:144000 diff --git a/tests/ref/seek/vsynth_lena-dv-411 b/tests/ref/seek/vsynth_lena-dv-411 index d318794157..afed1fbe72 100644 --- a/tests/ref/seek/vsynth_lena-dv-411 +++ b/tests/ref/seek/vsynth_lena-dv-411 @@ -3,49 +3,49 @@ ret: 0 st:-1 flags:0 ts:-1.000000 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:144000 ret: 0 st:-1 flags:1 ts: 1.894167 ret: 0 st: 0 flags:1 dts: 1.880000 pts: 1.880000 pos:6768000 size:144000 -ret: 0 st: 0 flags:0 ts: 0.800000 +ret: 0 st: 0 flags:0 ts: 0.788333 ret: 0 st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:2880000 size:144000 -ret: 0 st: 0 flags:1 ts:-0.320000 +ret: 0 st: 0 flags:1 ts:-0.317500 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:144000 ret: 0 st:-1 flags:0 ts: 2.576668 ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000 ret: 0 st:-1 flags:1 ts: 1.470835 ret: 0 st: 0 flags:1 dts: 1.480000 pts: 1.480000 pos:5328000 size:144000 -ret: 0 st: 0 flags:0 ts: 0.360000 +ret: 0 st: 0 flags:0 ts: 0.365000 ret: 0 st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:1296000 size:144000 -ret: 0 st: 0 flags:1 ts:-0.760000 +ret: 0 st: 0 flags:1 ts:-0.740833 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:144000 ret: 0 st:-1 flags:0 ts: 2.153336 ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000 ret: 0 st:-1 flags:1 ts: 1.047503 ret: 0 st: 0 flags:1 dts: 1.040000 pts: 1.040000 pos:3744000 size:144000 -ret: 0 st: 0 flags:0 ts:-0.040000 +ret: 0 st: 0 flags:0 ts:-0.058333 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:144000 -ret: 0 st: 0 flags:1 ts: 2.840000 +ret: 0 st: 0 flags:1 ts: 2.835833 ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000 ret: 0 st:-1 flags:0 ts: 1.730004 ret: 0 st: 0 flags:1 dts: 1.720000 pts: 1.720000 pos:6192000 size:144000 ret: 0 st:-1 flags:1 ts: 0.624171 ret: 0 st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos:2304000 size:144000 -ret: 0 st: 0 flags:0 ts:-0.480000 +ret: 0 st: 0 flags:0 ts:-0.481667 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:144000 -ret: 0 st: 0 flags:1 ts: 2.400000 +ret: 0 st: 0 flags:1 ts: 2.412500 ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000 ret: 0 st:-1 flags:0 ts: 1.306672 ret: 0 st: 0 flags:1 dts: 1.320000 pts: 1.320000 pos:4752000 size:144000 ret: 0 st:-1 flags:1 ts: 0.200839 ret: 0 st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos: 720000 size:144000 -ret: 0 st: 0 flags:0 ts:-0.920000 +ret: 0 st: 0 flags:0 ts:-0.905000 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:144000 -ret: 0 st: 0 flags:1 ts: 2.000000 +ret: 0 st: 0 flags:1 ts: 1.989167 ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000 ret: 0 st:-1 flags:0 ts: 0.883340 ret: 0 st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:3168000 size:144000 ret: 0 st:-1 flags:1 ts:-0.222493 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:144000 -ret: 0 st: 0 flags:0 ts: 2.680000 +ret: 0 st: 0 flags:0 ts: 2.671667 ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000 -ret: 0 st: 0 flags:1 ts: 1.560000 +ret: 0 st: 0 flags:1 ts: 1.565833 ret: 0 st: 0 flags:1 dts: 1.560000 pts: 1.560000 pos:5616000 size:144000 ret: 0 st:-1 flags:0 ts: 0.460008 ret: 0 st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:1728000 size:144000 diff --git a/tests/ref/seek/vsynth_lena-dv-50 b/tests/ref/seek/vsynth_lena-dv-50 index fae6d1b225..3b1d69ffa6 100644 --- a/tests/ref/seek/vsynth_lena-dv-50 +++ b/tests/ref/seek/vsynth_lena-dv-50 @@ -3,49 +3,49 @@ ret: 0 st:-1 flags:0 ts:-1.000000 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:288000 ret: 0 st:-1 flags:1 ts: 1.894167 ret: 0 st: 0 flags:1 dts: 1.880000 pts: 1.880000 pos:13536000 size:288000 -ret: 0 st: 0 flags:0 ts: 0.800000 +ret: 0 st: 0 flags:0 ts: 0.788333 ret: 0 st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:5760000 size:288000 -ret: 0 st: 0 flags:1 ts:-0.320000 +ret: 0 st: 0 flags:1 ts:-0.317500 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:288000 ret: 0 st:-1 flags:0 ts: 2.576668 ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000 ret: 0 st:-1 flags:1 ts: 1.470835 ret: 0 st: 0 flags:1 dts: 1.480000 pts: 1.480000 pos:10656000 size:288000 -ret: 0 st: 0 flags:0 ts: 0.360000 +ret: 0 st: 0 flags:0 ts: 0.365000 ret: 0 st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:2592000 size:288000 -ret: 0 st: 0 flags:1 ts:-0.760000 +ret: 0 st: 0 flags:1 ts:-0.740833 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:288000 ret: 0 st:-1 flags:0 ts: 2.153336 ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000 ret: 0 st:-1 flags:1 ts: 1.047503 ret: 0 st: 0 flags:1 dts: 1.040000 pts: 1.040000 pos:7488000 size:288000 -ret: 0 st: 0 flags:0 ts:-0.040000 +ret: 0 st: 0 flags:0 ts:-0.058333 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:288000 -ret: 0 st: 0 flags:1 ts: 2.840000 +ret: 0 st: 0 flags:1 ts: 2.835833 ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000 ret: 0 st:-1 flags:0 ts: 1.730004 ret: 0 st: 0 flags:1 dts: 1.720000 pts: 1.720000 pos:12384000 size:288000 ret: 0 st:-1 flags:1 ts: 0.624171 ret: 0 st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos:4608000 size:288000 -ret: 0 st: 0 flags:0 ts:-0.480000 +ret: 0 st: 0 flags:0 ts:-0.481667 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:288000 -ret: 0 st: 0 flags:1 ts: 2.400000 +ret: 0 st: 0 flags:1 ts: 2.412500 ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000 ret: 0 st:-1 flags:0 ts: 1.306672 ret: 0 st: 0 flags:1 dts: 1.320000 pts: 1.320000 pos:9504000 size:288000 ret: 0 st:-1 flags:1 ts: 0.200839 ret: 0 st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos:1440000 size:288000 -ret: 0 st: 0 flags:0 ts:-0.920000 +ret: 0 st: 0 flags:0 ts:-0.905000 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:288000 -ret: 0 st: 0 flags:1 ts: 2.000000 +ret: 0 st: 0 flags:1 ts: 1.989167 ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000 ret: 0 st:-1 flags:0 ts: 0.883340 ret: 0 st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:6336000 size:288000 ret: 0 st:-1 flags:1 ts:-0.222493 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:288000 -ret: 0 st: 0 flags:0 ts: 2.680000 +ret: 0 st: 0 flags:0 ts: 2.671667 ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000 -ret: 0 st: 0 flags:1 ts: 1.560000 +ret: 0 st: 0 flags:1 ts: 1.565833 ret: 0 st: 0 flags:1 dts: 1.560000 pts: 1.560000 pos:11232000 size:288000 ret: 0 st:-1 flags:0 ts: 0.460008 ret: 0 st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:3456000 size:288000