On 11/22/2023 11:30 AM, flow gg wrote:
How did you test it?
I wrote a test, but it was a bit rough, so I want to modify it before
submitting. I've added it to this reply.
From 08a012d86db51275fd2cda8dd7ad47cc1f1481ce Mon Sep 17 00:00:00 2001
From: sunyuechi <sunyue...@iscas.ac.cn>
Date: Wed, 22 Nov 2023 14:57:29 +0800
Subject: [PATCH] lavc/ac3dsp: R-V V float_to_fixed24
---
tests/checkasm/Makefile | 1 +
tests/checkasm/ac3dsp.c | 88 +++++++++++++++++++++++++++++++++++++++
tests/checkasm/checkasm.c | 3 ++
tests/checkasm/checkasm.h | 1 +
4 files changed, 93 insertions(+)
create mode 100644 tests/checkasm/ac3dsp.c
diff --git a/tests/checkasm/Makefile b/tests/checkasm/Makefile
index 8bc241d29b..8c714c2a07 100644
--- a/tests/checkasm/Makefile
+++ b/tests/checkasm/Makefile
@@ -5,6 +5,7 @@ AVCODECOBJS-$(CONFIG_BLOCKDSP) += blockdsp.o
AVCODECOBJS-$(CONFIG_BSWAPDSP) += bswapdsp.o
AVCODECOBJS-$(CONFIG_FMTCONVERT) += fmtconvert.o
AVCODECOBJS-$(CONFIG_G722DSP) += g722dsp.o
+AVCODECOBJS-$(CONFIG_AC3DSP) += ac3dsp.o
AVCODECOBJS-$(CONFIG_H264CHROMA) += h264chroma.o
AVCODECOBJS-$(CONFIG_H264DSP) += h264dsp.o
AVCODECOBJS-$(CONFIG_H264PRED) += h264pred.o
diff --git a/tests/checkasm/ac3dsp.c b/tests/checkasm/ac3dsp.c
new file mode 100644
index 0000000000..ebebe06990
--- /dev/null
+++ b/tests/checkasm/ac3dsp.c
@@ -0,0 +1,88 @@
+#include "checkasm.h"
+#include <stdio.h>
+
+
+#include <string.h>
+
+#include "libavutil/common.h"
+#include "libavutil/intreadwrite.h"
+#include "libavutil/mem.h"
+#include "libavutil/mem_internal.h"
+
+#include "libavcodec/ac3dsp.h"
+
+/**
+ * Convert an array of float in range [-1.0,1.0] to int32_t with range
+ * [-(1<<24),(1<<24)]
+ *
+ * @param dst destination array of int32_t.
+ * constraints: 16-byte aligned
+ * @param src source array of float.
+ * constraints: 16-byte aligned
+ * @param len number of elements to convert.
+ * constraints: multiple of 32 greater than zero
+ */
+// void (*float_to_fixed24)(int32_t *dst, const float *src, unsigned int len);
+
+
+#define randomize_float(buf, len) \
+ do { \
+ int i; \
+ for (i = 0; i < len; i++) { \
+ float f = (float)rnd() / (UINT_MAX >> 5) - 16.0f; \
+ buf[i] = f; \
+ } \
+ } while (0)
+
+#define randomize_int(buf, len, size, bits) \
+ do { \
+ int i; \
+ for (i = 0; i < len; i++) { \
+ uint ## size ## _t r = rnd() & ((1LL << bits) - 1); \
+ AV_WN ## size ## A(buf + i, -(1LL << (bits - 1)) + r); \
+ } \
+ } while (0)
+
+static void check_float_to_fixed24(AC3DSPContext *c) {
+#define BUF_SIZE 800
800, if this is meant to be used as len, is not a multiple of 32.
+ LOCAL_ALIGNED_32(int32_t, v1, [BUF_SIZE]);
+ LOCAL_ALIGNED_32(float, v2, [BUF_SIZE]);
+
+ declare_func(void, int32_t *, const float *, unsigned int);
+
+ randomize_int(v1, BUF_SIZE, 32, 10);
This is not really used at all. The input is floats, and the output is
write only.
+ randomize_float(v2, BUF_SIZE);
+
+ if (check_func(c->float_to_fixed24, "float_to_fixed24")) {
+ LOCAL_ALIGNED_32(int32_t, dst, [BUF_SIZE]);
+ LOCAL_ALIGNED_32(int32_t, dst2, [BUF_SIZE]);
The requirement is 16 byte alignment.
+
+ call_ref(dst, v2, 80);
This should be BUF_SIZE. And 80 is also not a multiple of 32.
+ call_new(dst2, v2, 80);
+
+ if (memcmp(dst, dst2, sizeof(*dst) * 10) != 0){
memcmp(dst, dst2, sizeof(dst))
+ puts(">>>>>>>>>>>>>> fail
--------------------");
No puts(), please. This line is also not needed.
+ for(int i = 0 ; i < 10; i++){
+ printf("dst[%d] = %d,
dst2[%d] = %d\n", i, dst[i], i, dst2[i]);
fprintf(stderr, ...);
+ }
+ puts("");
+
+ fail();
+ } else {
+ puts(">>>>>>>>>>>>>> ok
--------------------");
Same.
+ }
+
+ bench_new(v1, v2, 80);
bench_new(dst2, v2...
+ }
+
+
+ report("float_to_fixed24");
+}
+
+void checkasm_check_ac3dsp(void)
+{
+ AC3DSPContext c;
+ ff_ac3dsp_init(&c);
+
+ check_float_to_fixed24(&c);
+}
diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c
index 708119e7c6..9502e372a1 100644
--- a/tests/checkasm/checkasm.c
+++ b/tests/checkasm/checkasm.c
@@ -105,6 +105,9 @@ static const struct {
#if CONFIG_G722DSP
{ "g722dsp", checkasm_check_g722dsp },
#endif
+ #if CONFIG_AC3DSP
+ { "ac3dsp", checkasm_check_ac3dsp },
+ #endif
#if CONFIG_H264CHROMA
{ "h264chroma", checkasm_check_h264chroma },
#endif
diff --git a/tests/checkasm/checkasm.h b/tests/checkasm/checkasm.h
index cfea868ff1..4c73589606 100644
--- a/tests/checkasm/checkasm.h
+++ b/tests/checkasm/checkasm.h
@@ -96,6 +96,7 @@ void checkasm_check_vp8dsp(void);
void checkasm_check_vp9dsp(void);
void checkasm_check_videodsp(void);
void checkasm_check_vorbisdsp(void);
+void checkasm_check_ac3dsp(void);
struct CheckasmPerf;
--
2.43.0
_______________________________________________
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".