aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFabrice Bellard <fabrice@bellard.org>2003-08-24 21:20:44 +0000
committerFabrice Bellard <fabrice@bellard.org>2003-08-24 21:20:44 +0000
commit22b37f5d3200cfe4c15eded883663cf0612093c1 (patch)
treead400223b1e250fc4c2e5ed08d959663b36fd5d9
parentb1b77fe967d37415935c136afb943cf47636c6c6 (diff)
downloadffmpeg-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.c20
-rw-r--r--libavformat/utils.c7
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) {