From 05340be97bc395ca0b544c6d856469894ecbf5eb Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Tue, 8 Jan 2013 22:02:08 +0100 Subject: [PATCH] img2dec: support seeking in infinitely looped stream Signed-off-by: Michael Niedermayer --- libavformat/img2dec.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/libavformat/img2dec.c b/libavformat/img2dec.c index c3f5bdbd01..23cdc4b85b 100644 --- a/libavformat/img2dec.c +++ b/libavformat/img2dec.c @@ -46,6 +46,7 @@ typedef struct { int img_first; int img_last; int img_number; + int64_t pts; int img_count; int is_pipe; int split_planes; /**< use independent file for each Y, U, V plane */ @@ -393,8 +394,8 @@ static int img_read_packet(AVFormatContext *s1, AVPacket *pkt) return AVERROR(ENOMEM); pkt->stream_index = 0; pkt->flags |= AV_PKT_FLAG_KEY; - if (!s->is_pipe && !s->loop) - pkt->pts = s->img_number - s->img_first; + if (!s->is_pipe) + pkt->pts = s->pts; pkt->size = 0; for (i = 0; i < 3; i++) { @@ -413,6 +414,7 @@ static int img_read_packet(AVFormatContext *s1, AVPacket *pkt) } else { s->img_count++; s->img_number++; + s->pts++; return 0; } } @@ -432,9 +434,10 @@ static int img_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp { VideoDemuxData *s1 = s->priv_data; - if (timestamp < 0 || timestamp > s1->img_last - s1->img_first) + if (timestamp < 0 || !s1->loop && timestamp > s1->img_last - s1->img_first) return -1; - s1->img_number = timestamp + s1->img_first; + s1->img_number = timestamp%(s1->img_last - s1->img_first + 1) + s1->img_first; + s1->pts = timestamp; return 0; }