diff options
author | Fabrice Bellard <fabrice@bellard.org> | 2003-08-24 21:20:44 +0000 |
---|---|---|
committer | Fabrice Bellard <fabrice@bellard.org> | 2003-08-24 21:20:44 +0000 |
commit | 22b37f5d3200cfe4c15eded883663cf0612093c1 (patch) | |
tree | ad400223b1e250fc4c2e5ed08d959663b36fd5d9 | |
parent | b1b77fe967d37415935c136afb943cf47636c6c6 (diff) | |
download | ffmpeg-22b37f5d3200cfe4c15eded883663cf0612093c1.tar.gz |
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
-rw-r--r-- | libavformat/img.c | 20 | ||||
-rw-r--r-- | libavformat/utils.c | 7 |
2 files changed, 18 insertions, 9 deletions
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; } diff --git a/libavformat/utils.c b/libavformat/utils.c index 970c51e627..297f5b5c04 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -606,7 +606,6 @@ static void av_estimate_timings_from_pts(AVFormatContext *ic) st->start_time < start_time) start_time = st->start_time; } - fprintf(stderr, "start=%lld\n", start_time); if (start_time != MAXINT64) ic->start_time = start_time; @@ -1504,12 +1503,6 @@ int get_frame_filename(char *buf, int buf_size, nd = nd * 10 + *p++ - '0'; } c = *p++; - if (c == '*' && nd > 0) { - // The nd field is actually the modulus - number = number % nd; - c = *p++; - nd = 0; - } } while (isdigit(c)); switch(c) { |