]> git.sesse.net Git - ffmpeg/blobdiff - libavutil/float_dsp.c
Merge commit '567ca142952c5be57e52c149c815dfe5d6ac6d41'
[ffmpeg] / libavutil / float_dsp.c
index 337708e847276a5face35524d611d6a3c8156b57..49e0ae7f0307f4d1b09b61d0524294683a285c4d 100644 (file)
@@ -116,8 +116,12 @@ float avpriv_scalarproduct_float_c(const float *v1, const float *v2, int len)
     return p;
 }
 
-av_cold void avpriv_float_dsp_init(AVFloatDSPContext *fdsp, int bit_exact)
+av_cold AVFloatDSPContext *avpriv_float_dsp_alloc(int bit_exact)
 {
+    AVFloatDSPContext *fdsp = av_mallocz(sizeof(AVFloatDSPContext));
+    if (!fdsp)
+        return NULL;
+
     fdsp->vector_fmul = vector_fmul_c;
     fdsp->vector_fmac_scalar = vector_fmac_scalar_c;
     fdsp->vector_fmul_scalar = vector_fmul_scalar_c;
@@ -138,14 +142,7 @@ av_cold void avpriv_float_dsp_init(AVFloatDSPContext *fdsp, int bit_exact)
         ff_float_dsp_init_x86(fdsp);
     if (ARCH_MIPS)
         ff_float_dsp_init_mips(fdsp);
-}
-
-av_cold AVFloatDSPContext *avpriv_float_dsp_alloc(int bit_exact)
-{
-    AVFloatDSPContext *ret = av_mallocz(sizeof(AVFloatDSPContext));
-    if (ret)
-        avpriv_float_dsp_init(ret, bit_exact);
-    return ret;
+    return fdsp;
 }
 
 
@@ -386,7 +383,7 @@ int main(int argc, char **argv)
 {
     int ret = 0, seeded = 0;
     uint32_t seed;
-    AVFloatDSPContext fdsp, cdsp;
+    AVFloatDSPContext *fdsp, *cdsp;
     AVLFG lfg;
 
     LOCAL_ALIGNED(32, float, src0, [LEN]);
@@ -421,6 +418,15 @@ int main(int argc, char **argv)
 
     av_log(NULL, AV_LOG_INFO, "float_dsp-test: %s %u\n", seeded ? "seed" : "random seed", seed);
 
+    fdsp = avpriv_float_dsp_alloc(1);
+    av_force_cpu_flags(0);
+    cdsp = avpriv_float_dsp_alloc(1);
+
+    if (!fdsp || !cdsp) {
+        ret = 1;
+        goto end;
+    }
+
     av_lfg_init(&lfg, seed);
 
     fill_float_array(&lfg, src0, LEN);
@@ -430,29 +436,28 @@ int main(int argc, char **argv)
     fill_double_array(&lfg, dbl_src0, LEN);
     fill_double_array(&lfg, dbl_src1, LEN);
 
-    avpriv_float_dsp_init(&fdsp, 1);
-    av_force_cpu_flags(0);
-    avpriv_float_dsp_init(&cdsp, 1);
-
-    if (test_vector_fmul(&fdsp, &cdsp, src0, src1))
+    if (test_vector_fmul(fdsp, cdsp, src0, src1))
         ret -= 1 << 0;
-    if (test_vector_fmac_scalar(&fdsp, &cdsp, src2, src0, src1[0]))
+    if (test_vector_fmac_scalar(fdsp, cdsp, src2, src0, src1[0]))
         ret -= 1 << 1;
-    if (test_vector_fmul_scalar(&fdsp, &cdsp, src0, src1[0]))
+    if (test_vector_fmul_scalar(fdsp, cdsp, src0, src1[0]))
         ret -= 1 << 2;
-    if (test_vector_fmul_window(&fdsp, &cdsp, src0, src1, src2))
+    if (test_vector_fmul_window(fdsp, cdsp, src0, src1, src2))
         ret -= 1 << 3;
-    if (test_vector_fmul_add(&fdsp, &cdsp, src0, src1, src2))
+    if (test_vector_fmul_add(fdsp, cdsp, src0, src1, src2))
         ret -= 1 << 4;
-    if (test_vector_fmul_reverse(&fdsp, &cdsp, src0, src1))
+    if (test_vector_fmul_reverse(fdsp, cdsp, src0, src1))
         ret -= 1 << 5;
-    if (test_butterflies_float(&fdsp, &cdsp, src0, src1))
+    if (test_butterflies_float(fdsp, cdsp, src0, src1))
         ret -= 1 << 6;
-    if (test_scalarproduct_float(&fdsp, &cdsp, src0, src1))
+    if (test_scalarproduct_float(fdsp, cdsp, src0, src1))
         ret -= 1 << 7;
-    if (test_vector_dmul_scalar(&fdsp, &cdsp, dbl_src0, dbl_src1[0]))
+    if (test_vector_dmul_scalar(fdsp, cdsp, dbl_src0, dbl_src1[0]))
         ret -= 1 << 8;
 
+end:
+    av_freep(&fdsp);
+    av_freep(&cdsp);
     return ret;
 }