X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fimg2dec.c;h=c3f5bdbd01e667bcc4b9e6de0efffe1b81f58a8b;hb=b454c64e0311d813fef9c22cf34f83c2ce77ab23;hp=f492bba8299cd2538ae4e98f6f7b3220534334a3;hpb=98275283d52622c16a6d59f508de7d40216e8b63;p=ffmpeg diff --git a/libavformat/img2dec.c b/libavformat/img2dec.c index f492bba8299..c3f5bdbd01e 100644 --- a/libavformat/img2dec.c +++ b/libavformat/img2dec.c @@ -393,6 +393,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; pkt->size = 0; for (i = 0; i < 3; i++) { @@ -426,6 +428,16 @@ static int img_read_close(struct AVFormatContext* s1) return 0; } +static int img_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp, int flags) +{ + VideoDemuxData *s1 = s->priv_data; + + if (timestamp < 0 || timestamp > s1->img_last - s1->img_first) + return -1; + s1->img_number = timestamp + s1->img_first; + return 0; +} + #define OFFSET(x) offsetof(VideoDemuxData, x) #define DEC AV_OPT_FLAG_DECODING_PARAM static const AVOption options[] = { @@ -460,6 +472,7 @@ AVInputFormat ff_image2_demuxer = { .read_header = img_read_header, .read_packet = img_read_packet, .read_close = img_read_close, + .read_seek = img_read_seek, .flags = AVFMT_NOFILE, .priv_class = &img2_class, };