FFmpeg
Macros | Functions
vp9dsp_init_arm.c File Reference
#include <stdint.h>
#include "libavutil/attributes.h"
#include "libavutil/internal.h"
#include "libavutil/arm/cpu.h"
#include "libavcodec/vp9dsp.h"
#include "vp9dsp_init.h"

Go to the source code of this file.

Macros

#define declare_fpel(type, sz)
 
#define declare_copy_avg(sz)
 
#define decl_mc_func(op, filter, dir, sz)
 
#define define_8tap_2d_fn(op, filter, sz)
 
#define decl_filter_funcs(op, dir, sz)
 
#define decl_mc_funcs(sz)
 
#define define_8tap_2d_funcs(sz)
 
#define init_fpel(idx1, idx2, sz, type)
 
#define init_copy_avg(idx, sz)
 
#define init_mc_func(idx1, idx2, op, filter, fname, dir, mx, my, sz, pfx)   dsp->mc[idx1][filter][idx2][mx][my] = pfx##op##_##fname##sz##_##dir##_neon
 
#define init_mc_funcs(idx, dir, mx, my, sz, pfx)
 
#define init_mc_funcs_dirs(idx, sz)
 
#define define_itxfm(type_a, type_b, sz)
 
#define define_itxfm_funcs(sz)
 
#define init_itxfm(tx, sz)
 
#define init_idct(tx, nm)
 
#define define_loop_filter(dir, wd, size)   void ff_vp9_loop_filter_##dir##_##wd##_##size##_neon(uint8_t *dst, ptrdiff_t stride, int E, int I, int H)
 
#define define_loop_filters(wd, size)
 
#define lf_mix_fn(dir, wd1, wd2, stridea)
 
#define lf_mix_fns(wd1, wd2)
 

Functions

 declare_copy_avg (64)
 
 declare_copy_avg (32)
 
 declare_copy_avg (16)
 
 declare_copy_avg (8)
 
 declare_copy_avg (4)
 
 decl_mc_funcs (64)
 
 decl_mc_funcs (32)
 
 decl_mc_funcs (16)
 
 decl_mc_funcs (8)
 
 decl_mc_funcs (4)
 
 define_8tap_2d_funcs (64)
 
 define_itxfm_funcs (4)
 
 define_itxfm_funcs (8)
 
 define_itxfm_funcs (16)
 
 define_itxfm (idct, idct, 32)
 
 define_itxfm (iwht, iwht, 4)
 
static av_cold void vp9dsp_itxfm_init_arm (VP9DSPContext *dsp)
 
 define_loop_filters (4, 8)
 
 define_loop_filters (8, 8)
 
 define_loop_filters (16, 8)
 
 define_loop_filters (16, 16)
 
 define_loop_filters (44, 16)
 
 lf_mix_fns (4, lf_mix_fns(8)
 
av_cold void ff_vp9dsp_init_arm (VP9DSPContext *dsp, int bpp)
 

Macro Definition Documentation

◆ declare_fpel

#define declare_fpel (   type,
  sz 
)
Value:
void ff_vp9_##type##sz##_neon(uint8_t *dst, ptrdiff_t dst_stride, \
const uint8_t *src, ptrdiff_t src_stride, \
int h, int mx, int my)

Definition at line 29 of file vp9dsp_init_arm.c.

◆ declare_copy_avg

#define declare_copy_avg (   sz)
Value:
declare_fpel(avg , sz)

Definition at line 34 of file vp9dsp_init_arm.c.

◆ decl_mc_func

#define decl_mc_func (   op,
  filter,
  dir,
  sz 
)
Value:
void ff_vp9_##op##_##filter##sz##_##dir##_neon(uint8_t *dst, ptrdiff_t dst_stride, \
const uint8_t *src, ptrdiff_t src_stride, \
int h, int mx, int my)

Definition at line 38 of file vp9dsp_init_arm.c.

◆ define_8tap_2d_fn

#define define_8tap_2d_fn (   op,
  filter,
  sz 
)
Value:
static void op##_##filter##sz##_hv_neon(uint8_t *dst, ptrdiff_t dst_stride, \
const uint8_t *src, ptrdiff_t src_stride, \
int h, int mx, int my) \
{ \
LOCAL_ALIGNED_16(uint8_t, temp, [((1 + (sz < 64)) * sz + 8) * sz]); \
/* We only need h + 7 lines, but the horizontal filter assumes an \
* even number of rows, so filter h + 8 lines here. */ \
ff_vp9_put_##filter##sz##_h_neon(temp, sz, \
src - 3 * src_stride, src_stride, \
h + 8, mx, 0); \
ff_vp9_##op##_##filter##sz##_v_neon(dst, dst_stride, \
temp + 3 * sz, sz, \
h, 0, my); \
}

Definition at line 43 of file vp9dsp_init_arm.c.

◆ decl_filter_funcs

#define decl_filter_funcs (   op,
  dir,
  sz 
)
Value:
decl_mc_func(op, regular, dir, sz); \
decl_mc_func(op, sharp, dir, sz); \
decl_mc_func(op, smooth, dir, sz)

Definition at line 58 of file vp9dsp_init_arm.c.

◆ decl_mc_funcs

#define decl_mc_funcs (   sz)
Value:
decl_filter_funcs(put, h, sz); \
decl_filter_funcs(avg, h, sz); \
decl_filter_funcs(put, v, sz); \
decl_filter_funcs(avg, v, sz); \
decl_filter_funcs(put, hv, sz); \
decl_filter_funcs(avg, hv, sz)

Definition at line 63 of file vp9dsp_init_arm.c.

◆ define_8tap_2d_funcs

#define define_8tap_2d_funcs (   sz)
Value:
define_8tap_2d_fn(put, regular, sz) \
define_8tap_2d_fn(put, sharp, sz) \
define_8tap_2d_fn(put, smooth, sz) \
define_8tap_2d_fn(avg, regular, sz) \
define_8tap_2d_fn(avg, sharp, sz) \
define_8tap_2d_fn(avg, smooth, sz)

Definition at line 83 of file vp9dsp_init_arm.c.

◆ init_fpel

#define init_fpel (   idx1,
  idx2,
  sz,
  type 
)
Value:
dsp->mc[idx1][FILTER_8TAP_SMOOTH ][idx2][0][0] = \
dsp->mc[idx1][FILTER_8TAP_REGULAR][idx2][0][0] = \
dsp->mc[idx1][FILTER_8TAP_SHARP ][idx2][0][0] = \
dsp->mc[idx1][FILTER_BILINEAR ][idx2][0][0] = ff_vp9_##type##sz##_neon

◆ init_copy_avg

#define init_copy_avg (   idx,
  sz 
)
Value:
init_fpel(idx, 0, sz, copy); \
init_fpel(idx, 1, sz, avg)

◆ init_mc_func

#define init_mc_func (   idx1,
  idx2,
  op,
  filter,
  fname,
  dir,
  mx,
  my,
  sz,
  pfx 
)    dsp->mc[idx1][filter][idx2][mx][my] = pfx##op##_##fname##sz##_##dir##_neon

◆ init_mc_funcs

#define init_mc_funcs (   idx,
  dir,
  mx,
  my,
  sz,
  pfx 
)
Value:
init_mc_func(idx, 0, put, FILTER_8TAP_REGULAR, regular, dir, mx, my, sz, pfx); \
init_mc_func(idx, 0, put, FILTER_8TAP_SHARP, sharp, dir, mx, my, sz, pfx); \
init_mc_func(idx, 0, put, FILTER_8TAP_SMOOTH, smooth, dir, mx, my, sz, pfx); \
init_mc_func(idx, 1, avg, FILTER_8TAP_REGULAR, regular, dir, mx, my, sz, pfx); \
init_mc_func(idx, 1, avg, FILTER_8TAP_SHARP, sharp, dir, mx, my, sz, pfx); \
init_mc_func(idx, 1, avg, FILTER_8TAP_SMOOTH, smooth, dir, mx, my, sz, pfx)

◆ init_mc_funcs_dirs

#define init_mc_funcs_dirs (   idx,
  sz 
)
Value:
init_mc_funcs(idx, h, 1, 0, sz, ff_vp9_); \
init_mc_funcs(idx, v, 0, 1, sz, ff_vp9_); \
init_mc_funcs(idx, hv, 1, 1, sz,)

◆ define_itxfm

#define define_itxfm (   type_a,
  type_b,
  sz 
)
Value:
void ff_vp9_##type_a##_##type_b##_##sz##x##sz##_add_neon(uint8_t *_dst, \
ptrdiff_t stride, \
int16_t *_block, int eob)

Definition at line 143 of file vp9dsp_init_arm.c.

◆ define_itxfm_funcs

#define define_itxfm_funcs (   sz)
Value:
define_itxfm(iadst, idct, sz); \
define_itxfm(idct, iadst, sz); \
define_itxfm(iadst, iadst, sz)

Definition at line 148 of file vp9dsp_init_arm.c.

◆ init_itxfm

#define init_itxfm (   tx,
  sz 
)
Value:
dsp->itxfm_add[tx][DCT_DCT] = ff_vp9_idct_idct_##sz##_add_neon; \
dsp->itxfm_add[tx][DCT_ADST] = ff_vp9_iadst_idct_##sz##_add_neon; \
dsp->itxfm_add[tx][ADST_DCT] = ff_vp9_idct_iadst_##sz##_add_neon; \
dsp->itxfm_add[tx][ADST_ADST] = ff_vp9_iadst_iadst_##sz##_add_neon

◆ init_idct

#define init_idct (   tx,
  nm 
)
Value:
dsp->itxfm_add[tx][DCT_DCT] = \
dsp->itxfm_add[tx][ADST_DCT] = \
dsp->itxfm_add[tx][DCT_ADST] = \
dsp->itxfm_add[tx][ADST_ADST] = ff_vp9_##nm##_add_neon

◆ define_loop_filter

#define define_loop_filter (   dir,
  wd,
  size 
)    void ff_vp9_loop_filter_##dir##_##wd##_##size##_neon(uint8_t *dst, ptrdiff_t stride, int E, int I, int H)

Definition at line 186 of file vp9dsp_init_arm.c.

◆ define_loop_filters

#define define_loop_filters (   wd,
  size 
)
Value:
define_loop_filter(v, wd, size)

Definition at line 189 of file vp9dsp_init_arm.c.

◆ lf_mix_fn

#define lf_mix_fn (   dir,
  wd1,
  wd2,
  stridea 
)
Value:
static void loop_filter_##dir##_##wd1##wd2##_16_neon(uint8_t *dst, \
ptrdiff_t stride, \
int E, int I, int H) \
{ \
ff_vp9_loop_filter_##dir##_##wd1##_8_neon(dst, stride, E & 0xff, I & 0xff, H & 0xff); \
ff_vp9_loop_filter_##dir##_##wd2##_8_neon(dst + 8 * stridea, stride, E >> 8, I >> 8, H >> 8); \
}

Definition at line 200 of file vp9dsp_init_arm.c.

◆ lf_mix_fns

#define lf_mix_fns (   wd1,
  wd2 
)
Value:
lf_mix_fn(h, wd1, wd2, stride) \
lf_mix_fn(v, wd1, wd2, sizeof(uint8_t))

Definition at line 209 of file vp9dsp_init_arm.c.

Function Documentation

◆ declare_copy_avg() [1/5]

declare_copy_avg ( 64  )

◆ declare_copy_avg() [2/5]

declare_copy_avg ( 32  )

◆ declare_copy_avg() [3/5]

declare_copy_avg ( 16  )

◆ declare_copy_avg() [4/5]

declare_copy_avg ( )

◆ declare_copy_avg() [5/5]

declare_copy_avg ( )

◆ decl_mc_funcs() [1/5]

decl_mc_funcs ( 64  )

◆ decl_mc_funcs() [2/5]

decl_mc_funcs ( 32  )

◆ decl_mc_funcs() [3/5]

decl_mc_funcs ( 16  )

◆ decl_mc_funcs() [4/5]

decl_mc_funcs ( )

◆ decl_mc_funcs() [5/5]

decl_mc_funcs ( )

◆ define_8tap_2d_funcs()

define_8tap_2d_funcs ( 64  )

Definition at line 91 of file vp9dsp_init_arm.c.

◆ define_itxfm_funcs() [1/3]

define_itxfm_funcs ( )

◆ define_itxfm_funcs() [2/3]

define_itxfm_funcs ( )

◆ define_itxfm_funcs() [3/3]

define_itxfm_funcs ( 16  )

◆ define_itxfm() [1/2]

define_itxfm ( idct  ,
idct  ,
32   
)

◆ define_itxfm() [2/2]

define_itxfm ( iwht  ,
iwht  ,
 
)

◆ vp9dsp_itxfm_init_arm()

static av_cold void vp9dsp_itxfm_init_arm ( VP9DSPContext dsp)
static

Definition at line 161 of file vp9dsp_init_arm.c.

Referenced by ff_vp9dsp_init_arm().

◆ define_loop_filters() [1/5]

define_loop_filters ( ,
 
)

◆ define_loop_filters() [2/5]

define_loop_filters ( ,
 
)

◆ define_loop_filters() [3/5]

define_loop_filters ( 16  ,
 
)

◆ define_loop_filters() [4/5]

define_loop_filters ( 16  ,
16   
)

◆ define_loop_filters() [5/5]

define_loop_filters ( 44  ,
16   
)

◆ lf_mix_fns()

lf_mix_fns ( ,
lf_mix_fns(  8 
)

Definition at line 213 of file vp9dsp_init_arm.c.

◆ ff_vp9dsp_init_arm()

av_cold void ff_vp9dsp_init_arm ( VP9DSPContext dsp,
int  bpp 
)

Definition at line 243 of file vp9dsp_init_arm.c.

Referenced by ff_vp9dsp_init().

stride
int stride
Definition: mace.c:144
decl_mc_func
#define decl_mc_func(op, filter, dir, sz)
Definition: vp9dsp_init_arm.c:38
define_loop_filter
#define define_loop_filter(dir, wd, size)
Definition: vp9dsp_init_arm.c:186
filter
filter_frame For filters that do not use the this method is called when a frame is pushed to the filter s input It can be called at any time except in a reentrant way If the input frame is enough to produce then the filter should push the output frames on the output link immediately As an exception to the previous rule if the input frame is enough to produce several output frames then the filter needs output only at least one per link The additional frames can be left buffered in the filter
Definition: filter_design.txt:228
lf_mix_fn
#define lf_mix_fn(dir, wd1, wd2, stridea)
Definition: vp9dsp_init_arm.c:200
type
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
Definition: writing_filters.txt:86
FILTER_8TAP_SHARP
@ FILTER_8TAP_SHARP
Definition: vp9.h:67
src
#define src
Definition: vp8dsp.c:254
idct
static void idct(int16_t block[64])
Definition: 4xm.c:163
define_itxfm
#define define_itxfm(type_a, type_b, sz)
Definition: vp9dsp_init_arm.c:143
op
static int op(uint8_t **dst, const uint8_t *dst_end, GetByteContext *gb, int pixel, int count, int *x, int width, int linesize)
Perform decode operation.
Definition: anm.c:78
E
#define E
Definition: avdct.c:32
DCT_ADST
@ DCT_ADST
Definition: vp9.h:39
H
F H1 F F H1 F F F F H1<-F-------F-------F v v v H2 H3 H2 ^ ^ ^ F-------F-------F-> H1<-F-------F-------F|||||||||F H1 F|||||||||F H1 Funavailable fullpel samples(outside the picture for example) shall be equalto the closest available fullpel sampleSmaller pel interpolation:--------------------------if diag_mc is set then points which lie on a line between 2 vertically, horizontally or diagonally adjacent halfpel points shall be interpolatedlinearly with rounding to nearest and halfway values rounded up.points which lie on 2 diagonals at the same time should only use the onediagonal not containing the fullpel point F--> O q O<--h1-> O q O<--F v \/v \/v O O O O O O O|/|\|q q q q q|/|\|O O O O O O O ^/\ ^/\ ^ h2--> O q O<--h3-> O q O<--h2 v \/v \/v O O O O O O O|\|/|q q q q q|\|/|O O O O O O O ^/\ ^/\ ^ F--> O q O<--h1-> O q O<--Fthe remaining points shall be bilinearly interpolated from theup to 4 surrounding halfpel and fullpel points, again rounding should be tonearest and halfway values rounded upcompliant Snow decoders MUST support 1-1/8 pel luma and 1/2-1/16 pel chromainterpolation at leastOverlapped block motion compensation:-------------------------------------FIXMELL band prediction:===================Each sample in the LL0 subband is predicted by the median of the left, top andleft+top-topleft samples, samples outside the subband shall be considered tobe 0. To reverse this prediction in the decoder apply the following.for(y=0;y< height;y++){ for(x=0;x< width;x++){ sample[y][x]+=median(sample[y-1][x], sample[y][x-1], sample[y-1][x]+sample[y][x-1]-sample[y-1][x-1]);}}sample[-1][ *]=sample[ *][-1]=0;width, height here are the width and height of the LL0 subband not of the finalvideoDequantization:===============FIXMEWavelet Transform:==================Snow supports 2 wavelet transforms, the symmetric biorthogonal 5/3 integertransform and an integer approximation of the symmetric biorthogonal 9/7daubechies wavelet.2D IDWT(inverse discrete wavelet transform) --------------------------------------------The 2D IDWT applies a 2D filter recursively, each time combining the4 lowest frequency subbands into a single subband until only 1 subbandremains.The 2D filter is done by first applying a 1D filter in the vertical directionand then applying it in the horizontal one. --------------- --------------- --------------- ---------------|LL0|HL0|||||||||||||---+---|HL1||L0|H0|HL1||LL1|HL1|||||LH0|HH0|||||||||||||-------+-------|-> L1 H1 LH1 HH1 LH1 HH1 LH1 HH1 this can end with a L or a H
Definition: snow.txt:555
FILTER_BILINEAR
@ FILTER_BILINEAR
Definition: vp9.h:68
DCT_DCT
@ DCT_DCT
Definition: vp9.h:38
copy
static void copy(const float *p1, float *p2, const int length)
Definition: vf_vaguedenoiser.c:185
init_mc_funcs
#define init_mc_funcs(idx, dir, mx, my, sz, pfx)
FILTER_8TAP_REGULAR
@ FILTER_8TAP_REGULAR
Definition: vp9.h:66
size
int size
Definition: twinvq_data.h:11134
avg
#define avg(a, b, c, d)
Definition: colorspacedsp_template.c:28
ADST_ADST
@ ADST_ADST
Definition: vp9.h:41
FILTER_8TAP_SMOOTH
@ FILTER_8TAP_SMOOTH
Definition: vp9.h:65
uint8_t
uint8_t
Definition: audio_convert.c:194
define_8tap_2d_fn
#define define_8tap_2d_fn(op, filter, sz)
Definition: vp9dsp_init_arm.c:43
init_fpel
#define init_fpel(idx1, idx2, sz, type)
declare_fpel
#define declare_fpel(type, sz)
Definition: vp9dsp_init_arm.c:29
init_mc_func
#define init_mc_func(idx1, idx2, op, filter, fname, dir, mx, my, sz, pfx)
temp
else temp
Definition: vf_mcdeint.c:256
decl_filter_funcs
#define decl_filter_funcs(op, dir, sz)
Definition: vp9dsp_init_arm.c:58
_
#define _
ADST_DCT
@ ADST_DCT
Definition: vp9.h:40
h
h
Definition: vp9dsp_template.c:2038