On 5/31/2024 3:18 PM, Rémi Denis-Courmont wrote:
---
  tests/checkasm/aacencdsp.c | 37 +++++++++++++++++++++++++++++++++++++
  1 file changed, 37 insertions(+)

diff --git a/tests/checkasm/aacencdsp.c b/tests/checkasm/aacencdsp.c
index 1756c4ecd5..756f92fd8f 100644
--- a/tests/checkasm/aacencdsp.c
+++ b/tests/checkasm/aacencdsp.c
@@ -22,7 +22,9 @@
#include "libavutil/mem_internal.h" +#include "libavcodec/aacenc_utils.h"
  #include "libavcodec/aacencdsp.h"
+#include "libavcodec/aactab.h"
#include "checkasm.h" @@ -35,6 +37,8 @@
          }                                                       \
      } while (0)
+#define randomize_elem(tab) (tab[rnd() % FF_ARRAY_ELEMS(tab)])
+
  static void test_abs_pow34(AACEncDSPContext *s)
  {
  #define BUF_SIZE 1024
@@ -60,6 +64,38 @@ static void test_abs_pow34(AACEncDSPContext *s)
      report("abs_pow34");
  }
+static void test_quant_bands(AACEncDSPContext *s)
+{
+    int maxval = randomize_elem(aac_cb_maxval);
+    float q34 = randomize_elem(ff_aac_pow34sf_tab);
+    float rounding = (rnd() & 1) ? ROUND_TO_ZERO : ROUND_STANDARD;
+    LOCAL_ALIGNED_32(float, in, [BUF_SIZE]);
+    LOCAL_ALIGNED_32(float, scaled, [BUF_SIZE]);
+
+    declare_func(void, int *, const float *, const float *, int, int, int,
+                 const float, const float);
+
+    randomize_float(in, BUF_SIZE);
+    randomize_float(scaled, BUF_SIZE);
+
+    for (int sign = 0; sign <= 1; sign++) {
+        if (check_func(s->quant_bands, "quant_bands_%s",
+                       sign ? "signed" : "unsigned")) {
+            LOCAL_ALIGNED_32(int, out, [BUF_SIZE]);
+            LOCAL_ALIGNED_32(int, out2, [BUF_SIZE]);

Does your RVV implementation expect out to be 32 byte aligned? Because looking at aaccoder.c, quant_bands() is called with AACEncContext.qcoefs as argument for out, which is 16 byte aligned.

Even if your implementation can work with 16 byte alignment, IMO the alignment of qcoefs should be bumped. That way we can add an AVX version too.

+
+            call_ref(out, in, scaled, BUF_SIZE, sign, maxval, q34, rounding);
+            call_new(out2, in, scaled, BUF_SIZE, sign, maxval, q34, rounding);
+
+            if (memcmp(out, out2, BUF_SIZE * sizeof (int)))
+                fail();
+
+            bench_new(out, in, scaled, BUF_SIZE, sign, maxval, q34, rounding);
+        }
+    }
+
+    report("abs_pow34");
+}
void checkasm_check_aacencdsp(void)
  {
@@ -67,4 +103,5 @@ void checkasm_check_aacencdsp(void)
      ff_aacenc_dsp_init(&s);
test_abs_pow34(&s);
+    test_quant_bands(&s);
  }
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to