Go to the documentation of this file.
   30 #define declare_fpel(type, sz)                                          \ 
   31 void ff_vp9_##type##sz##_neon(uint8_t *dst, ptrdiff_t dst_stride,       \ 
   32                               const uint8_t *src, ptrdiff_t src_stride, \ 
   33                               int h, int mx, int my) 
   35 #define declare_copy_avg(sz) \ 
   36     declare_fpel(copy, sz);  \ 
   37     declare_fpel(avg , sz) 
   39 #define decl_mc_func(op, filter, dir, sz)                                                \ 
   40 void ff_vp9_##op##_##filter##sz##_##dir##_neon(uint8_t *dst, ptrdiff_t dst_stride,       \ 
   41                                                const uint8_t *src, ptrdiff_t src_stride, \ 
   42                                                int h, int mx, int my) 
   44 #define define_8tap_2d_fn(op, filter, sz)                                         \ 
   45 static void op##_##filter##sz##_hv_neon(uint8_t *dst, ptrdiff_t dst_stride,       \ 
   46                                         const uint8_t *src, ptrdiff_t src_stride, \ 
   47                                         int h, int mx, int my)                    \ 
   49     LOCAL_ALIGNED_16(uint8_t, temp, [((1 + (sz < 64)) * sz + 8) * sz]);           \ 
   52     ff_vp9_put_##filter##sz##_h_neon(temp, sz,                                    \ 
   53                                      src - 3 * src_stride, src_stride,            \ 
   55     ff_vp9_##op##_##filter##sz##_v_neon(dst, dst_stride,                          \ 
   60 #define decl_filter_funcs(op, dir, sz)  \ 
   61     decl_mc_func(op, regular, dir, sz); \ 
   62     decl_mc_func(op, sharp,   dir, sz); \ 
   63     decl_mc_func(op, smooth,  dir, sz) 
   65 #define decl_mc_funcs(sz)           \ 
   66     decl_filter_funcs(put, h,  sz); \ 
   67     decl_filter_funcs(avg, h,  sz); \ 
   68     decl_filter_funcs(put, v,  sz); \ 
   69     decl_filter_funcs(avg, v,  sz); \ 
   70     decl_filter_funcs(put, hv, sz); \ 
   71     decl_filter_funcs(avg, hv, sz) 
   73 #define ff_vp9_copy32_neon ff_vp9_copy32_aarch64 
   74 #define ff_vp9_copy64_neon ff_vp9_copy64_aarch64 
   88 #define define_8tap_2d_funcs(sz)        \ 
   89     define_8tap_2d_fn(put, regular, sz) \ 
   90     define_8tap_2d_fn(put, sharp,   sz) \ 
   91     define_8tap_2d_fn(put, smooth,  sz) \ 
   92     define_8tap_2d_fn(avg, regular, sz) \ 
   93     define_8tap_2d_fn(avg, sharp,   sz) \ 
   94     define_8tap_2d_fn(avg, smooth,  sz) 
  106 #define init_fpel(idx1, idx2, sz, type, suffix)      \ 
  107     dsp->mc[idx1][FILTER_8TAP_SMOOTH ][idx2][0][0] = \ 
  108     dsp->mc[idx1][FILTER_8TAP_REGULAR][idx2][0][0] = \ 
  109     dsp->mc[idx1][FILTER_8TAP_SHARP  ][idx2][0][0] = \ 
  110     dsp->mc[idx1][FILTER_BILINEAR    ][idx2][0][0] = ff_vp9_##type##sz##suffix 
  112 #define init_copy(idx, sz, suffix) \ 
  113     init_fpel(idx, 0, sz, copy, suffix) 
  115 #define init_avg(idx, sz, suffix) \ 
  116     init_fpel(idx, 1, sz, avg,  suffix) 
  118 #define init_copy_avg(idx, sz) \ 
  119     init_copy(idx, sz, _neon); \ 
  120     init_avg (idx, sz, _neon) 
  128 #define init_mc_func(idx1, idx2, op, filter, fname, dir, mx, my, sz, pfx) \ 
  129     dsp->mc[idx1][filter][idx2][mx][my] = pfx##op##_##fname##sz##_##dir##_neon 
  131 #define init_mc_funcs(idx, dir, mx, my, sz, pfx)                                   \ 
  132     init_mc_func(idx, 0, put, FILTER_8TAP_REGULAR, regular, dir, mx, my, sz, pfx); \ 
  133     init_mc_func(idx, 0, put, FILTER_8TAP_SHARP,   sharp,   dir, mx, my, sz, pfx); \ 
  134     init_mc_func(idx, 0, put, FILTER_8TAP_SMOOTH,  smooth,  dir, mx, my, sz, pfx); \ 
  135     init_mc_func(idx, 1, avg, FILTER_8TAP_REGULAR, regular, dir, mx, my, sz, pfx); \ 
  136     init_mc_func(idx, 1, avg, FILTER_8TAP_SHARP,   sharp,   dir, mx, my, sz, pfx); \ 
  137     init_mc_func(idx, 1, avg, FILTER_8TAP_SMOOTH,  smooth,  dir, mx, my, sz, pfx) 
  139 #define init_mc_funcs_dirs(idx, sz)            \ 
  140     init_mc_funcs(idx, h,  1, 0, sz, ff_vp9_); \ 
  141     init_mc_funcs(idx, v,  0, 1, sz, ff_vp9_); \ 
  142     init_mc_funcs(idx, hv, 1, 1, sz,) 
  158 #define define_itxfm(type_a, type_b, sz)                                   \ 
  159 void ff_vp9_##type_a##_##type_b##_##sz##x##sz##_add_neon(uint8_t *_dst,    \ 
  161                                                          int16_t *_block, int eob) 
  163 #define define_itxfm_funcs(sz)      \ 
  164     define_itxfm(idct,  idct,  sz); \ 
  165     define_itxfm(iadst, idct,  sz); \ 
  166     define_itxfm(idct,  iadst, sz); \ 
  167     define_itxfm(iadst, iadst, sz) 
  181 #define init_itxfm(tx, sz)                                             \ 
  182     dsp->itxfm_add[tx][DCT_DCT]   = ff_vp9_idct_idct_##sz##_add_neon;  \ 
  183     dsp->itxfm_add[tx][DCT_ADST]  = ff_vp9_iadst_idct_##sz##_add_neon; \ 
  184     dsp->itxfm_add[tx][ADST_DCT]  = ff_vp9_idct_iadst_##sz##_add_neon; \ 
  185     dsp->itxfm_add[tx][ADST_ADST] = ff_vp9_iadst_iadst_##sz##_add_neon 
  187 #define init_idct(tx, nm)           \ 
  188     dsp->itxfm_add[tx][DCT_DCT]   = \ 
  189     dsp->itxfm_add[tx][ADST_DCT]  = \ 
  190     dsp->itxfm_add[tx][DCT_ADST]  = \ 
  191     dsp->itxfm_add[tx][ADST_ADST] = ff_vp9_##nm##_add_neon 
  201 #define define_loop_filter(dir, wd, len) \ 
  202 void ff_vp9_loop_filter_##dir##_##wd##_##len##_neon(uint8_t *dst, ptrdiff_t stride, int E, int I, int H) 
  204 #define define_loop_filters(wd, len) \ 
  205     define_loop_filter(h, wd, len);  \ 
  206     define_loop_filter(v, wd, len) 
  250     } 
else if (bpp == 12) {
 
  256     vp9dsp_mc_init_aarch64(dsp);
 
  
#define declare_copy_avg(sz)
void(* loop_filter_8[3][2])(uint8_t *dst, ptrdiff_t stride, int mb_lim, int lim, int hev_thr)
#define init_idct(tx, nm)
int av_get_cpu_flags(void)
Return the flags which specify extensions supported by the CPU.
static atomic_int cpu_flags
void(* loop_filter_mix2[2][2][2])(uint8_t *dst, ptrdiff_t stride, int mb_lim, int lim, int hev_thr)
static void idct(int16_t block[64])
#define init_itxfm(tx, sz)
#define init_avg(idx, sz, suffix)
#define init_mc_funcs_dirs(idx, sz)
#define define_itxfm(type_a, type_b, sz)
void ff_vp9dsp_init_12bpp_aarch64(VP9DSPContext *dsp)
#define decl_mc_funcs(sz)
#define have_armv8(flags)
av_cold void ff_vp9dsp_init_aarch64(VP9DSPContext *dsp, int bpp)
static av_cold void vp9dsp_itxfm_init_aarch64(VP9DSPContext *dsp)
#define define_8tap_2d_funcs(sz)
static av_cold void vp9dsp_loopfilter_init_aarch64(VP9DSPContext *dsp)
#define init_copy(idx, sz, suffix)
void ff_vp9dsp_init_10bpp_aarch64(VP9DSPContext *dsp)
#define init_copy_avg(idx, sz)
#define define_itxfm_funcs(sz)
#define define_loop_filters(wd, len)
void(* loop_filter_16[2])(uint8_t *dst, ptrdiff_t stride, int mb_lim, int lim, int hev_thr)