FFmpeg
vp9dsp_loongarch.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021 Loongson Technology Corporation Limited
3  * Contributed by Hao Chen <chenhao@loongson.cn>
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 #ifndef AVCODEC_LOONGARCH_VP9DSP_LOONGARCH_H
23 #define AVCODEC_LOONGARCH_VP9DSP_LOONGARCH_H
24 
25 #include <stddef.h>
26 #include <stdint.h>
27 
28 #define VP9_8TAP_LOONGARCH_LSX_FUNC(SIZE, type, type_idx) \
29 void ff_put_8tap_##type##_##SIZE##h_lsx(uint8_t *dst, ptrdiff_t dststride, \
30  const uint8_t *src, \
31  ptrdiff_t srcstride, \
32  int h, int mx, int my); \
33  \
34 void ff_put_8tap_##type##_##SIZE##v_lsx(uint8_t *dst, ptrdiff_t dststride, \
35  const uint8_t *src, \
36  ptrdiff_t srcstride, \
37  int h, int mx, int my); \
38  \
39 void ff_put_8tap_##type##_##SIZE##hv_lsx(uint8_t *dst, ptrdiff_t dststride, \
40  const uint8_t *src, \
41  ptrdiff_t srcstride, \
42  int h, int mx, int my); \
43  \
44 void ff_avg_8tap_##type##_##SIZE##h_lsx(uint8_t *dst, ptrdiff_t dststride, \
45  const uint8_t *src, \
46  ptrdiff_t srcstride, \
47  int h, int mx, int my); \
48  \
49 void ff_avg_8tap_##type##_##SIZE##v_lsx(uint8_t *dst, ptrdiff_t dststride, \
50  const uint8_t *src, \
51  ptrdiff_t srcstride, \
52  int h, int mx, int my); \
53  \
54 void ff_avg_8tap_##type##_##SIZE##hv_lsx(uint8_t *dst, ptrdiff_t dststride, \
55  const uint8_t *src, \
56  ptrdiff_t srcstride, \
57  int h, int mx, int my);
58 
59 #define VP9_COPY_LOONGARCH_LSX_FUNC(SIZE) \
60 void ff_copy##SIZE##_lsx(uint8_t *dst, ptrdiff_t dststride, \
61  const uint8_t *src, ptrdiff_t srcstride, \
62  int h, int mx, int my); \
63  \
64 void ff_avg##SIZE##_lsx(uint8_t *dst, ptrdiff_t dststride, \
65  const uint8_t *src, ptrdiff_t srcstride, \
66  int h, int mx, int my);
67 
73 
79 
85 
90 
91 #undef VP9_8TAP_LOONGARCH_LSX_FUNC
92 #undef VP9_COPY_LOONGARCH_LSX_FUNC
93 
94 void ff_vert_16x16_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left,
95  const uint8_t *top);
96 void ff_vert_32x32_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left,
97  const uint8_t *top);
98 void ff_hor_16x16_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left,
99  const uint8_t *top);
100 void ff_hor_32x32_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left,
101  const uint8_t *top);
102 void ff_dc_4x4_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left,
103  const uint8_t *top);
104 void ff_dc_8x8_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left,
105  const uint8_t *top);
106 void ff_dc_16x16_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left,
107  const uint8_t *top);
108 void ff_dc_32x32_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left,
109  const uint8_t *top);
110 void ff_dc_left_4x4_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left,
111  const uint8_t *top);
112 void ff_dc_left_8x8_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left,
113  const uint8_t *top);
114 void ff_dc_left_16x16_lsx(uint8_t *dst, ptrdiff_t stride,
115  const uint8_t *left, const uint8_t *top);
116 void ff_dc_left_32x32_lsx(uint8_t *dst, ptrdiff_t stride,
117  const uint8_t *left, const uint8_t *top);
118 void ff_dc_top_4x4_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left,
119  const uint8_t *top);
120 void ff_dc_top_8x8_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left,
121  const uint8_t *top);
122 void ff_dc_top_16x16_lsx(uint8_t *dst, ptrdiff_t stride,
123  const uint8_t *left, const uint8_t *top);
124 void ff_dc_top_32x32_lsx(uint8_t *dst, ptrdiff_t stride,
125  const uint8_t *left, const uint8_t *top);
126 void ff_dc_128_16x16_lsx(uint8_t *dst, ptrdiff_t stride,
127  const uint8_t *left, const uint8_t *top);
128 void ff_dc_128_32x32_lsx(uint8_t *dst, ptrdiff_t stride,
129  const uint8_t *left, const uint8_t *top);
130 void ff_dc_127_16x16_lsx(uint8_t *dst, ptrdiff_t stride,
131  const uint8_t *left, const uint8_t *top);
132 void ff_dc_127_32x32_lsx(uint8_t *dst, ptrdiff_t stride,
133  const uint8_t *left, const uint8_t *top);
134 void ff_dc_129_16x16_lsx(uint8_t *dst, ptrdiff_t stride,
135  const uint8_t *left, const uint8_t *top);
136 void ff_dc_129_32x32_lsx(uint8_t *dst, ptrdiff_t stride,
137  const uint8_t *left, const uint8_t *top);
138 void ff_tm_4x4_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left,
139  const uint8_t *top);
140 void ff_tm_8x8_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left,
141  const uint8_t *top);
142 void ff_tm_16x16_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left,
143  const uint8_t *top);
144 void ff_tm_32x32_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left,
145  const uint8_t *top);
146 void ff_loop_filter_h_16_8_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e,
147  int32_t i, int32_t h);
148 void ff_loop_filter_v_16_8_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e,
149  int32_t i, int32_t h);
150 void ff_loop_filter_h_4_8_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e,
151  int32_t i, int32_t h);
152 void ff_loop_filter_v_4_8_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e,
153  int32_t i, int32_t h);
154 void ff_loop_filter_h_44_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e,
155  int32_t i, int32_t h);
156 void ff_loop_filter_v_44_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e,
157  int32_t i, int32_t h);
158 void ff_loop_filter_h_8_8_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e,
159  int32_t i, int32_t h);
160 void ff_loop_filter_v_8_8_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e,
161  int32_t i, int32_t h);
162 void ff_loop_filter_h_88_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e,
163  int32_t i, int32_t h);
164 void ff_loop_filter_v_88_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e,
165  int32_t i, int32_t h);
166 void ff_loop_filter_h_84_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e,
167  int32_t i, int32_t h);
168 void ff_loop_filter_v_84_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e,
169  int32_t i, int32_t h);
170 void ff_loop_filter_h_48_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e,
171  int32_t i, int32_t h);
172 void ff_loop_filter_v_48_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e,
173  int32_t i, int32_t h);
174 void ff_loop_filter_h_16_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e,
175  int32_t i, int32_t h);
176 void ff_loop_filter_v_16_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e,
177  int32_t i, int32_t h);
178 void ff_idct_idct_8x8_add_lsx(uint8_t *dst, ptrdiff_t stride,
179  int16_t *block, int eob);
180 void ff_idct_idct_16x16_add_lsx(uint8_t *dst, ptrdiff_t stride,
181  int16_t *block, int eob);
182 void ff_idct_idct_32x32_add_lsx(uint8_t *dst, ptrdiff_t stride,
183  int16_t *block, int eob);
184 
185 #endif /* AVCODEC_LOONGARCH_VP9DSP_LOONGARCH_H */
ff_dc_129_16x16_lsx
void ff_dc_129_16x16_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, const uint8_t *top)
ff_loop_filter_h_16_8_lsx
void ff_loop_filter_h_16_8_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, int32_t i, int32_t h)
Definition: vp9_lpf_lsx.c:2612
ff_dc_left_4x4_lsx
void ff_dc_left_4x4_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, const uint8_t *top)
ff_loop_filter_v_88_16_lsx
void ff_loop_filter_v_88_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, int32_t i, int32_t h)
Definition: vp9_lpf_lsx.c:374
ff_idct_idct_8x8_add_lsx
void ff_idct_idct_8x8_add_lsx(uint8_t *dst, ptrdiff_t stride, int16_t *block, int eob)
Definition: vp9_idct_lsx.c:1370
ff_loop_filter_v_44_16_lsx
void ff_loop_filter_v_44_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, int32_t i, int32_t h)
Definition: vp9_lpf_lsx.c:262
ff_tm_8x8_lsx
void ff_tm_8x8_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, const uint8_t *top)
Definition: vp9_intra_lsx.c:461
ff_dc_129_32x32_lsx
void ff_dc_129_32x32_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, const uint8_t *top)
ff_loop_filter_v_8_8_lsx
void ff_loop_filter_v_8_8_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, int32_t i, int32_t h)
Definition: vp9_lpf_lsx.c:302
ff_dc_4x4_lsx
void ff_dc_4x4_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, const uint8_t *top)
Definition: vp9_intra_lsx.c:181
ff_hor_32x32_lsx
void ff_hor_32x32_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, const uint8_t *top)
Definition: vp9_intra_lsx.c:131
ff_dc_127_32x32_lsx
void ff_dc_127_32x32_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, const uint8_t *top)
FILTER_8TAP_SHARP
@ FILTER_8TAP_SHARP
Definition: vp9.h:67
ff_loop_filter_h_88_16_lsx
void ff_loop_filter_h_88_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, int32_t i, int32_t h)
Definition: vp9_lpf_lsx.c:1594
ff_dc_left_8x8_lsx
void ff_dc_left_8x8_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, const uint8_t *top)
ff_idct_idct_32x32_add_lsx
void ff_idct_idct_32x32_add_lsx(uint8_t *dst, ptrdiff_t stride, int16_t *block, int eob)
Definition: vp9_idct_lsx.c:1399
ff_loop_filter_h_48_16_lsx
void ff_loop_filter_h_48_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, int32_t i, int32_t h)
Definition: vp9_lpf_lsx.c:1954
ff_loop_filter_h_16_16_lsx
void ff_loop_filter_h_16_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, int32_t i, int32_t h)
Definition: vp9_lpf_lsx.c:3118
ff_hor_16x16_lsx
void ff_hor_16x16_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, const uint8_t *top)
Definition: vp9_intra_lsx.c:99
ff_tm_4x4_lsx
void ff_tm_4x4_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, const uint8_t *top)
Definition: vp9_intra_lsx.c:431
ff_dc_top_4x4_lsx
void ff_dc_top_4x4_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, const uint8_t *top)
ff_loop_filter_v_16_8_lsx
void ff_loop_filter_v_16_8_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, int32_t i, int32_t h)
Definition: vp9_lpf_lsx.c:1096
VP9_8TAP_LOONGARCH_LSX_FUNC
#define VP9_8TAP_LOONGARCH_LSX_FUNC(SIZE, type, type_idx)
Definition: vp9dsp_loongarch.h:28
ff_dc_128_32x32_lsx
void ff_dc_128_32x32_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, const uint8_t *top)
ff_idct_idct_16x16_add_lsx
void ff_idct_idct_16x16_add_lsx(uint8_t *dst, ptrdiff_t stride, int16_t *block, int eob)
Definition: vp9_idct_lsx.c:1384
ff_dc_16x16_lsx
void ff_dc_16x16_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, const uint8_t *top)
Definition: vp9_intra_lsx.c:290
FILTER_8TAP_REGULAR
@ FILTER_8TAP_REGULAR
Definition: vp9.h:66
ff_loop_filter_v_16_16_lsx
void ff_loop_filter_v_16_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, int32_t i, int32_t h)
Definition: vp9_lpf_lsx.c:1080
ff_dc_top_32x32_lsx
void ff_dc_top_32x32_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, const uint8_t *top)
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:269
FILTER_8TAP_SMOOTH
@ FILTER_8TAP_SMOOTH
Definition: vp9.h:65
ff_dc_128_16x16_lsx
void ff_dc_128_16x16_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, const uint8_t *top)
ff_loop_filter_h_8_8_lsx
void ff_loop_filter_h_8_8_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, int32_t i, int32_t h)
Definition: vp9_lpf_lsx.c:1476
stride
#define stride
Definition: h264pred_template.c:537
ff_dc_32x32_lsx
void ff_dc_32x32_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, const uint8_t *top)
Definition: vp9_intra_lsx.c:341
ff_loop_filter_v_48_16_lsx
void ff_loop_filter_v_48_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, int32_t i, int32_t h)
Definition: vp9_lpf_lsx.c:547
ff_dc_127_16x16_lsx
void ff_dc_127_16x16_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, const uint8_t *top)
ff_loop_filter_h_4_8_lsx
void ff_loop_filter_h_4_8_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, int32_t i, int32_t h)
Definition: vp9_lpf_lsx.c:1350
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
ff_loop_filter_v_4_8_lsx
void ff_loop_filter_v_4_8_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, int32_t i, int32_t h)
Definition: vp9_lpf_lsx.c:229
ff_loop_filter_v_84_16_lsx
void ff_loop_filter_v_84_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, int32_t i, int32_t h)
Definition: vp9_lpf_lsx.c:465
ff_dc_top_8x8_lsx
void ff_dc_top_8x8_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, const uint8_t *top)
ff_dc_left_32x32_lsx
void ff_dc_left_32x32_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, const uint8_t *top)
ff_dc_8x8_lsx
void ff_dc_8x8_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, const uint8_t *top)
Definition: vp9_intra_lsx.c:226
ff_loop_filter_h_84_16_lsx
void ff_loop_filter_h_84_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, int32_t i, int32_t h)
Definition: vp9_lpf_lsx.c:1779
ff_loop_filter_h_44_16_lsx
void ff_loop_filter_h_44_16_lsx(uint8_t *dst, ptrdiff_t stride, int32_t e, int32_t i, int32_t h)
Definition: vp9_lpf_lsx.c:1396
ff_vert_16x16_lsx
void ff_vert_16x16_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, const uint8_t *top)
Definition: vp9_intra_lsx.c:70
ff_dc_left_16x16_lsx
void ff_dc_left_16x16_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, const uint8_t *top)
smooth
static float smooth(DeshakeOpenCLContext *deshake_ctx, float *gauss_kernel, int length, float max_val, AVFifo *values)
Definition: vf_deshake_opencl.c:889
int32_t
int32_t
Definition: audioconvert.c:56
block
The exact code depends on how similar the blocks are and how related they are to the block
Definition: filter_design.txt:207
ff_vert_32x32_lsx
void ff_vert_32x32_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, const uint8_t *top)
Definition: vp9_intra_lsx.c:85
ff_dc_top_16x16_lsx
void ff_dc_top_16x16_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, const uint8_t *top)
h
h
Definition: vp9dsp_template.c:2038
ff_tm_16x16_lsx
void ff_tm_16x16_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, const uint8_t *top)
Definition: vp9_intra_lsx.c:510
VP9_COPY_LOONGARCH_LSX_FUNC
#define VP9_COPY_LOONGARCH_LSX_FUNC(SIZE)
Definition: vp9dsp_loongarch.h:59
ff_tm_32x32_lsx
void ff_tm_32x32_lsx(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, const uint8_t *top)
Definition: vp9_intra_lsx.c:595