29 #define declare_fpel(type, sz) \ 30 void ff_vp9_##type##sz##_neon(uint8_t *dst, ptrdiff_t dst_stride, \ 31 const uint8_t *src, ptrdiff_t src_stride, \ 32 int h, int mx, int my) 34 #define declare_copy_avg(sz) \ 35 declare_fpel(copy, sz); \ 36 declare_fpel(avg , sz) 38 #define decl_mc_func(op, filter, dir, sz) \ 39 void ff_vp9_##op##_##filter##sz##_##dir##_neon(uint8_t *dst, ptrdiff_t dst_stride, \ 40 const uint8_t *src, ptrdiff_t src_stride, \ 41 int h, int mx, int my) 43 #define define_8tap_2d_fn(op, filter, sz) \ 44 static void op##_##filter##sz##_hv_neon(uint8_t *dst, ptrdiff_t dst_stride, \ 45 const uint8_t *src, ptrdiff_t src_stride, \ 46 int h, int mx, int my) \ 48 LOCAL_ALIGNED_16(uint8_t, temp, [((1 + (sz < 64)) * sz + 8) * sz]); \ 51 ff_vp9_put_##filter##sz##_h_neon(temp, sz, \ 52 src - 3 * src_stride, src_stride, \ 54 ff_vp9_##op##_##filter##sz##_v_neon(dst, dst_stride, \ 59 #define decl_filter_funcs(op, dir, sz) \ 60 decl_mc_func(op, regular, dir, sz); \ 61 decl_mc_func(op, sharp, dir, sz); \ 62 decl_mc_func(op, smooth, dir, sz) 64 #define decl_mc_funcs(sz) \ 65 decl_filter_funcs(put, h, sz); \ 66 decl_filter_funcs(avg, h, sz); \ 67 decl_filter_funcs(put, v, sz); \ 68 decl_filter_funcs(avg, v, sz); \ 69 decl_filter_funcs(put, hv, sz); \ 70 decl_filter_funcs(avg, hv, sz) 72 #define ff_vp9_copy32_neon ff_vp9_copy32_aarch64 73 #define ff_vp9_copy64_neon ff_vp9_copy64_aarch64 87 #define define_8tap_2d_funcs(sz) \ 88 define_8tap_2d_fn(put, regular, sz) \ 89 define_8tap_2d_fn(put, sharp, sz) \ 90 define_8tap_2d_fn(put, smooth, sz) \ 91 define_8tap_2d_fn(avg, regular, sz) \ 92 define_8tap_2d_fn(avg, sharp, sz) \ 93 define_8tap_2d_fn(avg, smooth, sz) 105 #define init_fpel(idx1, idx2, sz, type, suffix) \ 106 dsp->mc[idx1][FILTER_8TAP_SMOOTH ][idx2][0][0] = \ 107 dsp->mc[idx1][FILTER_8TAP_REGULAR][idx2][0][0] = \ 108 dsp->mc[idx1][FILTER_8TAP_SHARP ][idx2][0][0] = \ 109 dsp->mc[idx1][FILTER_BILINEAR ][idx2][0][0] = ff_vp9_##type##sz##suffix 111 #define init_copy(idx, sz, suffix) \ 112 init_fpel(idx, 0, sz, copy, suffix) 114 #define init_avg(idx, sz, suffix) \ 115 init_fpel(idx, 1, sz, avg, suffix) 117 #define init_copy_avg(idx, sz) \ 118 init_copy(idx, sz, _neon); \ 119 init_avg (idx, sz, _neon) 127 #define init_mc_func(idx1, idx2, op, filter, fname, dir, mx, my, sz, pfx) \ 128 dsp->mc[idx1][filter][idx2][mx][my] = pfx##op##_##fname##sz##_##dir##_neon 130 #define init_mc_funcs(idx, dir, mx, my, sz, pfx) \ 131 init_mc_func(idx, 0, put, FILTER_8TAP_REGULAR, regular, dir, mx, my, sz, pfx); \ 132 init_mc_func(idx, 0, put, FILTER_8TAP_SHARP, sharp, dir, mx, my, sz, pfx); \ 133 init_mc_func(idx, 0, put, FILTER_8TAP_SMOOTH, smooth, dir, mx, my, sz, pfx); \ 134 init_mc_func(idx, 1, avg, FILTER_8TAP_REGULAR, regular, dir, mx, my, sz, pfx); \ 135 init_mc_func(idx, 1, avg, FILTER_8TAP_SHARP, sharp, dir, mx, my, sz, pfx); \ 136 init_mc_func(idx, 1, avg, FILTER_8TAP_SMOOTH, smooth, dir, mx, my, sz, pfx) 138 #define init_mc_funcs_dirs(idx, sz) \ 139 init_mc_funcs(idx, h, 1, 0, sz, ff_vp9_); \ 140 init_mc_funcs(idx, v, 0, 1, sz, ff_vp9_); \ 141 init_mc_funcs(idx, hv, 1, 1, sz,) 157 #define define_itxfm(type_a, type_b, sz) \ 158 void ff_vp9_##type_a##_##type_b##_##sz##x##sz##_add_neon(uint8_t *_dst, \ 160 int16_t *_block, int eob) 162 #define define_itxfm_funcs(sz) \ 163 define_itxfm(idct, idct, sz); \ 164 define_itxfm(iadst, idct, sz); \ 165 define_itxfm(idct, iadst, sz); \ 166 define_itxfm(iadst, iadst, sz) 180 #define init_itxfm(tx, sz) \ 181 dsp->itxfm_add[tx][DCT_DCT] = ff_vp9_idct_idct_##sz##_add_neon; \ 182 dsp->itxfm_add[tx][DCT_ADST] = ff_vp9_iadst_idct_##sz##_add_neon; \ 183 dsp->itxfm_add[tx][ADST_DCT] = ff_vp9_idct_iadst_##sz##_add_neon; \ 184 dsp->itxfm_add[tx][ADST_ADST] = ff_vp9_iadst_iadst_##sz##_add_neon 186 #define init_idct(tx, nm) \ 187 dsp->itxfm_add[tx][DCT_DCT] = \ 188 dsp->itxfm_add[tx][ADST_DCT] = \ 189 dsp->itxfm_add[tx][DCT_ADST] = \ 190 dsp->itxfm_add[tx][ADST_ADST] = ff_vp9_##nm##_add_neon 200 #define define_loop_filter(dir, wd, len) \ 201 void ff_vp9_loop_filter_##dir##_##wd##_##len##_neon(uint8_t *dst, ptrdiff_t stride, int E, int I, int H) 203 #define define_loop_filters(wd, len) \ 204 define_loop_filter(h, wd, len); \ 205 define_loop_filter(v, wd, len) 249 }
else if (bpp == 12) {
255 vp9dsp_mc_init_aarch64(dsp);
static void idct(int16_t block[64])
#define decl_mc_funcs(sz)
av_cold void ff_vp9dsp_init_aarch64(VP9DSPContext *dsp, int bpp)
#define define_8tap_2d_funcs(sz)
static atomic_int cpu_flags
static av_cold void vp9dsp_loopfilter_init_aarch64(VP9DSPContext *dsp)
static av_cold void vp9dsp_itxfm_init_aarch64(VP9DSPContext *dsp)
Macro definitions for various function/variable attributes.
#define define_loop_filters(wd, len)
#define init_copy(idx, sz, suffix)
#define init_copy_avg(idx, sz)
#define define_itxfm_funcs(sz)
common internal API header
#define declare_copy_avg(sz)
void(* loop_filter_16[2])(uint8_t *dst, ptrdiff_t stride, int mb_lim, int lim, int hev_thr)
#define have_armv8(flags)
void(* loop_filter_mix2[2][2][2])(uint8_t *dst, ptrdiff_t stride, int mb_lim, int lim, int hev_thr)
void(* loop_filter_8[3][2])(uint8_t *dst, ptrdiff_t stride, int mb_lim, int lim, int hev_thr)
#define init_itxfm(tx, sz)
#define init_mc_funcs_dirs(idx, sz)
int av_get_cpu_flags(void)
Return the flags which specify extensions supported by the CPU.
void ff_vp9dsp_init_10bpp_aarch64(VP9DSPContext *dsp)
#define init_idct(tx, nm)
void ff_vp9dsp_init_12bpp_aarch64(VP9DSPContext *dsp)
#define init_avg(idx, sz, suffix)
#define define_itxfm(type_a, type_b, sz)