diff --git a/libavcodec/arm/Makefile b/libavcodec/arm/Makefile index f537e4f3e2..acfd626291 100644 --- a/libavcodec/arm/Makefile +++ b/libavcodec/arm/Makefile @@ -26,6 +26,10 @@ ARMV6-OBJS-$(CONFIG_VP8_DECODER) += arm/vp8_armv6.o \ OBJS-$(CONFIG_H264DSP) += arm/h264dsp_init_arm.o OBJS-$(CONFIG_H264PRED) += arm/h264pred_init_arm.o +OBJS-$(CONFIG_RV30_DECODER) += arm/rv34dsp_init_arm.o +OBJS-$(CONFIG_RV40_DECODER) += arm/rv34dsp_init_arm.o \ + arm/rv40dsp_init_arm.o \ + OBJS += arm/dsputil_init_arm.o \ arm/dsputil_arm.o \ arm/fft_init_arm.o \ @@ -72,12 +76,8 @@ NEON-OBJS-$(CONFIG_DCA_DECODER) += arm/dcadsp_neon.o \ arm/synth_filter_neon.o \ NEON-OBJS-$(CONFIG_MPEGVIDEO) += arm/mpegvideo_neon.o -NEON-OBJS-$(CONFIG_RV30_DECODER) += arm/rv34dsp_init_neon.o \ - arm/rv34dsp_neon.o \ - -NEON-OBJS-$(CONFIG_RV40_DECODER) += arm/rv34dsp_init_neon.o \ - arm/rv34dsp_neon.o \ - arm/rv40dsp_init_neon.o \ +NEON-OBJS-$(CONFIG_RV30_DECODER) += arm/rv34dsp_neon.o +NEON-OBJS-$(CONFIG_RV40_DECODER) += arm/rv34dsp_neon.o \ arm/rv40dsp_neon.o \ arm/h264cmc_neon.o \ diff --git a/libavcodec/arm/rv34dsp_init_neon.c b/libavcodec/arm/rv34dsp_init_arm.c similarity index 73% rename from libavcodec/arm/rv34dsp_init_neon.c rename to libavcodec/arm/rv34dsp_init_arm.c index b4a2f01f95..07f5598d05 100644 --- a/libavcodec/arm/rv34dsp_init_neon.c +++ b/libavcodec/arm/rv34dsp_init_arm.c @@ -22,6 +22,7 @@ #include "libavcodec/avcodec.h" #include "libavcodec/rv34dsp.h" +#include "libavutil/arm/cpu.h" void ff_rv34_inv_transform_noround_neon(DCTELEM *block); @@ -30,11 +31,15 @@ void ff_rv34_inv_transform_noround_dc_neon(DCTELEM *block); void ff_rv34_idct_add_neon(uint8_t *dst, ptrdiff_t stride, DCTELEM *block); void ff_rv34_idct_dc_add_neon(uint8_t *dst, ptrdiff_t stride, int dc); -void ff_rv34dsp_init_neon(RV34DSPContext *c, DSPContext* dsp) +void ff_rv34dsp_init_arm(RV34DSPContext *c, DSPContext* dsp) { - c->rv34_inv_transform = ff_rv34_inv_transform_noround_neon; - c->rv34_inv_transform_dc = ff_rv34_inv_transform_noround_dc_neon; + int cpu_flags = av_get_cpu_flags(); - c->rv34_idct_add = ff_rv34_idct_add_neon; - c->rv34_idct_dc_add = ff_rv34_idct_dc_add_neon; + if (have_neon(cpu_flags)) { + c->rv34_inv_transform = ff_rv34_inv_transform_noround_neon; + c->rv34_inv_transform_dc = ff_rv34_inv_transform_noround_dc_neon; + + c->rv34_idct_add = ff_rv34_idct_add_neon; + c->rv34_idct_dc_add = ff_rv34_idct_dc_add_neon; + } } diff --git a/libavcodec/arm/rv40dsp_init_neon.c b/libavcodec/arm/rv40dsp_init_arm.c similarity index 96% rename from libavcodec/arm/rv40dsp_init_neon.c rename to libavcodec/arm/rv40dsp_init_arm.c index 2ce50a2073..83f4355a42 100644 --- a/libavcodec/arm/rv40dsp_init_neon.c +++ b/libavcodec/arm/rv40dsp_init_arm.c @@ -22,6 +22,7 @@ #include "libavcodec/avcodec.h" #include "libavcodec/rv34dsp.h" +#include "libavutil/arm/cpu.h" #define DECL_QPEL3(type, w, pos) \ void ff_##type##_rv40_qpel##w##_mc##pos##_neon(uint8_t *dst, uint8_t *src,\ @@ -68,7 +69,7 @@ void ff_rv40_v_weak_loop_filter_neon(uint8_t *src, ptrdiff_t stride, int filter_ int filter_q1, int alpha, int beta, int lim_p0q0, int lim_q1, int lim_p1); -void ff_rv40dsp_init_neon(RV34DSPContext *c, DSPContext* dsp) +static void ff_rv40dsp_init_neon(RV34DSPContext *c) { c->put_pixels_tab[0][ 1] = ff_put_rv40_qpel16_mc10_neon; c->put_pixels_tab[0][ 3] = ff_put_rv40_qpel16_mc30_neon; @@ -136,3 +137,11 @@ void ff_rv40dsp_init_neon(RV34DSPContext *c, DSPContext* dsp) c->rv40_weak_loop_filter[0] = ff_rv40_h_weak_loop_filter_neon; c->rv40_weak_loop_filter[1] = ff_rv40_v_weak_loop_filter_neon; } + +void ff_rv40dsp_init_arm(RV34DSPContext *c, DSPContext* dsp) +{ + int cpu_flags = av_get_cpu_flags(); + + if (have_neon(cpu_flags)) + ff_rv40dsp_init_neon(c); +} diff --git a/libavcodec/rv34dsp.c b/libavcodec/rv34dsp.c index 25e8c3d83d..86a2ffd58e 100644 --- a/libavcodec/rv34dsp.c +++ b/libavcodec/rv34dsp.c @@ -135,8 +135,8 @@ av_cold void ff_rv34dsp_init(RV34DSPContext *c, DSPContext* dsp) { c->rv34_idct_add = rv34_idct_add_c; c->rv34_idct_dc_add = rv34_idct_dc_add_c; - if (HAVE_NEON) - ff_rv34dsp_init_neon(c, dsp); + if (ARCH_ARM) + ff_rv34dsp_init_arm(c, dsp); if (ARCH_X86) ff_rv34dsp_init_x86(c, dsp); } diff --git a/libavcodec/rv34dsp.h b/libavcodec/rv34dsp.h index 58da59f038..f0263b12fe 100644 --- a/libavcodec/rv34dsp.h +++ b/libavcodec/rv34dsp.h @@ -77,10 +77,10 @@ void ff_rv30dsp_init(RV34DSPContext *c, DSPContext* dsp); void ff_rv34dsp_init(RV34DSPContext *c, DSPContext* dsp); void ff_rv40dsp_init(RV34DSPContext *c, DSPContext* dsp); -void ff_rv34dsp_init_neon(RV34DSPContext *c, DSPContext *dsp); +void ff_rv34dsp_init_arm(RV34DSPContext *c, DSPContext *dsp); void ff_rv34dsp_init_x86(RV34DSPContext *c, DSPContext *dsp); void ff_rv40dsp_init_x86(RV34DSPContext *c, DSPContext *dsp); -void ff_rv40dsp_init_neon(RV34DSPContext *c, DSPContext *dsp); +void ff_rv40dsp_init_arm(RV34DSPContext *c, DSPContext *dsp); #endif /* AVCODEC_RV34DSP_H */ diff --git a/libavcodec/rv40dsp.c b/libavcodec/rv40dsp.c index 36188d2b86..c6968d948e 100644 --- a/libavcodec/rv40dsp.c +++ b/libavcodec/rv40dsp.c @@ -605,6 +605,6 @@ av_cold void ff_rv40dsp_init(RV34DSPContext *c, DSPContext* dsp) { if (ARCH_X86) ff_rv40dsp_init_x86(c, dsp); - if (HAVE_NEON) - ff_rv40dsp_init_neon(c, dsp); + if (ARCH_ARM) + ff_rv40dsp_init_arm(c, dsp); }