24#ifndef AVCODEC_VVC_DSP_H
25#define AVCODEC_VVC_DSP_H
48 void (*
put[2 ][7 ][2 ][2 ])(
49 int16_t *
dst,
const uint8_t *
src, ptrdiff_t src_stride,
int height,
50 const int8_t *
hf,
const int8_t *
vf,
int width);
53 uint8_t *
dst, ptrdiff_t dst_stride,
const uint8_t *
src, ptrdiff_t src_stride,
int height,
54 const int8_t *
hf,
const int8_t *
vf,
int width);
57 uint8_t *
dst, ptrdiff_t dst_stride,
const uint8_t *
src, ptrdiff_t src_stride,
int height,
58 int denom,
int wx,
int ox,
const int8_t *
hf,
const int8_t *
vf,
int width);
61 int16_t *
dst,
const uint8_t *
src, ptrdiff_t src_stride,
int src_height,
62 int x,
int y,
int dx,
int dy,
int height,
const int8_t *
hf,
const int8_t *
vf,
int width);
65 uint8_t *
dst,
const ptrdiff_t dst_stride,
const uint8_t *
src, ptrdiff_t src_stride,
int src_height,
66 int x,
int y,
int dx,
int dy,
int height,
const int8_t *
hf,
const int8_t *
vf,
int width);
69 uint8_t *
dst,
const ptrdiff_t dst_stride,
const uint8_t *
src, ptrdiff_t src_stride,
int src_height,
70 int x,
int y,
int dx,
int dy,
int height,
int denom,
int wx,
int ox,
const int8_t *
hf,
const int8_t *
vf,
73 void (*
avg)(uint8_t *
dst, ptrdiff_t dst_stride,
76 void (*
w_avg)(uint8_t *
_dst,
const ptrdiff_t _dst_stride,
78 int denom,
int w0,
int w1,
int o);
81 const uint8_t *inter, ptrdiff_t inter_stride,
int inter_weight);
84 const int16_t *
src0,
const int16_t *
src1,
85 const uint8_t *
weights,
int step_x,
int step_y);
87 void (*
fetch_samples)(int16_t *
dst,
const uint8_t *
src, ptrdiff_t src_stride,
int x_frac,
int y_frac);
91 void (*
apply_prof)(int16_t *
dst,
const int16_t *
src,
const int16_t *diff_mv_x,
const int16_t *diff_mv_y);
94 const int16_t *diff_mv_x,
const int16_t *diff_mv_y);
96 const int16_t *diff_mv_x,
const int16_t *diff_mv_y,
int denom,
int wx,
int ox);
98 void (*
apply_bdof)(uint8_t *
dst, ptrdiff_t dst_stride,
const int16_t *
src0,
const int16_t *
src1,
int block_w,
int block_h);
100 int (*
sad)(
const int16_t *
src0,
const int16_t *
src1,
int dx,
int dy,
int block_w,
int block_h);
113 int mode_id,
int is_transpose);
118 int w,
int h, ptrdiff_t
stride,
int c_idx,
int mode,
int ref_idx,
int filter_flag,
int need_pdpc);
120 int c_idx,
int mode,
int ref_idx,
int filter_flag,
int need_pdpc);
141 const uint8_t *no_p,
const uint8_t *no_q,
const uint8_t *max_len_p,
const uint8_t *max_len_q,
int hor_ctu_edge);
143 const uint8_t *no_p,
const uint8_t *no_q,
const uint8_t *max_len_p,
const uint8_t *max_len_q,
int shift);
148 void (*
band_filter[9])(uint8_t *
dst,
const uint8_t *
src, ptrdiff_t dst_stride, ptrdiff_t src_stride,
149 const int16_t *sao_offset_val,
int sao_left_class,
int width,
int height);
152 const int16_t *sao_offset_val,
int sao_eo_class,
int width,
int height);
153 void (*
edge_restore[2])(uint8_t *
dst,
const uint8_t *
src, ptrdiff_t dst_stride, ptrdiff_t src_stride,
155 const uint8_t *vert_edge,
const uint8_t *horiz_edge,
const uint8_t *diag_edge);
159 void (*
filter[2 ])(uint8_t *
dst, ptrdiff_t dst_stride,
const uint8_t *
src, ptrdiff_t src_stride,
161 void (*
filter_cc)(uint8_t *
dst, ptrdiff_t dst_stride,
const uint8_t *luma, ptrdiff_t luma_stride,
165 int vb_pos,
int *gradient_tmp);
167 const int16_t *coeff_set,
const uint8_t *clip_idx_set,
const uint8_t *class_to_filt);
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t my
uint8_t ptrdiff_t const uint8_t ptrdiff_t int const int8_t const int8_t * vf
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t mx
uint8_t ptrdiff_t const uint8_t ptrdiff_t int const int8_t * hf
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
static void bit_depth(AudioStatsContext *s, const uint64_t *const mask, uint8_t *depth)
static int BS_FUNC left(const BSCTX *bc)
Return the number of the bits left in a buffer.
static const int weights[]
static int shift(int a, int b)
#define u(width, name, range_min, range_max)
void(* filter_cc)(uint8_t *dst, ptrdiff_t dst_stride, const uint8_t *luma, ptrdiff_t luma_stride, int width, int height, int hs, int vs, const int16_t *filter, int vb_pos)
void(* classify)(int *class_idx, int *transpose_idx, const uint8_t *src, ptrdiff_t src_stride, int width, int height, int vb_pos, int *gradient_tmp)
void(* recon_coeff_and_clip)(int16_t *coeff, int16_t *clip, const int *class_idx, const int *transpose_idx, int size, const int16_t *coeff_set, const uint8_t *clip_idx_set, const uint8_t *class_to_filt)
void(* filter[2/*luma, chroma */])(uint8_t *dst, ptrdiff_t dst_stride, const uint8_t *src, ptrdiff_t src_stride, int width, int height, const int16_t *filter, const int16_t *clip, int vb_pos)
void(* w_avg)(uint8_t *_dst, const ptrdiff_t _dst_stride, const int16_t *src0, const int16_t *src1, int width, int height, int denom, int w0, int w1, int o)
void(* apply_prof)(int16_t *dst, const int16_t *src, const int16_t *diff_mv_x, const int16_t *diff_mv_y)
void(* apply_bdof)(uint8_t *dst, ptrdiff_t dst_stride, const int16_t *src0, const int16_t *src1, int block_w, int block_h)
void(* apply_prof_uni_w)(uint8_t *dst, const ptrdiff_t dst_stride, const int16_t *src, const int16_t *diff_mv_x, const int16_t *diff_mv_y, int denom, int wx, int ox)
void(* put_uni[2/*luma, chroma */][7/*log2(width) - 1 */][2/*int, frac */][2/*int, frac */])(uint8_t *dst, ptrdiff_t dst_stride, const uint8_t *src, ptrdiff_t src_stride, int height, const int8_t *hf, const int8_t *vf, int width)
void(* bdof_fetch_samples)(int16_t *dst, const uint8_t *src, ptrdiff_t src_stride, int x_frac, int y_frac, int width, int height)
void(* put_gpm)(uint8_t *dst, ptrdiff_t dst_stride, int width, int height, const int16_t *src0, const int16_t *src1, const uint8_t *weights, int step_x, int step_y)
void(* dmvr[2][2])(int16_t *dst, const uint8_t *src, ptrdiff_t src_stride, int height, intptr_t mx, intptr_t my, int width)
void(* apply_prof_uni)(uint8_t *dst, ptrdiff_t dst_stride, const int16_t *src, const int16_t *diff_mv_x, const int16_t *diff_mv_y)
void(* put_ciip)(uint8_t *dst, ptrdiff_t dst_stride, int width, int height, const uint8_t *inter, ptrdiff_t inter_stride, int inter_weight)
void(* put_uni_w[2/*luma, chroma */][7/*log2(width) - 1 */][2/*int, frac */][2/*int, frac */])(uint8_t *dst, ptrdiff_t dst_stride, const uint8_t *src, ptrdiff_t src_stride, int height, int denom, int wx, int ox, const int8_t *hf, const int8_t *vf, int width)
void(* fetch_samples)(int16_t *dst, const uint8_t *src, ptrdiff_t src_stride, int x_frac, int y_frac)
void(* put_uni_scaled[2/*luma, chroma */][7/*log2(width) - 1 */])(uint8_t *dst, const ptrdiff_t dst_stride, const uint8_t *src, ptrdiff_t src_stride, int src_height, int x, int y, int dx, int dy, int height, const int8_t *hf, const int8_t *vf, int width)
void(* avg)(uint8_t *dst, ptrdiff_t dst_stride, const int16_t *src0, const int16_t *src1, int width, int height)
void(* put_scaled[2/*luma, chroma */][7/*log2(width) - 1 */])(int16_t *dst, const uint8_t *src, ptrdiff_t src_stride, int src_height, int x, int y, int dx, int dy, int height, const int8_t *hf, const int8_t *vf, int width)
int(* sad)(const int16_t *src0, const int16_t *src1, int dx, int dy, int block_w, int block_h)
void(* put_uni_w_scaled[2/*luma, chroma */][7/*log2(width) - 1 */])(uint8_t *dst, const ptrdiff_t dst_stride, const uint8_t *src, ptrdiff_t src_stride, int src_height, int x, int y, int dx, int dy, int height, int denom, int wx, int ox, const int8_t *hf, const int8_t *vf, int width)
void(* put[2/*luma, chroma */][7/*log2(width) - 1 */][2/*int, frac */][2/*int, frac */])(int16_t *dst, const uint8_t *src, ptrdiff_t src_stride, int height, const int8_t *hf, const int8_t *vf, int width)
void(* pred_v)(uint8_t *src, const uint8_t *_top, int w, int h, ptrdiff_t stride)
void(* pred_dc)(uint8_t *src, const uint8_t *top, const uint8_t *left, int w, int h, ptrdiff_t stride)
void(* pred_angular_v)(uint8_t *src, const uint8_t *_top, const uint8_t *_left, int w, int h, ptrdiff_t stride, int c_idx, int mode, int ref_idx, int filter_flag, int need_pdpc)
void(* lmcs_scale_chroma)(struct VVCLocalContext *lc, int *coeff, int w, int h, int x0_cu, int y0_cu)
void(* pred_planar)(uint8_t *src, const uint8_t *top, const uint8_t *left, int w, int h, ptrdiff_t stride)
void(* pred_h)(uint8_t *src, const uint8_t *_left, int w, int h, ptrdiff_t stride)
void(* intra_cclm_pred)(const struct VVCLocalContext *lc, int x0, int y0, int w, int h)
void(* intra_pred)(const struct VVCLocalContext *lc, int x0, int y0, int w, int h, int c_idx)
void(* pred_mip)(uint8_t *src, const uint8_t *top, const uint8_t *left, int w, int h, ptrdiff_t stride, int mode_id, int is_transpose)
void(* pred_angular_h)(uint8_t *src, const uint8_t *_top, const uint8_t *_left, int w, int h, ptrdiff_t stride, int c_idx, int mode, int ref_idx, int filter_flag, int need_pdpc)
void(* transform_bdpcm)(int *coeffs, int width, int height, int vertical, int log2_transform_range)
void(* pred_residual_joint)(int *dst, const int *src, int width, int height, int c_sign, int shift)
void(* itx[VVC_N_TX_TYPE][VVC_N_TX_SIZE])(int *coeffs, ptrdiff_t step, size_t nz)
void(* adaptive_color_transform)(int *y, int *u, int *v, int width, int height)
void(* add_residual)(uint8_t *dst, const int *res, int width, int height, ptrdiff_t stride)
int(* ladf_level[2/*h, v */])(const uint8_t *pix, ptrdiff_t stride)
void(* filter_luma[2/*h, v */])(uint8_t *pix, ptrdiff_t stride, const int32_t *beta, const int32_t *tc, const uint8_t *no_p, const uint8_t *no_q, const uint8_t *max_len_p, const uint8_t *max_len_q, int hor_ctu_edge)
void(* filter_chroma[2/*h, v */])(uint8_t *pix, ptrdiff_t stride, const int32_t *beta, const int32_t *tc, const uint8_t *no_p, const uint8_t *no_q, const uint8_t *max_len_p, const uint8_t *max_len_q, int shift)
void(* filter)(uint8_t *dst, ptrdiff_t dst_stride, int width, int height, const void *lut)
void(* edge_restore[2])(uint8_t *dst, const uint8_t *src, ptrdiff_t dst_stride, ptrdiff_t src_stride, const struct SAOParams *sao, const int *borders, int width, int height, int c_idx, const uint8_t *vert_edge, const uint8_t *horiz_edge, const uint8_t *diag_edge)
void(* band_filter[9])(uint8_t *dst, const uint8_t *src, ptrdiff_t dst_stride, ptrdiff_t src_stride, const int16_t *sao_offset_val, int sao_left_class, int width, int height)
void(* edge_filter[9])(uint8_t *dst, const uint8_t *src, ptrdiff_t dst_stride, const int16_t *sao_offset_val, int sao_eo_class, int width, int height)
static const double coeff[2][5]
void ff_vvc_dsp_init_aarch64(VVCDSPContext *hpc, const int bit_depth)
void ff_vvc_dsp_init_riscv(VVCDSPContext *hpc, const int bit_depth)
void ff_vvc_dsp_init(VVCDSPContext *hpc, int bit_depth)
void ff_vvc_dsp_init_x86(VVCDSPContext *hpc, const int bit_depth)