FFmpeg
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
dsp.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_DSP_H
25 #define AVCODEC_VVC_DSP_H
26 
27 #include <stdint.h>
28 #include <stddef.h>
29 
30 enum VVCTxType {
35 };
36 
37 enum VVCTxSize {
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 (*put_scaled[2 /* luma, chroma */][7 /* log2(width) - 1 */])(
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);
63 
64  void (*put_uni_scaled[2 /* luma, chroma */][7 /* log2(width) - 1 */])(
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);
67 
68  void (*put_uni_w_scaled[2 /* luma, chroma */][7 /* log2(width) - 1 */])(
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,
71  int width);
72 
73  void (*avg)(uint8_t *dst, ptrdiff_t dst_stride,
74  const int16_t *src0, const int16_t *src1, int width, int height);
75 
76  void (*w_avg)(uint8_t *_dst, const ptrdiff_t _dst_stride,
77  const int16_t *src0, const int16_t *src1, int width, int height,
78  int denom, int w0, int w1, int o0, int o1);
79 
80  void (*put_ciip)(uint8_t *dst, ptrdiff_t dst_stride, int width, int height,
81  const uint8_t *inter, ptrdiff_t inter_stride, int inter_weight);
82 
83  void (*put_gpm)(uint8_t *dst, ptrdiff_t dst_stride, int width, int height,
84  const int16_t *src0, const int16_t *src1,
85  const uint8_t *weights, int step_x, int step_y);
86 
87  void (*fetch_samples)(int16_t *dst, const uint8_t *src, ptrdiff_t src_stride, int x_frac, int y_frac);
88  void (*bdof_fetch_samples)(int16_t *dst, const uint8_t *src, ptrdiff_t src_stride, int x_frac, int y_frac,
89  int width, int height);
90 
91  void (*apply_prof)(int16_t *dst, const int16_t *src, const int16_t *diff_mv_x, const int16_t *diff_mv_y);
92 
93  void (*apply_prof_uni)(uint8_t *dst, ptrdiff_t dst_stride, const int16_t *src,
94  const int16_t *diff_mv_x, const int16_t *diff_mv_y);
95  void (*apply_prof_uni_w)(uint8_t *dst, const ptrdiff_t dst_stride, const int16_t *src,
96  const int16_t *diff_mv_x, const int16_t *diff_mv_y, int denom, int wx, int ox);
97 
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);
99 
100  int (*sad)(const int16_t *src0, const int16_t *src1, int dx, int dy, int block_w, int block_h);
101  void (*dmvr[2][2])(int16_t *dst, const uint8_t *src, ptrdiff_t src_stride, int height,
102  intptr_t mx, intptr_t my, int width);
104 
105 struct VVCLocalContext;
106 
107 typedef struct VVCIntraDSPContext {
108  void (*intra_cclm_pred)(const struct VVCLocalContext *lc, int x0, int y0, int w, int h);
109  void (*lmcs_scale_chroma)(struct VVCLocalContext *lc, int *coeff, int w, int h, int x0_cu, int y0_cu);
110  void (*intra_pred)(const struct VVCLocalContext *lc, int x0, int y0, int w, int h, int c_idx);
111  void (*pred_planar)(uint8_t *src, const uint8_t *top, const uint8_t *left, int w, int h, ptrdiff_t stride);
112  void (*pred_mip)(uint8_t *src, const uint8_t *top, const uint8_t *left, int w, int h, ptrdiff_t stride,
113  int mode_id, int is_transpose);
114  void (*pred_dc)(uint8_t *src, const uint8_t *top, const uint8_t *left, int w, int h, ptrdiff_t stride);
115  void (*pred_v)(uint8_t *src, const uint8_t *_top, int w, int h, ptrdiff_t stride);
116  void (*pred_h)(uint8_t *src, const uint8_t *_left, int w, int h, ptrdiff_t stride);
117  void (*pred_angular_v)(uint8_t *src, const uint8_t *_top, const uint8_t *_left,
118  int w, int h, ptrdiff_t stride, int c_idx, int mode, int ref_idx, int filter_flag, int need_pdpc);
119  void (*pred_angular_h)(uint8_t *src, const uint8_t *_top, const uint8_t *_left, int w, int h, ptrdiff_t stride,
120  int c_idx, int mode, int ref_idx, int filter_flag, int need_pdpc);
122 
123 typedef struct VVCItxDSPContext {
124  void (*add_residual)(uint8_t *dst, const int *res, int width, int height, ptrdiff_t stride);
125  void (*pred_residual_joint)(int *dst, const int *src, int width, int height, int c_sign, int shift);
126 
127  void (*itx[VVC_N_TX_TYPE][VVC_N_TX_SIZE])(int *coeffs, ptrdiff_t step, size_t nz);
128  void (*transform_bdpcm)(int *coeffs, int width, int height, int vertical, int log2_transform_range);
129 
130  void (*adaptive_color_transform)(int *y, int *u, int *v, int width, int height);
132 
133 typedef struct VVCLMCSDSPContext {
134  void (*filter)(uint8_t *dst, ptrdiff_t dst_stride, int width, int height, const void *lut);
136 
137 typedef struct VVCLFDSPContext {
138  int (*ladf_level[2 /* h, v */])(const uint8_t *pix, ptrdiff_t stride);
139 
140  void (*filter_luma[2 /* h, v */])(uint8_t *pix, ptrdiff_t stride, const int32_t *beta, const int32_t *tc,
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);
142  void (*filter_chroma[2 /* h, v */])(uint8_t *pix, ptrdiff_t stride, const int32_t *beta, const int32_t *tc,
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);
145 
146 struct SAOParams;
147 typedef struct VVCSAODSPContext {
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);
150  /* implicit src_stride parameter has value of 2 * MAX_PB_SIZE + AV_INPUT_BUFFER_PADDING_SIZE */
151  void (*edge_filter[9])(uint8_t *dst /* align 16 */, const uint8_t *src /* align 32 */, ptrdiff_t dst_stride,
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,
154  const struct SAOParams *sao, const int *borders, int width, int height, int c_idx,
155  const uint8_t *vert_edge, const uint8_t *horiz_edge, const uint8_t *diag_edge);
157 
158 typedef struct VVCALFDSPContext {
159  void (*filter[2 /* luma, chroma */])(uint8_t *dst, ptrdiff_t dst_stride, const uint8_t *src, ptrdiff_t src_stride,
160  int width, int height, const int16_t *filter, const int16_t *clip, int vb_pos);
161  void (*filter_cc)(uint8_t *dst, ptrdiff_t dst_stride, const uint8_t *luma, ptrdiff_t luma_stride,
162  int width, int height, int hs, int vs, const int16_t *filter, int vb_pos);
163 
164  void (*classify)(int *class_idx, int *transpose_idx, const uint8_t *src, ptrdiff_t src_stride, int width, int height,
165  int vb_pos, int *gradient_tmp);
166  void (*recon_coeff_and_clip)(int16_t *coeff, int16_t *clip, const int *class_idx, const int *transpose_idx, int size,
167  const int16_t *coeff_set, const uint8_t *clip_idx_set, const uint8_t *class_to_filt);
169 
170 typedef struct VVCDSPContext {
178 } VVCDSPContext;
179 
180 void ff_vvc_dsp_init(VVCDSPContext *hpc, int bit_depth);
181 
182 void ff_vvc_dsp_init_aarch64(VVCDSPContext *hpc, const int bit_depth);
183 void ff_vvc_dsp_init_riscv(VVCDSPContext *hpc, const int bit_depth);
184 void ff_vvc_dsp_init_x86(VVCDSPContext *hpc, const int bit_depth);
185 
186 #endif /* AVCODEC_VVC_DSP_H */
_dst
uint8_t * _dst
Definition: dsp.h:56
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: dsp.h:166
VVC_N_TX_TYPE
@ VVC_N_TX_TYPE
Definition: dsp.h:34
VVCLMCSDSPContext::filter
void(* filter)(uint8_t *dst, ptrdiff_t dst_stride, int width, int height, const void *lut)
Definition: dsp.h:134
VVC_DCT8
@ VVC_DCT8
Definition: dsp.h:33
VVCIntraDSPContext::pred_v
void(* pred_v)(uint8_t *src, const uint8_t *_top, int w, int h, ptrdiff_t stride)
Definition: dsp.h:115
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: dsp.h:114
VVCInterDSPContext::put_scaled
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)
Definition: dsp.h:60
src1
const pixel * src1
Definition: h264pred_template.c:420
src
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t const uint8_t * src
Definition: dsp.h:88
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: dsp.h:56
VVC_DCT2
@ VVC_DCT2
Definition: dsp.h:31
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: dsp.h:101
VVCDSPContext::itx
VVCItxDSPContext itx
Definition: dsp.h:173
height
uint8_t ptrdiff_t const uint8_t ptrdiff_t int height
Definition: dsp.h:57
VVC_TX_SIZE_4
@ VVC_TX_SIZE_4
Definition: dsp.h:39
VVC_N_TX_SIZE
@ VVC_N_TX_SIZE
Definition: dsp.h:44
VVCItxDSPContext::add_residual
void(* add_residual)(uint8_t *dst, const int *res, int width, int height, ptrdiff_t stride)
Definition: dsp.h:124
VVCInterDSPContext::sad
int(* sad)(const int16_t *src0, const int16_t *src1, int dx, int dy, int block_w, int block_h)
Definition: dsp.h:100
bit_depth
static void bit_depth(AudioStatsContext *s, const uint64_t *const mask, uint8_t *depth)
Definition: af_astats.c:246
VVCIntraDSPContext::intra_cclm_pred
void(* intra_cclm_pred)(const struct VVCLocalContext *lc, int x0, int y0, int w, int h)
Definition: dsp.h:108
VVCItxDSPContext
Definition: dsp.h:123
mx
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t mx
Definition: dsp.h:57
u
#define u(width, name, range_min, range_max)
Definition: cbs_apv.c:83
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: dsp.h:76
VVCItxDSPContext::pred_residual_joint
void(* pred_residual_joint)(int *dst, const int *src, int width, int height, int c_sign, int shift)
Definition: dsp.h:125
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: dsp.h:93
ff_vvc_dsp_init
void ff_vvc_dsp_init(VVCDSPContext *hpc, int bit_depth)
Definition: dsp.c:86
VVC_TX_SIZE_2
@ VVC_TX_SIZE_2
Definition: dsp.h:38
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: dsp.h:148
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: dsp.h:140
ff_vvc_dsp_init_riscv
void ff_vvc_dsp_init_riscv(VVCDSPContext *hpc, const int bit_depth)
Definition: dsp_init.c:82
VVCDSPContext::inter
VVCInterDSPContext inter
Definition: dsp.h:171
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: dsp.h:161
VVCItxDSPContext::adaptive_color_transform
void(* adaptive_color_transform)(int *y, int *u, int *v, int width, int height)
Definition: dsp.h:130
clip
clip
Definition: af_crystalizer.c:122
VVC_TX_SIZE_16
@ VVC_TX_SIZE_16
Definition: dsp.h:41
VVCALFDSPContext
Definition: dsp.h:158
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: dsp.h:111
VVCIntraDSPContext
Definition: dsp.h:107
my
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t my
Definition: dsp.h:57
VVCDSPContext::lf
VVCLFDSPContext lf
Definition: dsp.h:175
VVCInterDSPContext::avg
void(* avg)(uint8_t *dst, ptrdiff_t dst_stride, const int16_t *src0, const int16_t *src1, int width, int height)
Definition: dsp.h:73
width
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int width
Definition: dsp.h:57
VVCLocalContext
Definition: ctu.h:384
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: dsp.h:88
VVCInterDSPContext::apply_bdof
void(* apply_bdof)(uint8_t *dst, ptrdiff_t dst_stride, const int16_t *src0, const int16_t *src1, int block_w, int block_h)
Definition: dsp.h:98
VVCSAODSPContext
Definition: dsp.h:147
ff_vvc_dsp_init_x86
void ff_vvc_dsp_init_x86(VVCDSPContext *hpc, const int bit_depth)
Definition: dsp_init.c:347
VVCItxDSPContext::transform_bdpcm
void(* transform_bdpcm)(int *coeffs, int width, int height, int vertical, int log2_transform_range)
Definition: dsp.h:128
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: dsp.h:153
VVCDSPContext::intra
VVCIntraDSPContext intra
Definition: dsp.h:172
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: dsp.h:119
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: dsp.h:159
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: dsp.h:142
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: dsp.h:91
shift
static int shift(int a, int b)
Definition: bonk.c:261
dst
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition: dsp.h:87
VVCLMCSDSPContext
Definition: dsp.h:133
VVCIntraDSPContext::lmcs_scale_chroma
void(* lmcs_scale_chroma)(struct VVCLocalContext *lc, int *coeff, int w, int h, int x0_cu, int y0_cu)
Definition: dsp.h:109
size
int size
Definition: twinvq_data.h:10344
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: dsp.h:151
VVCDSPContext::sao
VVCSAODSPContext sao
Definition: dsp.h:176
VVCIntraDSPContext::intra_pred
void(* intra_pred)(const struct VVCLocalContext *lc, int x0, int y0, int w, int h, int c_idx)
Definition: dsp.h:110
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: dsp.h:112
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: dsp.h:95
weights
static const int weights[]
Definition: hevc_pel.c:32
VVC_TX_SIZE_32
@ VVC_TX_SIZE_32
Definition: dsp.h:42
VVCDSPContext::alf
VVCALFDSPContext alf
Definition: dsp.h:177
hf
uint8_t ptrdiff_t const uint8_t ptrdiff_t int const int8_t * hf
Definition: dsp.h:258
SAOParams
Definition: dsp.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: dsp.h:164
VVC_TX_SIZE_8
@ VVC_TX_SIZE_8
Definition: dsp.h:40
stride
#define stride
Definition: h264pred_template.c:536
VVCItxDSPContext::itx
void(* itx[VVC_N_TX_TYPE][VVC_N_TX_SIZE])(int *coeffs, ptrdiff_t step, size_t nz)
Definition: dsp.h:127
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: dsp.h:52
mode
mode
Definition: ebur128.h:83
ff_vvc_dsp_init_aarch64
void ff_vvc_dsp_init_aarch64(VVCDSPContext *hpc, const int bit_depth)
Definition: dsp_init.c:117
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: dsp.h:83
VVCLFDSPContext::ladf_level
int(* ladf_level[2/*h, v */])(const uint8_t *pix, ptrdiff_t stride)
Definition: dsp.h:138
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: dsp.h:117
VVCInterDSPContext
Definition: dsp.h:47
src0
const pixel *const src0
Definition: h264pred_template.c:419
VVCTxSize
VVCTxSize
Definition: dsp.h:37
VVCInterDSPContext::put_uni_w_scaled
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)
Definition: dsp.h:68
VVCLFDSPContext
Definition: dsp.h:137
VVCDSPContext::lmcs
VVCLMCSDSPContext lmcs
Definition: dsp.h:174
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: dsp.h:80
VVC_TX_SIZE_64
@ VVC_TX_SIZE_64
Definition: dsp.h:43
VVCTxType
VVCTxType
Definition: dsp.h:30
int32_t
int32_t
Definition: audioconvert.c:56
VVC_DST7
@ VVC_DST7
Definition: dsp.h:32
coeff
static const double coeff[2][5]
Definition: vf_owdenoise.c:80
VVCIntraDSPContext::pred_h
void(* pred_h)(uint8_t *src, const uint8_t *_left, int w, int h, ptrdiff_t stride)
Definition: dsp.h:116
h
h
Definition: vp9dsp_template.c:2070
VVCInterDSPContext::fetch_samples
void(* fetch_samples)(int16_t *dst, const uint8_t *src, ptrdiff_t src_stride, int x_frac, int y_frac)
Definition: dsp.h:87
vf
uint8_t ptrdiff_t const uint8_t ptrdiff_t int const int8_t const int8_t * vf
Definition: dsp.h:258
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: dsp.h:48
VVCInterDSPContext::put_uni_scaled
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)
Definition: dsp.h:64
VVCDSPContext
Definition: dsp.h:170