[FFmpeg-devel] [PATCH] tools/probetest: support testing a single specified input format

Michael Niedermayer michaelni at gmx.at
Mon Dec 22 00:45:43 CET 2014


This reduces the time the test takes significantly when only one
formats needs to be tested

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
---
 tools/probetest.c |   37 +++++++++++++++++++++++++++++++------
 1 file changed, 31 insertions(+), 6 deletions(-)

diff --git a/tools/probetest.c b/tools/probetest.c
index 78327de..74045eb 100644
--- a/tools/probetest.c
+++ b/tools/probetest.c
@@ -29,6 +29,7 @@
 static int score_array[MAX_FORMATS];
 static int64_t time_array[MAX_FORMATS];
 static int failures = 0;
+static const char *single_format;
 
 #ifndef AV_READ_TIME
 #define AV_READ_TIME(x) 0
@@ -42,7 +43,9 @@ static void probe(AVProbeData *pd, int type, int p, int size)
     while ((fmt = av_iformat_next(fmt))) {
         if (fmt->flags & AVFMT_NOFILE)
             continue;
-        if (fmt->read_probe) {
+        if (fmt->read_probe &&
+            (!single_format || !strcmp(single_format, fmt->name))
+        ) {
             int score;
             int64_t start = AV_READ_TIME();
             score = fmt->read_probe(pd);
@@ -75,6 +78,17 @@ static void print_times(void)
     }
 }
 
+static int read_int(char *arg) {
+    int ret;
+
+    if (!arg || !*arg)
+        return -1;
+    ret = strtol(arg, &arg, 0);
+    if (*arg)
+        return -1;
+    return ret;
+}
+
 int main(int argc, char **argv)
 {
     unsigned int p, i, type, size, retry;
@@ -83,11 +97,22 @@ int main(int argc, char **argv)
     PutBitContext pb;
     int retry_count= 4097;
     int max_size = 65537;
-
-    if(argc >= 2)
-        retry_count = atoi(argv[1]);
-    if(argc >= 3)
-        max_size = atoi(argv[2]);
+    int j;
+
+    for (j = i = 1; i<argc; i++) {
+        if (!strcmp(argv[i], "-f") && i+1<argc && !single_format) {
+            single_format = argv[++i];
+        } else if (read_int(argv[i])>0 && j == 1) {
+            retry_count = read_int(argv[i]);
+            j++;
+        } else if (read_int(argv[i])>0 && j == 2) {
+            max_size = read_int(argv[i]);
+            j++;
+        } else {
+            fprintf(stderr, "probetest [-f <input format>] [<retry_count> [<max_size>]]\n");
+            return 1;
+        }
+    }
 
     if (max_size > 1000000000U/8) {
         fprintf(stderr, "max_size out of bounds\n");
-- 
1.7.9.5



More information about the ffmpeg-devel mailing list