image2: Add "start_number" private option to the demuxer
authorMashiat Sarker Shakkhar <mashiat.sarker@gmail.com>
Sat, 23 Jun 2012 03:57:04 +0000 (09:57 +0600)
committerAnton Khirnov <anton@khirnov.net>
Sun, 24 Jun 2012 05:37:38 +0000 (07:37 +0200)
Currently if a pattern is given we look for up to the fifth file name in
the sequence. This option sets that limit to an arbitrary number.

Signed-off-by: Anton Khirnov <anton@khirnov.net>
libavformat/img2dec.c

index b4b9723..8f30cd5 100644 (file)
@@ -40,6 +40,7 @@ typedef struct {
     char *video_size;       /**< Set by a private option. */
     char *framerate;        /**< Set by a private option. */
     int loop;
+    int start_number;
 } VideoDemuxData;
 
 static const int sizes[][2] = {
@@ -70,13 +71,13 @@ static int infer_size(int *width_ptr, int *height_ptr, int size)
 
 /* return -1 if no image found */
 static int find_image_range(int *pfirst_index, int *plast_index,
-                            const char *path)
+                            const char *path, int max_start)
 {
     char buf[1024];
     int range, last_index, range1, first_index;
 
     /* find the first image */
-    for(first_index = 0; first_index < 5; first_index++) {
+    for (first_index = 0; first_index < max_start; first_index++) {
         if (av_get_frame_filename(buf, sizeof(buf), path, first_index) < 0){
             *pfirst_index =
             *plast_index = 1;
@@ -182,7 +183,8 @@ static int read_header(AVFormatContext *s1)
     }
 
     if (!s->is_pipe) {
-        if (find_image_range(&first_index, &last_index, s->path) < 0)
+        if (find_image_range(&first_index, &last_index, s->path,
+                             FFMAX(s->start_number, 5)) < 0)
             return AVERROR(ENOENT);
         s->img_first = first_index;
         s->img_last = last_index;
@@ -283,6 +285,7 @@ static const AVOption options[] = {
     { "video_size",   "", OFFSET(video_size),   AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, DEC },
     { "framerate",    "", OFFSET(framerate),    AV_OPT_TYPE_STRING, {.str = "25"}, 0, 0, DEC },
     { "loop",         "", OFFSET(loop),         AV_OPT_TYPE_INT,    {.dbl = 0},    0, 1, DEC },
+    { "start_number", "first number in the sequence", OFFSET(start_number), AV_OPT_TYPE_INT, {.dbl = 1}, 1, INT_MAX, DEC },
     { NULL },
 };