dct-test: make speed test optional
authorMans Rullgard <mans@mansr.com>
Sun, 3 Jul 2011 22:19:13 +0000 (23:19 +0100)
committerMans Rullgard <mans@mansr.com>
Mon, 4 Jul 2011 08:54:08 +0000 (09:54 +0100)
Signed-off-by: Mans Rullgard <mans@mansr.com>
libavcodec/dct-test.c

index 3c71993..054d0f3 100644 (file)
@@ -200,7 +200,7 @@ static inline void mmx_emms(void)
 #endif
 }
 
-static void dct_error(const struct algo *dct, int test, int is_idct)
+static void dct_error(const struct algo *dct, int test, int is_idct, int speed)
 {
     int it, i, scale;
     int err_inf, v;
@@ -303,6 +303,9 @@ static void dct_error(const struct algo *dct, int test, int is_idct)
            (double) err2 / NB_ITS / 64.0, (double) sysErrMax / NB_ITS,
            maxout, blockSumErrMax);
 
+    if (!speed)
+        return;
+
     /* speed test */
     for (i = 0; i < 64; i++)
         block1[i] = 0;
@@ -439,7 +442,8 @@ static void idct248_ref(uint8_t *dest, int linesize, int16_t *block)
 
 static void idct248_error(const char *name,
                           void (*idct248_put)(uint8_t *dest, int line_size,
-                                              int16_t *block))
+                                              int16_t *block),
+                          int speed)
 {
     int it, i, it1, ti, ti1, err_max, v;
     AVLFG prng;
@@ -473,6 +477,9 @@ static void idct248_error(const char *name,
     }
     printf("%s %s: err_inf=%d\n", 1 ? "IDCT248" : "DCT248", name, err_max);
 
+    if (!speed)
+        return;
+
     ti = gettime();
     it1 = 0;
     do {
@@ -497,7 +504,8 @@ static void help(void)
            "            1 -> test with random sparse matrixes\n"
            "            2 -> do 3. test from mpeg4 std\n"
            "-i          test IDCT implementations\n"
-           "-4          test IDCT248 implementations\n");
+           "-4          test IDCT248 implementations\n"
+           "-t          speed test\n");
 }
 
 int main(int argc, char **argv)
@@ -505,6 +513,7 @@ int main(int argc, char **argv)
     int test_idct = 0, test_248_dct = 0;
     int c, i;
     int test = 1;
+    int speed = 0;
 
     cpu_flags = av_get_cpu_flags();
 
@@ -519,7 +528,7 @@ int main(int argc, char **argv)
     }
 
     for (;;) {
-        c = getopt(argc, argv, "ih4");
+        c = getopt(argc, argv, "ih4t");
         if (c == -1)
             break;
         switch (c) {
@@ -529,6 +538,9 @@ int main(int argc, char **argv)
         case '4':
             test_248_dct = 1;
             break;
+        case 't':
+            speed = 1;
+            break;
         default:
         case 'h':
             help();
@@ -542,12 +554,12 @@ int main(int argc, char **argv)
     printf("ffmpeg DCT/IDCT test\n");
 
     if (test_248_dct) {
-        idct248_error("SIMPLE-C", ff_simple_idct248_put);
+        idct248_error("SIMPLE-C", ff_simple_idct248_put, speed);
     } else {
         const struct algo *algos = test_idct ? idct_tab : fdct_tab;
         for (i = 0; algos[i].name; i++)
             if (!(~cpu_flags & algos[i].mm_support)) {
-                dct_error(&algos[i], test, test_idct);
+                dct_error(&algos[i], test, test_idct, speed);
             }
     }
     return 0;