arm: Add NEON optimizations for 10 and 12 bit vp9 MC
[ffmpeg.git] / libavcodec / arm / vp9dsp_init_arm.c
index 05e50d7..f7b539e 100644 (file)
@@ -23,6 +23,7 @@
 #include "libavutil/attributes.h"
 #include "libavutil/arm/cpu.h"
 #include "libavcodec/vp9dsp.h"
+#include "vp9dsp_init.h"
 
 #define declare_fpel(type, sz)                                          \
 void ff_vp9_##type##sz##_neon(uint8_t *dst, ptrdiff_t dst_stride,       \
@@ -94,13 +95,10 @@ define_8tap_2d_funcs(8)
 define_8tap_2d_funcs(4)
 
 
-static av_cold void vp9dsp_mc_init_arm(VP9DSPContext *dsp, int bpp)
+static av_cold void vp9dsp_mc_init_arm(VP9DSPContext *dsp)
 {
     int cpu_flags = av_get_cpu_flags();
 
-    if (bpp != 8)
-        return;
-
     if (have_neon(cpu_flags)) {
 #define init_fpel(idx1, idx2, sz, type)              \
     dsp->mc[idx1][FILTER_8TAP_SMOOTH ][idx2][0][0] = \
@@ -160,13 +158,10 @@ define_itxfm(idct, idct, 32);
 define_itxfm(iwht, iwht, 4);
 
 
-static av_cold void vp9dsp_itxfm_init_arm(VP9DSPContext *dsp, int bpp)
+static av_cold void vp9dsp_itxfm_init_arm(VP9DSPContext *dsp)
 {
     int cpu_flags = av_get_cpu_flags();
 
-    if (bpp != 8)
-        return;
-
     if (have_neon(cpu_flags)) {
 #define init_itxfm(tx, sz)                                             \
     dsp->itxfm_add[tx][DCT_DCT]   = ff_vp9_idct_idct_##sz##_add_neon;  \
@@ -218,13 +213,10 @@ lf_mix_fns(4, 8)
 lf_mix_fns(8, 4)
 lf_mix_fns(8, 8)
 
-static av_cold void vp9dsp_loopfilter_init_arm(VP9DSPContext *dsp, int bpp)
+static av_cold void vp9dsp_loopfilter_init_arm(VP9DSPContext *dsp)
 {
     int cpu_flags = av_get_cpu_flags();
 
-    if (bpp != 8)
-        return;
-
     if (have_neon(cpu_flags)) {
         dsp->loop_filter_8[0][1] = ff_vp9_loop_filter_v_4_8_neon;
         dsp->loop_filter_8[0][0] = ff_vp9_loop_filter_h_4_8_neon;
@@ -249,7 +241,16 @@ static av_cold void vp9dsp_loopfilter_init_arm(VP9DSPContext *dsp, int bpp)
 
 av_cold void ff_vp9dsp_init_arm(VP9DSPContext *dsp, int bpp)
 {
-    vp9dsp_mc_init_arm(dsp, bpp);
-    vp9dsp_loopfilter_init_arm(dsp, bpp);
-    vp9dsp_itxfm_init_arm(dsp, bpp);
+    if (bpp == 10) {
+        ff_vp9dsp_init_10bpp_arm(dsp);
+        return;
+    } else if (bpp == 12) {
+        ff_vp9dsp_init_12bpp_arm(dsp);
+        return;
+    } else if (bpp != 8)
+        return;
+
+    vp9dsp_mc_init_arm(dsp);
+    vp9dsp_loopfilter_init_arm(dsp);
+    vp9dsp_itxfm_init_arm(dsp);
 }