diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-01-08 22:02:08 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-01-21 19:53:41 +0100 |
commit | 05340be97bc395ca0b544c6d856469894ecbf5eb (patch) | |
tree | 3cfd61c222c67e630b015192764c5de0b66f5208 /libavformat | |
parent | 0f2d4eddd813e9dbe0acbcb95a0b58efb83ee60e (diff) | |
download | ffmpeg-streaming-05340be97bc395ca0b544c6d856469894ecbf5eb.zip ffmpeg-streaming-05340be97bc395ca0b544c6d856469894ecbf5eb.tar.gz |
img2dec: support seeking in infinitely looped stream
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/img2dec.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/libavformat/img2dec.c b/libavformat/img2dec.c index c3f5bdb..23cdc4b 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; } |