summaryrefslogtreecommitdiffstats
path: root/libavformat/img2dec.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2013-01-08 22:02:08 +0100
committerMichael Niedermayer <michaelni@gmx.at>2013-01-21 19:53:41 +0100
commit05340be97bc395ca0b544c6d856469894ecbf5eb (patch)
tree3cfd61c222c67e630b015192764c5de0b66f5208 /libavformat/img2dec.c
parent0f2d4eddd813e9dbe0acbcb95a0b58efb83ee60e (diff)
downloadffmpeg-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/img2dec.c')
-rw-r--r--libavformat/img2dec.c11
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;
}
OpenPOWER on IntegriCloud