Browse Source

img2dec: support seeking in infinitely looped stream

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
tags/n1.2
Michael Niedermayer 12 years ago
parent
commit
05340be97b
1 changed files with 7 additions and 4 deletions
  1. +7
    -4
      libavformat/img2dec.c

+ 7
- 4
libavformat/img2dec.c View File

@@ -46,6 +46,7 @@ typedef struct {
int img_first; int img_first;
int img_last; int img_last;
int img_number; int img_number;
int64_t pts;
int img_count; int img_count;
int is_pipe; int is_pipe;
int split_planes; /**< use independent file for each Y, U, V plane */ 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); return AVERROR(ENOMEM);
pkt->stream_index = 0; pkt->stream_index = 0;
pkt->flags |= AV_PKT_FLAG_KEY; 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; pkt->size = 0;
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
@@ -413,6 +414,7 @@ static int img_read_packet(AVFormatContext *s1, AVPacket *pkt)
} else { } else {
s->img_count++; s->img_count++;
s->img_number++; s->img_number++;
s->pts++;
return 0; return 0;
} }
} }
@@ -432,9 +434,10 @@ static int img_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp
{ {
VideoDemuxData *s1 = s->priv_data; 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; 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; return 0;
} }




Loading…
Cancel
Save