[FFmpeg-cvslog] checkasm: Use the correct AVTXContext in av_tx tests

Henrik Gramner git at videolan.org
Tue Dec 21 01:08:07 EET 2021


ffmpeg | branch: master | Henrik Gramner <henrik at gramner.com> | Mon Dec 20 23:52:44 2021 +0100| [15cfb4eee316a1d6a0764f4460409f0258fd94cb] | committer: Henrik Gramner

checkasm: Use the correct AVTXContext in av_tx tests

Keep a reference to the correct associated context of the reference
function and use that context when calling the reference function.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=15cfb4eee316a1d6a0764f4460409f0258fd94cb
---

 tests/checkasm/av_tx.c | 35 +++++++++++++++++++++++++++--------
 1 file changed, 27 insertions(+), 8 deletions(-)

diff --git a/tests/checkasm/av_tx.c b/tests/checkasm/av_tx.c
index 178fb61972..9d3823e8ed 100644
--- a/tests/checkasm/av_tx.c
+++ b/tests/checkasm/av_tx.c
@@ -22,6 +22,8 @@
 
 #include "checkasm.h"
 
+#include <stdlib.h>
+
 #define EPS 0.00005
 
 #define SCALE_NOOP(x) (x)
@@ -41,6 +43,16 @@ static const int check_lens[] = {
     2, 4, 8, 16, 32, 64, 1024, 16384,
 };
 
+static AVTXContext *tx_refs[6 /*AVTXType*/][FF_ARRAY_ELEMS(check_lens)];
+static int init = 0;
+
+static void free_tx_refs(void)
+{
+    for (int i = 0; i < FF_ARRAY_ELEMS(tx_refs); i++)
+        for (int j = 0; j < FF_ARRAY_ELEMS(*tx_refs); j++)
+            av_tx_uninit(&tx_refs[i][j]);
+}
+
 #define CHECK_TEMPLATE(PREFIX, TYPE, DATA_TYPE, SCALE, LENGTHS, CHECK_EXPRESSION) \
     do {                                                                          \
         int err;                                                                  \
@@ -59,24 +71,26 @@ static const int check_lens[] = {
             }                                                                     \
                                                                                   \
             if (check_func(fn, PREFIX "_%i", len)) {                              \
+                AVTXContext *tx_ref = tx_refs[TYPE][i];                           \
+                if (!tx_ref)                                                      \
+                    tx_ref = tx;                                                  \
                 num_checks++;                                                     \
                 last_check = len;                                                 \
-                call_ref(tx, out_ref, in, sizeof(DATA_TYPE));                     \
-                call_new(tx, out_new, in, sizeof(DATA_TYPE));                     \
+                call_ref(tx_ref, out_ref, in, sizeof(DATA_TYPE));                 \
+                call_new(tx,     out_new, in, sizeof(DATA_TYPE));                 \
                 if (CHECK_EXPRESSION) {                                           \
                     fail();                                                       \
+                    av_tx_uninit(&tx);                                            \
                     break;                                                        \
                 }                                                                 \
                 bench_new(tx, out_new, in, sizeof(DATA_TYPE));                    \
+                av_tx_uninit(&tx_refs[TYPE][i]);                                  \
+                tx_refs[TYPE][i] = tx;                                            \
+            } else {                                                              \
+                av_tx_uninit(&tx);                                                \
             }                                                                     \
-                                                                                  \
-            av_tx_uninit(&tx);                                                    \
-            fn = NULL;                                                            \
         }                                                                         \
                                                                                   \
-        av_tx_uninit(&tx);                                                        \
-        fn = NULL;                                                                \
-                                                                                  \
         if (num_checks == 1)                                                      \
             report(PREFIX "_%i", last_check);                                     \
         else if (num_checks)                                                      \
@@ -105,4 +119,9 @@ void checkasm_check_av_tx(void)
     av_free(in);
     av_free(out_ref);
     av_free(out_new);
+
+    if (!init) {
+        init = 1;
+        atexit(free_tx_refs);
+    }
 }



More information about the ffmpeg-cvslog mailing list