[FFmpeg-devel] [PATCH] img2dec: support seeking in infinitely looped stream
Paul B Mahol
onemda at gmail.com
Wed Jan 9 11:43:30 CET 2013
On 1/8/13, Michael Niedermayer <michaelni at gmx.at> wrote:
> Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
> ---
> libavformat/img2dec.c | 11 +++++++----
> 1 file 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)
Yes but loop do not need to be infinite, when I tried it with current code
and ffplay I did not found anything strange with seeking. And it is not
anything major to care about.
Yes ffplay loop option overwrites demuxer loop option - the last one is
infinite if enabled - somehow silly.
> 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;
> }
So patch looks to be correct for current design of demuxer.
More information about the ffmpeg-devel
mailing list