From 22b37f5d3200cfe4c15eded883663cf0612093c1 Mon Sep 17 00:00:00 2001 From: Fabrice Bellard Date: Sun, 24 Aug 2003 21:20:44 +0000 Subject: suppressed frame number modulus hack - added loop_input hack which I find easier to understand Originally committed as revision 2151 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/img.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'libavformat/img.c') diff --git a/libavformat/img.c b/libavformat/img.c index c431e23e2f..d8b0f3b583 100644 --- a/libavformat/img.c +++ b/libavformat/img.c @@ -20,10 +20,16 @@ #include "avformat.h" #include "os_support.h" +/* XXX: this is a hack */ +int loop_input = 0; + typedef struct { int width; int height; + int img_first; + int img_last; int img_number; + int img_count; int img_size; AVImageFormat *img_fmt; int pix_fmt; @@ -121,7 +127,8 @@ static int img_read_header(AVFormatContext *s1, AVFormatParameters *ap) strcpy(s->path, s1->filename); s->img_number = 0; - + s->img_count = 0; + /* find format */ if (s1->iformat->flags & AVFMT_NOFILE) s->is_pipe = 0; @@ -139,6 +146,8 @@ static int img_read_header(AVFormatContext *s1, AVFormatParameters *ap) if (!s->is_pipe) { if (find_image_range(&first_index, &last_index, s->path) < 0) goto fail; + s->img_first = first_index; + s->img_last = last_index; s->img_number = first_index; /* compute duration */ st->start_time = 0; @@ -198,6 +207,10 @@ static int img_read_packet(AVFormatContext *s1, AVPacket *pkt) ByteIOContext f1, *f; if (!s->is_pipe) { + /* loop over input */ + if (loop_input && s->img_number > s->img_last) { + s->img_number = s->img_first; + } if (get_frame_filename(filename, sizeof(filename), s->path, s->img_number) < 0) return -EIO; @@ -223,7 +236,10 @@ static int img_read_packet(AVFormatContext *s1, AVPacket *pkt) av_free_packet(pkt); return -EIO; /* signal EOF */ } else { - pkt->pts = av_rescale((int64_t)s->img_number * s1->streams[0]->codec.frame_rate_base, s1->pts_den, s1->streams[0]->codec.frame_rate) / s1->pts_num; + /* XXX: computing this pts is not necessary as it is done in + the generic code too */ + pkt->pts = av_rescale((int64_t)s->img_count * s1->streams[0]->codec.frame_rate_base, s1->pts_den, s1->streams[0]->codec.frame_rate) / s1->pts_num; + s->img_count++; s->img_number++; return 0; } -- cgit v1.2.3