[FFmpeg-cvslog] checkasm: add hybrid_analysis_ileave and hybrid_synthesis_deint tests to aacpsdsp
James Almer
git at videolan.org
Fri Jul 14 00:32:32 EEST 2017
ffmpeg | branch: master | James Almer <jamrial at gmail.com> | Thu Jul 6 20:47:14 2017 -0300| [6f205a42d76a080d10e768f66ae2cf5c2c8b9f6d] | committer: James Almer
checkasm: add hybrid_analysis_ileave and hybrid_synthesis_deint tests to aacpsdsp
Signed-off-by: James Almer <jamrial at gmail.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6f205a42d76a080d10e768f66ae2cf5c2c8b9f6d
---
tests/checkasm/aacpsdsp.c | 82 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 82 insertions(+)
diff --git a/tests/checkasm/aacpsdsp.c b/tests/checkasm/aacpsdsp.c
index 2b051f65da..ea68b39fa9 100644
--- a/tests/checkasm/aacpsdsp.c
+++ b/tests/checkasm/aacpsdsp.c
@@ -97,6 +97,80 @@ static void test_hybrid_analysis(void)
bench_new(dst1, in, filter, STRIDE, N);
}
+static void test_hybrid_analysis_ileave(void)
+{
+ LOCAL_ALIGNED_16(INTFLOAT, in, [2], [38][64]);
+ LOCAL_ALIGNED_16(INTFLOAT, out0, [91], [32][2]);
+ LOCAL_ALIGNED_16(INTFLOAT, out1, [91], [32][2]);
+
+ declare_func(void, INTFLOAT (*out)[32][2], INTFLOAT L[2][38][64],
+ int i, int len);
+
+ randomize((INTFLOAT *)out0, 91 * 32 * 2);
+ randomize((INTFLOAT *)in, 2 * 38 * 64);
+ memcpy(out1, out0, 91 * 32 * 2 * sizeof(INTFLOAT));
+
+ /* len is hardcoded to 32 as that's the only value used in
+ libavcodec. asm functions are likely to be optimized
+ hardcoding this value in their loops and could fail with
+ anything else.
+ i is hardcoded to the two values currently used by the
+ aac decoder because the arm neon implementation is
+ micro-optimized for them and will fail for almost every
+ other value. */
+ call_ref(out0, in, 3, 32);
+ call_new(out1, in, 3, 32);
+
+ /* the function just moves data around, so memcmp is enough */
+ if (memcmp(out0, out1, 91 * 32 * 2 * sizeof(INTFLOAT)))
+ fail();
+
+ call_ref(out0, in, 5, 32);
+ call_new(out1, in, 5, 32);
+
+ if (memcmp(out0, out1, 91 * 32 * 2 * sizeof(INTFLOAT)))
+ fail();
+
+ bench_new(out1, in, 3, 32);
+}
+
+static void test_hybrid_synthesis_deint(void)
+{
+ LOCAL_ALIGNED_16(INTFLOAT, out0, [2], [38][64]);
+ LOCAL_ALIGNED_16(INTFLOAT, out1, [2], [38][64]);
+ LOCAL_ALIGNED_16(INTFLOAT, in, [91], [32][2]);
+
+ declare_func(void, INTFLOAT out[2][38][64], INTFLOAT (*in)[32][2],
+ int i, int len);
+
+ randomize((INTFLOAT *)in, 91 * 32 * 2);
+ randomize((INTFLOAT *)out0, 2 * 38 * 64);
+ memcpy(out1, out0, 2 * 38 * 64 * sizeof(INTFLOAT));
+
+ /* len is hardcoded to 32 as that's the only value used in
+ libavcodec. asm functions are likely to be optimized
+ hardcoding this value in their loops and could fail with
+ anything else.
+ i is hardcoded to the two values currently used by the
+ aac decoder because the arm neon implementation is
+ micro-optimized for them and will fail for almost every
+ other value. */
+ call_ref(out0, in, 3, 32);
+ call_new(out1, in, 3, 32);
+
+ /* the function just moves data around, so memcmp is enough */
+ if (memcmp(out0, out1, 2 * 38 * 64 * sizeof(INTFLOAT)))
+ fail();
+
+ call_ref(out0, in, 5, 32);
+ call_new(out1, in, 5, 32);
+
+ if (memcmp(out0, out1, 2 * 38 * 64 * sizeof(INTFLOAT)))
+ fail();
+
+ bench_new(out1, in, 3, 32);
+}
+
static void test_stereo_interpolate(PSDSPContext *psdsp)
{
int i;
@@ -156,6 +230,14 @@ void checkasm_check_aacpsdsp(void)
test_hybrid_analysis();
report("hybrid_analysis");
+ if (check_func(psdsp.hybrid_analysis_ileave, "ps_hybrid_analysis_ileave"))
+ test_hybrid_analysis_ileave();
+ report("hybrid_analysis_ileave");
+
+ if (check_func(psdsp.hybrid_synthesis_deint, "ps_hybrid_synthesis_deint"))
+ test_hybrid_synthesis_deint();
+ report("hybrid_synthesis_deint");
+
test_stereo_interpolate(&psdsp);
report("stereo_interpolate");
}
More information about the ffmpeg-cvslog
mailing list