00001
00019 #include <stdint.h>
00020 #include "libavcodec/vp8dsp.h"
00021
00022 void ff_vp8_luma_dc_wht_neon(DCTELEM block[4][4][16], DCTELEM dc[16]);
00023 void ff_vp8_luma_dc_wht_dc_neon(DCTELEM block[4][4][16], DCTELEM dc[16]);
00024
00025 void ff_vp8_idct_add_neon(uint8_t *dst, DCTELEM block[16], int stride);
00026 void ff_vp8_idct_dc_add_neon(uint8_t *dst, DCTELEM block[16], int stride);
00027 void ff_vp8_idct_dc_add4y_neon(uint8_t *dst, DCTELEM block[4][16], int stride);
00028 void ff_vp8_idct_dc_add4uv_neon(uint8_t *dst, DCTELEM block[4][16], int stride);
00029
00030 void ff_vp8_v_loop_filter16_neon(uint8_t *dst, int stride,
00031 int flim_E, int flim_I, int hev_thresh);
00032 void ff_vp8_h_loop_filter16_neon(uint8_t *dst, int stride,
00033 int flim_E, int flim_I, int hev_thresh);
00034 void ff_vp8_v_loop_filter8uv_neon(uint8_t *dstU, uint8_t *dstV, int stride,
00035 int flim_E, int flim_I, int hev_thresh);
00036 void ff_vp8_h_loop_filter8uv_neon(uint8_t *dstU, uint8_t *dstV, int stride,
00037 int flim_E, int flim_I, int hev_thresh);
00038
00039 void ff_vp8_v_loop_filter16_inner_neon(uint8_t *dst, int stride,
00040 int flim_E, int flim_I, int hev_thresh);
00041 void ff_vp8_h_loop_filter16_inner_neon(uint8_t *dst, int stride,
00042 int flim_E, int flim_I, int hev_thresh);
00043 void ff_vp8_v_loop_filter8uv_inner_neon(uint8_t *dstU, uint8_t *dstV,
00044 int stride, int flim_E, int flim_I,
00045 int hev_thresh);
00046 void ff_vp8_h_loop_filter8uv_inner_neon(uint8_t *dstU, uint8_t *dstV,
00047 int stride, int flim_E, int flim_I,
00048 int hev_thresh);
00049
00050 void ff_vp8_v_loop_filter16_simple_neon(uint8_t *dst, int stride, int flim);
00051 void ff_vp8_h_loop_filter16_simple_neon(uint8_t *dst, int stride, int flim);
00052
00053
00054 #define VP8_MC(n) \
00055 void ff_put_vp8_##n##_neon(uint8_t *dst, int dststride, \
00056 uint8_t *src, int srcstride, \
00057 int h, int x, int y)
00058
00059 #define VP8_EPEL(w) \
00060 VP8_MC(pixels ## w); \
00061 VP8_MC(epel ## w ## _h4); \
00062 VP8_MC(epel ## w ## _h6); \
00063 VP8_MC(epel ## w ## _v4); \
00064 VP8_MC(epel ## w ## _h4v4); \
00065 VP8_MC(epel ## w ## _h6v4); \
00066 VP8_MC(epel ## w ## _v6); \
00067 VP8_MC(epel ## w ## _h4v6); \
00068 VP8_MC(epel ## w ## _h6v6)
00069
00070 VP8_EPEL(16);
00071 VP8_EPEL(8);
00072 VP8_EPEL(4);
00073
00074 VP8_MC(bilin16_h);
00075 VP8_MC(bilin16_v);
00076 VP8_MC(bilin16_hv);
00077 VP8_MC(bilin8_h);
00078 VP8_MC(bilin8_v);
00079 VP8_MC(bilin8_hv);
00080 VP8_MC(bilin4_h);
00081 VP8_MC(bilin4_v);
00082 VP8_MC(bilin4_hv);
00083
00084 av_cold void ff_vp8dsp_init_arm(VP8DSPContext *dsp)
00085 {
00086 if (HAVE_NEON) {
00087 dsp->vp8_luma_dc_wht = ff_vp8_luma_dc_wht_neon;
00088 dsp->vp8_luma_dc_wht_dc = ff_vp8_luma_dc_wht_dc_neon;
00089
00090 dsp->vp8_idct_add = ff_vp8_idct_add_neon;
00091 dsp->vp8_idct_dc_add = ff_vp8_idct_dc_add_neon;
00092 dsp->vp8_idct_dc_add4y = ff_vp8_idct_dc_add4y_neon;
00093 dsp->vp8_idct_dc_add4uv = ff_vp8_idct_dc_add4uv_neon;
00094
00095 dsp->vp8_v_loop_filter16y = ff_vp8_v_loop_filter16_neon;
00096 dsp->vp8_h_loop_filter16y = ff_vp8_h_loop_filter16_neon;
00097 dsp->vp8_v_loop_filter8uv = ff_vp8_v_loop_filter8uv_neon;
00098 dsp->vp8_h_loop_filter8uv = ff_vp8_h_loop_filter8uv_neon;
00099
00100 dsp->vp8_v_loop_filter16y_inner = ff_vp8_v_loop_filter16_inner_neon;
00101 dsp->vp8_h_loop_filter16y_inner = ff_vp8_h_loop_filter16_inner_neon;
00102 dsp->vp8_v_loop_filter8uv_inner = ff_vp8_v_loop_filter8uv_inner_neon;
00103 dsp->vp8_h_loop_filter8uv_inner = ff_vp8_h_loop_filter8uv_inner_neon;
00104
00105 dsp->vp8_v_loop_filter_simple = ff_vp8_v_loop_filter16_simple_neon;
00106 dsp->vp8_h_loop_filter_simple = ff_vp8_h_loop_filter16_simple_neon;
00107
00108 dsp->put_vp8_epel_pixels_tab[0][0][0] = ff_put_vp8_pixels16_neon;
00109 dsp->put_vp8_epel_pixels_tab[0][0][2] = ff_put_vp8_epel16_h6_neon;
00110 dsp->put_vp8_epel_pixels_tab[0][2][0] = ff_put_vp8_epel16_v6_neon;
00111 dsp->put_vp8_epel_pixels_tab[0][2][2] = ff_put_vp8_epel16_h6v6_neon;
00112
00113 dsp->put_vp8_epel_pixels_tab[1][0][0] = ff_put_vp8_pixels8_neon;
00114 dsp->put_vp8_epel_pixels_tab[1][0][1] = ff_put_vp8_epel8_h4_neon;
00115 dsp->put_vp8_epel_pixels_tab[1][0][2] = ff_put_vp8_epel8_h6_neon;
00116 dsp->put_vp8_epel_pixels_tab[1][1][0] = ff_put_vp8_epel8_v4_neon;
00117 dsp->put_vp8_epel_pixels_tab[1][1][1] = ff_put_vp8_epel8_h4v4_neon;
00118 dsp->put_vp8_epel_pixels_tab[1][1][2] = ff_put_vp8_epel8_h6v4_neon;
00119 dsp->put_vp8_epel_pixels_tab[1][2][0] = ff_put_vp8_epel8_v6_neon;
00120 dsp->put_vp8_epel_pixels_tab[1][2][1] = ff_put_vp8_epel8_h4v6_neon;
00121 dsp->put_vp8_epel_pixels_tab[1][2][2] = ff_put_vp8_epel8_h6v6_neon;
00122
00123 dsp->put_vp8_epel_pixels_tab[2][0][0] = ff_put_vp8_pixels4_neon;
00124 dsp->put_vp8_epel_pixels_tab[2][0][1] = ff_put_vp8_epel4_h4_neon;
00125 dsp->put_vp8_epel_pixels_tab[2][0][2] = ff_put_vp8_epel4_h6_neon;
00126 dsp->put_vp8_epel_pixels_tab[2][1][0] = ff_put_vp8_epel4_v4_neon;
00127 dsp->put_vp8_epel_pixels_tab[2][1][1] = ff_put_vp8_epel4_h4v4_neon;
00128 dsp->put_vp8_epel_pixels_tab[2][1][2] = ff_put_vp8_epel4_h6v4_neon;
00129 dsp->put_vp8_epel_pixels_tab[2][2][0] = ff_put_vp8_epel4_v6_neon;
00130 dsp->put_vp8_epel_pixels_tab[2][2][1] = ff_put_vp8_epel4_h4v6_neon;
00131 dsp->put_vp8_epel_pixels_tab[2][2][2] = ff_put_vp8_epel4_h6v6_neon;
00132
00133 dsp->put_vp8_bilinear_pixels_tab[0][0][0] = ff_put_vp8_pixels16_neon;
00134 dsp->put_vp8_bilinear_pixels_tab[0][0][1] = ff_put_vp8_bilin16_h_neon;
00135 dsp->put_vp8_bilinear_pixels_tab[0][0][2] = ff_put_vp8_bilin16_h_neon;
00136 dsp->put_vp8_bilinear_pixels_tab[0][1][0] = ff_put_vp8_bilin16_v_neon;
00137 dsp->put_vp8_bilinear_pixels_tab[0][1][1] = ff_put_vp8_bilin16_hv_neon;
00138 dsp->put_vp8_bilinear_pixels_tab[0][1][2] = ff_put_vp8_bilin16_hv_neon;
00139 dsp->put_vp8_bilinear_pixels_tab[0][2][0] = ff_put_vp8_bilin16_v_neon;
00140 dsp->put_vp8_bilinear_pixels_tab[0][2][1] = ff_put_vp8_bilin16_hv_neon;
00141 dsp->put_vp8_bilinear_pixels_tab[0][2][2] = ff_put_vp8_bilin16_hv_neon;
00142
00143 dsp->put_vp8_bilinear_pixels_tab[1][0][0] = ff_put_vp8_pixels8_neon;
00144 dsp->put_vp8_bilinear_pixels_tab[1][0][1] = ff_put_vp8_bilin8_h_neon;
00145 dsp->put_vp8_bilinear_pixels_tab[1][0][2] = ff_put_vp8_bilin8_h_neon;
00146 dsp->put_vp8_bilinear_pixels_tab[1][1][0] = ff_put_vp8_bilin8_v_neon;
00147 dsp->put_vp8_bilinear_pixels_tab[1][1][1] = ff_put_vp8_bilin8_hv_neon;
00148 dsp->put_vp8_bilinear_pixels_tab[1][1][2] = ff_put_vp8_bilin8_hv_neon;
00149 dsp->put_vp8_bilinear_pixels_tab[1][2][0] = ff_put_vp8_bilin8_v_neon;
00150 dsp->put_vp8_bilinear_pixels_tab[1][2][1] = ff_put_vp8_bilin8_hv_neon;
00151 dsp->put_vp8_bilinear_pixels_tab[1][2][2] = ff_put_vp8_bilin8_hv_neon;
00152
00153 dsp->put_vp8_bilinear_pixels_tab[2][0][0] = ff_put_vp8_pixels4_neon;
00154 dsp->put_vp8_bilinear_pixels_tab[2][0][1] = ff_put_vp8_bilin4_h_neon;
00155 dsp->put_vp8_bilinear_pixels_tab[2][0][2] = ff_put_vp8_bilin4_h_neon;
00156 dsp->put_vp8_bilinear_pixels_tab[2][1][0] = ff_put_vp8_bilin4_v_neon;
00157 dsp->put_vp8_bilinear_pixels_tab[2][1][1] = ff_put_vp8_bilin4_hv_neon;
00158 dsp->put_vp8_bilinear_pixels_tab[2][1][2] = ff_put_vp8_bilin4_hv_neon;
00159 dsp->put_vp8_bilinear_pixels_tab[2][2][0] = ff_put_vp8_bilin4_v_neon;
00160 dsp->put_vp8_bilinear_pixels_tab[2][2][1] = ff_put_vp8_bilin4_hv_neon;
00161 dsp->put_vp8_bilinear_pixels_tab[2][2][2] = ff_put_vp8_bilin4_hv_neon;
00162 }
00163 }