FFmpeg
vvcdsp.h
Go to the documentation of this file.
1 /*
2  * VVC DSP
3  *
4  * Copyright (C) 2021 Nuo Mi
5  *
6  *
7  * This file is part of FFmpeg.
8  *
9  * FFmpeg is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public
11  * License as published by the Free Software Foundation; either
12  * version 2.1 of the License, or (at your option) any later version.
13  *
14  * FFmpeg is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with FFmpeg; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22  */
23 
24 #ifndef AVCODEC_VVC_VVCDSP_H
25 #define AVCODEC_VVC_VVCDSP_H
26 
27 #include <stdint.h>
28 #include <stddef.h>
29 
30 enum TxType {
35 };
36 
37 enum TxSize {
45 };
46 
47 typedef struct VVCInterDSPContext {
48  void (*put[2 /* luma, chroma */][7 /* log2(width) - 1 */][2 /* int, frac */][2 /* int, frac */])(
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);
51 
52  void (*put_uni[2 /* luma, chroma */][7 /* log2(width) - 1 */][2 /* int, frac */][2 /* int, frac */])(
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);
55 
56  void (*put_uni_w[2 /* luma, chroma */][7 /* log2(width) - 1 */][2 /* int, frac */][2 /* int, frac */])(
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);
59 
60  void (*avg)(uint8_t *dst, ptrdiff_t dst_stride,
61  const int16_t *src0, const int16_t *src1, int width, int height);
62 
63  void (*w_avg)(uint8_t *_dst, const ptrdiff_t _dst_stride,
64  const int16_t *src0, const int16_t *src1, int width, int height,
65  int denom, int w0, int w1, int o0, int o1);
66 
67  void (*put_ciip)(uint8_t *dst, ptrdiff_t dst_stride, int width, int height,
68  const uint8_t *inter, ptrdiff_t inter_stride, int inter_weight);
69 
70  void (*put_gpm)(uint8_t *dst, ptrdiff_t dst_stride, int width, int height,
71  const int16_t *src0, const int16_t *src1,
72  const uint8_t *weights, int step_x, int step_y);
73 
74  void (*fetch_samples)(int16_t *dst, const uint8_t *src, ptrdiff_t src_stride, int x_frac, int y_frac);
75  void (*bdof_fetch_samples)(int16_t *dst, const uint8_t *src, ptrdiff_t src_stride, int x_frac, int y_frac,
76  int width, int height);
77 
78  void (*prof_grad_filter)(int16_t *gradient_h, int16_t *gradient_v, const ptrdiff_t gradient_stride,
79  const int16_t *src, const ptrdiff_t src_stride, int width, int height, const int pad);
80  void (*apply_prof)(int16_t *dst, const int16_t *src, const int16_t *diff_mv_x, const int16_t *diff_mv_y);
81 
82  void (*apply_prof_uni)(uint8_t *dst, ptrdiff_t dst_stride, const int16_t *src,
83  const int16_t *diff_mv_x, const int16_t *diff_mv_y);
84  void (*apply_prof_uni_w)(uint8_t *dst, const ptrdiff_t dst_stride, const int16_t *src,
85  const int16_t *diff_mv_x, const int16_t *diff_mv_y, int denom, int wx, int ox);
86 
87  void (*apply_bdof)(uint8_t *dst, ptrdiff_t dst_stride, int16_t *src0, int16_t *src1, int block_w, int block_h);
88 
89  int (*sad)(const int16_t *src0, const int16_t *src1, int dx, int dy, int block_w, int block_h);
90  void (*dmvr[2][2])(int16_t *dst, const uint8_t *src, ptrdiff_t src_stride, int height,
91  intptr_t mx, intptr_t my, int width);
93 
94 struct VVCLocalContext;
95 
96 typedef struct VVCIntraDSPContext {
97  void (*intra_cclm_pred)(const struct VVCLocalContext *lc, int x0, int y0, int w, int h);
98  void (*lmcs_scale_chroma)(struct VVCLocalContext *lc, int *dst, const int *coeff, int w, int h, int x0_cu, int y0_cu);
99  void (*intra_pred)(const struct VVCLocalContext *lc, int x0, int y0, int w, int h, int c_idx);
100  void (*pred_planar)(uint8_t *src, const uint8_t *top, const uint8_t *left, int w, int h, ptrdiff_t stride);
101  void (*pred_mip)(uint8_t *src, const uint8_t *top, const uint8_t *left, int w, int h, ptrdiff_t stride,
102  int mode_id, int is_transpose);
103  void (*pred_dc)(uint8_t *src, const uint8_t *top, const uint8_t *left, int w, int h, ptrdiff_t stride);
104  void (*pred_v)(uint8_t *src, const uint8_t *_top, int w, int h, ptrdiff_t stride);
105  void (*pred_h)(uint8_t *src, const uint8_t *_left, int w, int h, ptrdiff_t stride);
106  void (*pred_angular_v)(uint8_t *src, const uint8_t *_top, const uint8_t *_left,
107  int w, int h, ptrdiff_t stride, int c_idx, int mode, int ref_idx, int filter_flag, int need_pdpc);
108  void (*pred_angular_h)(uint8_t *src, const uint8_t *_top, const uint8_t *_left, int w, int h, ptrdiff_t stride,
109  int c_idx, int mode, int ref_idx, int filter_flag, int need_pdpc);
111 
112 typedef struct VVCItxDSPContext {
113  void (*add_residual)(uint8_t *dst, const int *res, int width, int height, ptrdiff_t stride);
114  void (*add_residual_joint)(uint8_t *dst, const int *res, int width, int height, ptrdiff_t stride, int c_sign, int shift);
115  void (*pred_residual_joint)(int *buf, int width, int height, int c_sign, int shift);
116 
117  void (*itx[N_TX_TYPE][N_TX_SIZE])(int *coeffs, ptrdiff_t step, size_t nz);
118  void (*transform_bdpcm)(int *coeffs, int width, int height, int vertical, int log2_transform_range);
120 
121 typedef struct VVCLMCSDSPContext {
122  void (*filter)(uint8_t *dst, ptrdiff_t dst_stride, int width, int height, const void *lut);
124 
125 typedef struct VVCLFDSPContext {
126  int (*ladf_level[2 /* h, v */])(const uint8_t *pix, ptrdiff_t stride);
127 
128  void (*filter_luma[2 /* h, v */])(uint8_t *pix, ptrdiff_t stride, const int32_t *beta, const int32_t *tc,
129  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);
130  void (*filter_chroma[2 /* h, v */])(uint8_t *pix, ptrdiff_t stride, const int32_t *beta, const int32_t *tc,
131  const uint8_t *no_p, const uint8_t *no_q, const uint8_t *max_len_p, const uint8_t *max_len_q, int shift);
133 
134 struct SAOParams;
135 typedef struct VVCSAODSPContext {
136  void (*band_filter[9])(uint8_t *dst, const uint8_t *src, ptrdiff_t dst_stride, ptrdiff_t src_stride,
137  const int16_t *sao_offset_val, int sao_left_class, int width, int height);
138  /* implicit src_stride parameter has value of 2 * MAX_PB_SIZE + AV_INPUT_BUFFER_PADDING_SIZE */
139  void (*edge_filter[9])(uint8_t *dst /* align 16 */, const uint8_t *src /* align 32 */, ptrdiff_t dst_stride,
140  const int16_t *sao_offset_val, int sao_eo_class, int width, int height);
141  void (*edge_restore[2])(uint8_t *dst, const uint8_t *src, ptrdiff_t dst_stride, ptrdiff_t src_stride,
142  const struct SAOParams *sao, const int *borders, int width, int height, int c_idx,
143  const uint8_t *vert_edge, const uint8_t *horiz_edge, const uint8_t *diag_edge);
145 
146 typedef struct VVCALFDSPContext {
147  void (*filter[2 /* luma, chroma */])(uint8_t *dst, ptrdiff_t dst_stride, const uint8_t *src, ptrdiff_t src_stride,
148  int width, int height, const int16_t *filter, const int16_t *clip, int vb_pos);
149  void (*filter_cc)(uint8_t *dst, ptrdiff_t dst_stride, const uint8_t *luma, ptrdiff_t luma_stride,
150  int width, int height, int hs, int vs, const int16_t *filter, int vb_pos);
151 
152  void (*classify)(int *class_idx, int *transpose_idx, const uint8_t *src, ptrdiff_t src_stride, int width, int height,
153  int vb_pos, int *gradient_tmp);
154  void (*recon_coeff_and_clip)(int16_t *coeff, int16_t *clip, const int *class_idx, const int *transpose_idx, int size,
155  const int16_t *coeff_set, const uint8_t *clip_idx_set, const uint8_t *class_to_filt);
157 
158 typedef struct VVCDSPContext {
166 } VVCDSPContext;
167 
168 void ff_vvc_dsp_init(VVCDSPContext *hpc, int bit_depth);
169 
170 void ff_vvc_dsp_init_x86(VVCDSPContext *hpc, const int bit_depth);
171 
172 #endif /* AVCODEC_VVC_VVCDSP_H */
VVCALFDSPContext::recon_coeff_and_clip
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)
Definition: vvcdsp.h:154
DCT8
@ DCT8
Definition: vvcdsp.h:33
VVCLMCSDSPContext::filter
void(* filter)(uint8_t *dst, ptrdiff_t dst_stride, int width, int height, const void *lut)
Definition: vvcdsp.h:122
VVCIntraDSPContext::pred_v
void(* pred_v)(uint8_t *src, const uint8_t *_top, int w, int h, ptrdiff_t stride)
Definition: vvcdsp.h:104
VVCIntraDSPContext::pred_dc
void(* pred_dc)(uint8_t *src, const uint8_t *top, const uint8_t *left, int w, int h, ptrdiff_t stride)
Definition: vvcdsp.h:103
TX_SIZE_16
@ TX_SIZE_16
Definition: vvcdsp.h:41
src1
const pixel * src1
Definition: h264pred_template.c:421
VVCInterDSPContext::put_uni_w
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)
Definition: vvcdsp.h:56
step
trying all byte sequences megabyte in length and selecting the best looking sequence will yield cases to try But a word about which is also called distortion Distortion can be quantified by almost any quality measurement one chooses the sum of squared differences is used but more complex methods that consider psychovisual effects can be used as well It makes no difference in this discussion First step
Definition: rate_distortion.txt:58
w
uint8_t w
Definition: llviddspenc.c:38
VVCInterDSPContext::dmvr
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)
Definition: vvcdsp.h:90
TxType
TxType
Definition: vvcdsp.h:30
VVCDSPContext::itx
VVCItxDSPContext itx
Definition: vvcdsp.h:161
VVCInterDSPContext::apply_bdof
void(* apply_bdof)(uint8_t *dst, ptrdiff_t dst_stride, int16_t *src0, int16_t *src1, int block_w, int block_h)
Definition: vvcdsp.h:87
VVCItxDSPContext::add_residual
void(* add_residual)(uint8_t *dst, const int *res, int width, int height, ptrdiff_t stride)
Definition: vvcdsp.h:113
VVCInterDSPContext::sad
int(* sad)(const int16_t *src0, const int16_t *src1, int dx, int dy, int block_w, int block_h)
Definition: vvcdsp.h:89
bit_depth
static void bit_depth(AudioStatsContext *s, const uint64_t *const mask, uint8_t *depth)
Definition: af_astats.c:245
VVCIntraDSPContext::intra_cclm_pred
void(* intra_cclm_pred)(const struct VVCLocalContext *lc, int x0, int y0, int w, int h)
Definition: vvcdsp.h:97
VVCItxDSPContext
Definition: vvcdsp.h:112
ff_vvc_dsp_init
void ff_vvc_dsp_init(VVCDSPContext *hpc, int bit_depth)
Definition: vvcdsp.c:98
VVCInterDSPContext::w_avg
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 o0, int o1)
Definition: vvcdsp.h:63
N_TX_SIZE
@ N_TX_SIZE
Definition: vvcdsp.h:44
VVCInterDSPContext::apply_prof_uni
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)
Definition: vvcdsp.h:82
VVCSAODSPContext::band_filter
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)
Definition: vvcdsp.h:136
VVCLFDSPContext::filter_luma
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)
Definition: vvcdsp.h:128
VVCDSPContext::inter
VVCInterDSPContext inter
Definition: vvcdsp.h:159
VVCALFDSPContext::filter_cc
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)
Definition: vvcdsp.h:149
clip
clip
Definition: af_crystalizer.c:121
width
#define width
TX_SIZE_2
@ TX_SIZE_2
Definition: vvcdsp.h:38
VVCALFDSPContext
Definition: vvcdsp.h:146
VVCIntraDSPContext::pred_planar
void(* pred_planar)(uint8_t *src, const uint8_t *top, const uint8_t *left, int w, int h, ptrdiff_t stride)
Definition: vvcdsp.h:100
VVCIntraDSPContext
Definition: vvcdsp.h:96
VVCDSPContext::lf
VVCLFDSPContext lf
Definition: vvcdsp.h:163
VVCIntraDSPContext::lmcs_scale_chroma
void(* lmcs_scale_chroma)(struct VVCLocalContext *lc, int *dst, const int *coeff, int w, int h, int x0_cu, int y0_cu)
Definition: vvcdsp.h:98
DCT2
@ DCT2
Definition: vvcdsp.h:31
VVCInterDSPContext::avg
void(* avg)(uint8_t *dst, ptrdiff_t dst_stride, const int16_t *src0, const int16_t *src1, int width, int height)
Definition: vvcdsp.h:60
VVCItxDSPContext::add_residual_joint
void(* add_residual_joint)(uint8_t *dst, const int *res, int width, int height, ptrdiff_t stride, int c_sign, int shift)
Definition: vvcdsp.h:114
TX_SIZE_4
@ TX_SIZE_4
Definition: vvcdsp.h:39
VVCLocalContext
Definition: vvc_ctu.h:368
VVCInterDSPContext::bdof_fetch_samples
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)
Definition: vvcdsp.h:75
N_TX_TYPE
@ N_TX_TYPE
Definition: vvcdsp.h:34
ff_vvc_dsp_init_x86
void ff_vvc_dsp_init_x86(VVCDSPContext *hpc, const int bit_depth)
Definition: vvcdsp_init.c:210
VVCSAODSPContext
Definition: vvcdsp.h:135
VVCItxDSPContext::transform_bdpcm
void(* transform_bdpcm)(int *coeffs, int width, int height, int vertical, int log2_transform_range)
Definition: vvcdsp.h:118
VVCSAODSPContext::edge_restore
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)
Definition: vvcdsp.h:141
VVCDSPContext::intra
VVCIntraDSPContext intra
Definition: vvcdsp.h:160
VVCIntraDSPContext::pred_angular_h
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)
Definition: vvcdsp.h:108
VVCALFDSPContext::filter
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)
Definition: vvcdsp.h:147
TxSize
TxSize
Definition: vvcdsp.h:37
VVCLFDSPContext::filter_chroma
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)
Definition: vvcdsp.h:130
VVCInterDSPContext::apply_prof
void(* apply_prof)(int16_t *dst, const int16_t *src, const int16_t *diff_mv_x, const int16_t *diff_mv_y)
Definition: vvcdsp.h:80
shift
static int shift(int a, int b)
Definition: bonk.c:262
VVCLMCSDSPContext
Definition: vvcdsp.h:121
VVCInterDSPContext::prof_grad_filter
void(* prof_grad_filter)(int16_t *gradient_h, int16_t *gradient_v, const ptrdiff_t gradient_stride, const int16_t *src, const ptrdiff_t src_stride, int width, int height, const int pad)
Definition: vvcdsp.h:78
size
int size
Definition: twinvq_data.h:10344
height
#define height
VVCSAODSPContext::edge_filter
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)
Definition: vvcdsp.h:139
VVCDSPContext::sao
VVCSAODSPContext sao
Definition: vvcdsp.h:164
DST7
@ DST7
Definition: vvcdsp.h:32
VVCIntraDSPContext::intra_pred
void(* intra_pred)(const struct VVCLocalContext *lc, int x0, int y0, int w, int h, int c_idx)
Definition: vvcdsp.h:99
TX_SIZE_8
@ TX_SIZE_8
Definition: vvcdsp.h:40
VVCIntraDSPContext::pred_mip
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)
Definition: vvcdsp.h:101
VVCInterDSPContext::apply_prof_uni_w
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)
Definition: vvcdsp.h:84
weights
static const int weights[]
Definition: hevc_pel.c:32
VVCDSPContext::alf
VVCALFDSPContext alf
Definition: vvcdsp.h:165
SAOParams
Definition: hevcdsp.h:34
VVCALFDSPContext::classify
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)
Definition: vvcdsp.h:152
stride
#define stride
Definition: h264pred_template.c:537
left
Tag MUST be and< 10hcoeff half pel interpolation filter coefficients, hcoeff[0] are the 2 middle coefficients[1] are the next outer ones and so on, resulting in a filter like:...eff[2], hcoeff[1], hcoeff[0], hcoeff[0], hcoeff[1], hcoeff[2] ... the sign of the coefficients is not explicitly stored but alternates after each coeff and coeff[0] is positive, so ...,+,-,+,-,+,+,-,+,-,+,... hcoeff[0] is not explicitly stored but found by subtracting the sum of all stored coefficients with signs from 32 hcoeff[0]=32 - hcoeff[1] - hcoeff[2] - ... a good choice for hcoeff and htaps is htaps=6 hcoeff={40,-10, 2} an alternative which requires more computations at both encoder and decoder side and may or may not be better is htaps=8 hcoeff={42,-14, 6,-2}ref_frames minimum of the number of available reference frames and max_ref_frames for example the first frame after a key frame always has ref_frames=1spatial_decomposition_type wavelet type 0 is a 9/7 symmetric compact integer wavelet 1 is a 5/3 symmetric compact integer wavelet others are reserved stored as delta from last, last is reset to 0 if always_reset||keyframeqlog quality(logarithmic quantizer scale) stored as delta from last, last is reset to 0 if always_reset||keyframemv_scale stored as delta from last, last is reset to 0 if always_reset||keyframe FIXME check that everything works fine if this changes between framesqbias dequantization bias stored as delta from last, last is reset to 0 if always_reset||keyframeblock_max_depth maximum depth of the block tree stored as delta from last, last is reset to 0 if always_reset||keyframequant_table quantization tableHighlevel bitstream structure:==============================--------------------------------------------|Header|--------------------------------------------|------------------------------------|||Block0||||split?||||yes no||||......... intra?||||:Block01 :yes no||||:Block02 :....... ..........||||:Block03 ::y DC ::ref index:||||:Block04 ::cb DC ::motion x :||||......... :cr DC ::motion y :||||....... ..........|||------------------------------------||------------------------------------|||Block1|||...|--------------------------------------------|------------ ------------ ------------|||Y subbands||Cb subbands||Cr subbands||||--- ---||--- ---||--- ---|||||LL0||HL0||||LL0||HL0||||LL0||HL0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||LH0||HH0||||LH0||HH0||||LH0||HH0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HL1||LH1||||HL1||LH1||||HL1||LH1|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HH1||HL2||||HH1||HL2||||HH1||HL2|||||...||...||...|||------------ ------------ ------------|--------------------------------------------Decoding process:=================------------|||Subbands|------------||||------------|Intra DC||||LL0 subband prediction ------------|\ Dequantization ------------------- \||Reference frames|\ IDWT|------- -------|Motion \|||Frame 0||Frame 1||Compensation . OBMC v -------|------- -------|--------------. \------> Frame n output Frame Frame<----------------------------------/|...|------------------- Range Coder:============Binary Range Coder:------------------- The implemented range coder is an adapted version based upon "Range encoding: an algorithm for removing redundancy from a digitised message." by G. N. N. Martin. The symbols encoded by the Snow range coder are bits(0|1). The associated probabilities are not fix but change depending on the symbol mix seen so far. bit seen|new state ---------+----------------------------------------------- 0|256 - state_transition_table[256 - old_state];1|state_transition_table[old_state];state_transition_table={ 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 190, 191, 192, 194, 194, 195, 196, 197, 198, 199, 200, 201, 202, 202, 204, 205, 206, 207, 208, 209, 209, 210, 211, 212, 213, 215, 215, 216, 217, 218, 219, 220, 220, 222, 223, 224, 225, 226, 227, 227, 229, 229, 230, 231, 232, 234, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 248, 0, 0, 0, 0, 0, 0, 0};FIXME Range Coding of integers:------------------------- FIXME Neighboring Blocks:===================left and top are set to the respective blocks unless they are outside of the image in which case they are set to the Null block top-left is set to the top left block unless it is outside of the image in which case it is set to the left block if this block has no larger parent block or it is at the left side of its parent block and the top right block is not outside of the image then the top right block is used for top-right else the top-left block is used Null block y, cb, cr are 128 level, ref, mx and my are 0 Motion Vector Prediction:=========================1. the motion vectors of all the neighboring blocks are scaled to compensate for the difference of reference frames scaled_mv=(mv *(256 *(current_reference+1)/(mv.reference+1))+128)> the median of the scaled left
Definition: snow.txt:386
VVCInterDSPContext::put_uni
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)
Definition: vvcdsp.h:52
mode
mode
Definition: ebur128.h:83
VVCInterDSPContext::put_gpm
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)
Definition: vvcdsp.h:70
VVCLFDSPContext::ladf_level
int(* ladf_level[2/*h, v */])(const uint8_t *pix, ptrdiff_t stride)
Definition: vvcdsp.h:126
TX_SIZE_64
@ TX_SIZE_64
Definition: vvcdsp.h:43
VVCIntraDSPContext::pred_angular_v
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)
Definition: vvcdsp.h:106
VVCInterDSPContext
Definition: vvcdsp.h:47
src0
const pixel *const src0
Definition: h264pred_template.c:420
tc
#define tc
Definition: regdef.h:69
TX_SIZE_32
@ TX_SIZE_32
Definition: vvcdsp.h:42
VVCLFDSPContext
Definition: vvcdsp.h:125
VVCDSPContext::lmcs
VVCLMCSDSPContext lmcs
Definition: vvcdsp.h:162
src
INIT_CLIP pixel * src
Definition: h264pred_template.c:418
VVCInterDSPContext::put_ciip
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)
Definition: vvcdsp.h:67
int32_t
int32_t
Definition: audioconvert.c:56
VVCItxDSPContext::pred_residual_joint
void(* pred_residual_joint)(int *buf, int width, int height, int c_sign, int shift)
Definition: vvcdsp.h:115
coeff
static const double coeff[2][5]
Definition: vf_owdenoise.c:79
VVCItxDSPContext::itx
void(* itx[N_TX_TYPE][N_TX_SIZE])(int *coeffs, ptrdiff_t step, size_t nz)
Definition: vvcdsp.h:117
VVCIntraDSPContext::pred_h
void(* pred_h)(uint8_t *src, const uint8_t *_left, int w, int h, ptrdiff_t stride)
Definition: vvcdsp.h:105
h
h
Definition: vp9dsp_template.c:2038
VVCInterDSPContext::fetch_samples
void(* fetch_samples)(int16_t *dst, const uint8_t *src, ptrdiff_t src_stride, int x_frac, int y_frac)
Definition: vvcdsp.h:74
int
int
Definition: ffmpeg_filter.c:409
VVCInterDSPContext::put
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)
Definition: vvcdsp.h:48
VVCDSPContext
Definition: vvcdsp.h:158