1*09537850SAkhilesh Sanikop // Copyright 2021 The libgav1 Authors
2*09537850SAkhilesh Sanikop //
3*09537850SAkhilesh Sanikop // Licensed under the Apache License, Version 2.0 (the "License");
4*09537850SAkhilesh Sanikop // you may not use this file except in compliance with the License.
5*09537850SAkhilesh Sanikop // You may obtain a copy of the License at
6*09537850SAkhilesh Sanikop //
7*09537850SAkhilesh Sanikop // http://www.apache.org/licenses/LICENSE-2.0
8*09537850SAkhilesh Sanikop //
9*09537850SAkhilesh Sanikop // Unless required by applicable law or agreed to in writing, software
10*09537850SAkhilesh Sanikop // distributed under the License is distributed on an "AS IS" BASIS,
11*09537850SAkhilesh Sanikop // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*09537850SAkhilesh Sanikop // See the License for the specific language governing permissions and
13*09537850SAkhilesh Sanikop // limitations under the License.
14*09537850SAkhilesh Sanikop
15*09537850SAkhilesh Sanikop #include "src/dsp/intrapred_cfl.h"
16*09537850SAkhilesh Sanikop
17*09537850SAkhilesh Sanikop #include <algorithm>
18*09537850SAkhilesh Sanikop #include <cassert>
19*09537850SAkhilesh Sanikop #include <cstddef>
20*09537850SAkhilesh Sanikop #include <cstdint>
21*09537850SAkhilesh Sanikop #include <cstdlib>
22*09537850SAkhilesh Sanikop #include <cstring>
23*09537850SAkhilesh Sanikop
24*09537850SAkhilesh Sanikop #include "src/dsp/constants.h"
25*09537850SAkhilesh Sanikop #include "src/dsp/dsp.h"
26*09537850SAkhilesh Sanikop #include "src/utils/common.h"
27*09537850SAkhilesh Sanikop #include "src/utils/constants.h"
28*09537850SAkhilesh Sanikop
29*09537850SAkhilesh Sanikop namespace libgav1 {
30*09537850SAkhilesh Sanikop namespace dsp {
31*09537850SAkhilesh Sanikop namespace {
32*09537850SAkhilesh Sanikop
33*09537850SAkhilesh Sanikop constexpr TransformSize kTransformSizesLargerThan32x32[] = {
34*09537850SAkhilesh Sanikop kTransformSize16x64, kTransformSize32x64, kTransformSize64x16,
35*09537850SAkhilesh Sanikop kTransformSize64x32, kTransformSize64x64};
36*09537850SAkhilesh Sanikop
37*09537850SAkhilesh Sanikop //------------------------------------------------------------------------------
38*09537850SAkhilesh Sanikop // CflIntraPredictor_C
39*09537850SAkhilesh Sanikop
40*09537850SAkhilesh Sanikop // |luma| can be within +/-(((1 << bitdepth) - 1) << 3), inclusive.
41*09537850SAkhilesh Sanikop // |alpha| can be -16 to 16 (inclusive).
42*09537850SAkhilesh Sanikop template <int block_width, int block_height, int bitdepth, typename Pixel>
CflIntraPredictor_C(void * LIBGAV1_RESTRICT const dest,ptrdiff_t stride,const int16_t luma[kCflLumaBufferStride][kCflLumaBufferStride],const int alpha)43*09537850SAkhilesh Sanikop void CflIntraPredictor_C(
44*09537850SAkhilesh Sanikop void* LIBGAV1_RESTRICT const dest, ptrdiff_t stride,
45*09537850SAkhilesh Sanikop const int16_t luma[kCflLumaBufferStride][kCflLumaBufferStride],
46*09537850SAkhilesh Sanikop const int alpha) {
47*09537850SAkhilesh Sanikop auto* dst = static_cast<Pixel*>(dest);
48*09537850SAkhilesh Sanikop const int dc = dst[0];
49*09537850SAkhilesh Sanikop stride /= sizeof(Pixel);
50*09537850SAkhilesh Sanikop const int max_value = (1 << bitdepth) - 1;
51*09537850SAkhilesh Sanikop for (int y = 0; y < block_height; ++y) {
52*09537850SAkhilesh Sanikop for (int x = 0; x < block_width; ++x) {
53*09537850SAkhilesh Sanikop assert(luma[y][x] >= -(((1 << bitdepth) - 1) << 3));
54*09537850SAkhilesh Sanikop assert(luma[y][x] <= ((1 << bitdepth) - 1) << 3);
55*09537850SAkhilesh Sanikop dst[x] = Clip3(dc + RightShiftWithRoundingSigned(alpha * luma[y][x], 6),
56*09537850SAkhilesh Sanikop 0, max_value);
57*09537850SAkhilesh Sanikop }
58*09537850SAkhilesh Sanikop dst += stride;
59*09537850SAkhilesh Sanikop }
60*09537850SAkhilesh Sanikop }
61*09537850SAkhilesh Sanikop
62*09537850SAkhilesh Sanikop //------------------------------------------------------------------------------
63*09537850SAkhilesh Sanikop // CflSubsampler_C
64*09537850SAkhilesh Sanikop
65*09537850SAkhilesh Sanikop template <int block_width, int block_height, int bitdepth, typename Pixel,
66*09537850SAkhilesh Sanikop int subsampling_x, int subsampling_y>
CflSubsampler_C(int16_t luma[kCflLumaBufferStride][kCflLumaBufferStride],const int max_luma_width,const int max_luma_height,const void * LIBGAV1_RESTRICT const source,ptrdiff_t stride)67*09537850SAkhilesh Sanikop void CflSubsampler_C(int16_t luma[kCflLumaBufferStride][kCflLumaBufferStride],
68*09537850SAkhilesh Sanikop const int max_luma_width, const int max_luma_height,
69*09537850SAkhilesh Sanikop const void* LIBGAV1_RESTRICT const source,
70*09537850SAkhilesh Sanikop ptrdiff_t stride) {
71*09537850SAkhilesh Sanikop assert(max_luma_width >= 4);
72*09537850SAkhilesh Sanikop assert(max_luma_height >= 4);
73*09537850SAkhilesh Sanikop const auto* src = static_cast<const Pixel*>(source);
74*09537850SAkhilesh Sanikop stride /= sizeof(Pixel);
75*09537850SAkhilesh Sanikop int sum = 0;
76*09537850SAkhilesh Sanikop for (int y = 0; y < block_height; ++y) {
77*09537850SAkhilesh Sanikop for (int x = 0; x < block_width; ++x) {
78*09537850SAkhilesh Sanikop const ptrdiff_t luma_x =
79*09537850SAkhilesh Sanikop std::min(x << subsampling_x, max_luma_width - (1 << subsampling_x));
80*09537850SAkhilesh Sanikop const ptrdiff_t luma_x_next = luma_x + stride;
81*09537850SAkhilesh Sanikop luma[y][x] =
82*09537850SAkhilesh Sanikop (src[luma_x] + ((subsampling_x != 0) ? src[luma_x + 1] : 0) +
83*09537850SAkhilesh Sanikop ((subsampling_y != 0) ? (src[luma_x_next] + src[luma_x_next + 1])
84*09537850SAkhilesh Sanikop : 0))
85*09537850SAkhilesh Sanikop << (3 - subsampling_x - subsampling_y);
86*09537850SAkhilesh Sanikop sum += luma[y][x];
87*09537850SAkhilesh Sanikop }
88*09537850SAkhilesh Sanikop if ((y << subsampling_y) < (max_luma_height - (1 << subsampling_y))) {
89*09537850SAkhilesh Sanikop src += stride << subsampling_y;
90*09537850SAkhilesh Sanikop }
91*09537850SAkhilesh Sanikop }
92*09537850SAkhilesh Sanikop const int average = RightShiftWithRounding(
93*09537850SAkhilesh Sanikop sum, FloorLog2(block_width) + FloorLog2(block_height));
94*09537850SAkhilesh Sanikop for (int y = 0; y < block_height; ++y) {
95*09537850SAkhilesh Sanikop for (int x = 0; x < block_width; ++x) {
96*09537850SAkhilesh Sanikop luma[y][x] -= average;
97*09537850SAkhilesh Sanikop }
98*09537850SAkhilesh Sanikop }
99*09537850SAkhilesh Sanikop }
100*09537850SAkhilesh Sanikop
101*09537850SAkhilesh Sanikop //------------------------------------------------------------------------------
102*09537850SAkhilesh Sanikop
103*09537850SAkhilesh Sanikop // Initializes dsp entries for kTransformSize|W|x|H|.
104*09537850SAkhilesh Sanikop #define INIT_CFL_INTRAPREDICTOR_WxH(W, H, BITDEPTH, PIXEL) \
105*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize##W##x##H] = \
106*09537850SAkhilesh Sanikop CflIntraPredictor_C<W, H, BITDEPTH, PIXEL>; \
107*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize##W##x##H][kSubsamplingType444] = \
108*09537850SAkhilesh Sanikop CflSubsampler_C<W, H, BITDEPTH, PIXEL, 0, 0>; \
109*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize##W##x##H][kSubsamplingType422] = \
110*09537850SAkhilesh Sanikop CflSubsampler_C<W, H, BITDEPTH, PIXEL, 1, 0>; \
111*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize##W##x##H][kSubsamplingType420] = \
112*09537850SAkhilesh Sanikop CflSubsampler_C<W, H, BITDEPTH, PIXEL, 1, 1>
113*09537850SAkhilesh Sanikop
114*09537850SAkhilesh Sanikop #define INIT_CFL_INTRAPREDICTORS(BITDEPTH, PIXEL) \
115*09537850SAkhilesh Sanikop INIT_CFL_INTRAPREDICTOR_WxH(4, 4, BITDEPTH, PIXEL); \
116*09537850SAkhilesh Sanikop INIT_CFL_INTRAPREDICTOR_WxH(4, 8, BITDEPTH, PIXEL); \
117*09537850SAkhilesh Sanikop INIT_CFL_INTRAPREDICTOR_WxH(4, 16, BITDEPTH, PIXEL); \
118*09537850SAkhilesh Sanikop INIT_CFL_INTRAPREDICTOR_WxH(8, 4, BITDEPTH, PIXEL); \
119*09537850SAkhilesh Sanikop INIT_CFL_INTRAPREDICTOR_WxH(8, 8, BITDEPTH, PIXEL); \
120*09537850SAkhilesh Sanikop INIT_CFL_INTRAPREDICTOR_WxH(8, 16, BITDEPTH, PIXEL); \
121*09537850SAkhilesh Sanikop INIT_CFL_INTRAPREDICTOR_WxH(8, 32, BITDEPTH, PIXEL); \
122*09537850SAkhilesh Sanikop INIT_CFL_INTRAPREDICTOR_WxH(16, 4, BITDEPTH, PIXEL); \
123*09537850SAkhilesh Sanikop INIT_CFL_INTRAPREDICTOR_WxH(16, 8, BITDEPTH, PIXEL); \
124*09537850SAkhilesh Sanikop INIT_CFL_INTRAPREDICTOR_WxH(16, 16, BITDEPTH, PIXEL); \
125*09537850SAkhilesh Sanikop INIT_CFL_INTRAPREDICTOR_WxH(16, 32, BITDEPTH, PIXEL); \
126*09537850SAkhilesh Sanikop INIT_CFL_INTRAPREDICTOR_WxH(32, 8, BITDEPTH, PIXEL); \
127*09537850SAkhilesh Sanikop INIT_CFL_INTRAPREDICTOR_WxH(32, 16, BITDEPTH, PIXEL); \
128*09537850SAkhilesh Sanikop INIT_CFL_INTRAPREDICTOR_WxH(32, 32, BITDEPTH, PIXEL)
129*09537850SAkhilesh Sanikop
Init8bpp()130*09537850SAkhilesh Sanikop void Init8bpp() {
131*09537850SAkhilesh Sanikop Dsp* const dsp = dsp_internal::GetWritableDspTable(8);
132*09537850SAkhilesh Sanikop assert(dsp != nullptr);
133*09537850SAkhilesh Sanikop #if LIBGAV1_ENABLE_ALL_DSP_FUNCTIONS
134*09537850SAkhilesh Sanikop INIT_CFL_INTRAPREDICTORS(8, uint8_t);
135*09537850SAkhilesh Sanikop #else // !LIBGAV1_ENABLE_ALL_DSP_FUNCTIONS
136*09537850SAkhilesh Sanikop static_cast<void>(dsp);
137*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize4x4_CflIntraPredictor
138*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize4x4] =
139*09537850SAkhilesh Sanikop CflIntraPredictor_C<4, 4, 8, uint8_t>;
140*09537850SAkhilesh Sanikop #endif
141*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize4x4_CflSubsampler444
142*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize4x4][kSubsamplingType444] =
143*09537850SAkhilesh Sanikop CflSubsampler_C<4, 4, 8, uint8_t, 0, 0>;
144*09537850SAkhilesh Sanikop #endif
145*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize4x4_CflSubsampler422
146*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize4x4][kSubsamplingType422] =
147*09537850SAkhilesh Sanikop CflSubsampler_C<4, 4, 8, uint8_t, 1, 0>;
148*09537850SAkhilesh Sanikop #endif
149*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize4x4_CflSubsampler420
150*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize4x4][kSubsamplingType420] =
151*09537850SAkhilesh Sanikop CflSubsampler_C<4, 4, 8, uint8_t, 1, 1>;
152*09537850SAkhilesh Sanikop #endif
153*09537850SAkhilesh Sanikop
154*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize4x8_CflIntraPredictor
155*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize4x8] =
156*09537850SAkhilesh Sanikop CflIntraPredictor_C<4, 8, 8, uint8_t>;
157*09537850SAkhilesh Sanikop #endif
158*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize4x8_CflSubsampler444
159*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize4x8][kSubsamplingType444] =
160*09537850SAkhilesh Sanikop CflSubsampler_C<4, 8, 8, uint8_t, 0, 0>;
161*09537850SAkhilesh Sanikop #endif
162*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize4x8_CflSubsampler422
163*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize4x8][kSubsamplingType422] =
164*09537850SAkhilesh Sanikop CflSubsampler_C<4, 8, 8, uint8_t, 1, 0>;
165*09537850SAkhilesh Sanikop #endif
166*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize4x8_CflSubsampler420
167*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize4x8][kSubsamplingType420] =
168*09537850SAkhilesh Sanikop CflSubsampler_C<4, 8, 8, uint8_t, 1, 1>;
169*09537850SAkhilesh Sanikop #endif
170*09537850SAkhilesh Sanikop
171*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize4x16_CflIntraPredictor
172*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize4x16] =
173*09537850SAkhilesh Sanikop CflIntraPredictor_C<4, 16, 8, uint8_t>;
174*09537850SAkhilesh Sanikop #endif
175*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize4x16_CflSubsampler444
176*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize4x16][kSubsamplingType444] =
177*09537850SAkhilesh Sanikop CflSubsampler_C<4, 16, 8, uint8_t, 0, 0>;
178*09537850SAkhilesh Sanikop #endif
179*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize4x16_CflSubsampler422
180*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize4x16][kSubsamplingType422] =
181*09537850SAkhilesh Sanikop CflSubsampler_C<4, 16, 8, uint8_t, 1, 0>;
182*09537850SAkhilesh Sanikop #endif
183*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize4x16_CflSubsampler420
184*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize4x16][kSubsamplingType420] =
185*09537850SAkhilesh Sanikop CflSubsampler_C<4, 16, 8, uint8_t, 1, 1>;
186*09537850SAkhilesh Sanikop #endif
187*09537850SAkhilesh Sanikop
188*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize8x4_CflIntraPredictor
189*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize8x4] =
190*09537850SAkhilesh Sanikop CflIntraPredictor_C<8, 4, 8, uint8_t>;
191*09537850SAkhilesh Sanikop #endif
192*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize8x4_CflSubsampler444
193*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x4][kSubsamplingType444] =
194*09537850SAkhilesh Sanikop CflSubsampler_C<8, 4, 8, uint8_t, 0, 0>;
195*09537850SAkhilesh Sanikop #endif
196*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize8x4_CflSubsampler422
197*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x4][kSubsamplingType422] =
198*09537850SAkhilesh Sanikop CflSubsampler_C<8, 4, 8, uint8_t, 1, 0>;
199*09537850SAkhilesh Sanikop #endif
200*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize8x4_CflSubsampler420
201*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x4][kSubsamplingType420] =
202*09537850SAkhilesh Sanikop CflSubsampler_C<8, 4, 8, uint8_t, 1, 1>;
203*09537850SAkhilesh Sanikop #endif
204*09537850SAkhilesh Sanikop
205*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize8x8_CflIntraPredictor
206*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize8x8] =
207*09537850SAkhilesh Sanikop CflIntraPredictor_C<8, 8, 8, uint8_t>;
208*09537850SAkhilesh Sanikop #endif
209*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize8x8_CflSubsampler444
210*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x8][kSubsamplingType444] =
211*09537850SAkhilesh Sanikop CflSubsampler_C<8, 8, 8, uint8_t, 0, 0>;
212*09537850SAkhilesh Sanikop #endif
213*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize8x8_CflSubsampler422
214*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x8][kSubsamplingType422] =
215*09537850SAkhilesh Sanikop CflSubsampler_C<8, 8, 8, uint8_t, 1, 0>;
216*09537850SAkhilesh Sanikop #endif
217*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize8x8_CflSubsampler420
218*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x8][kSubsamplingType420] =
219*09537850SAkhilesh Sanikop CflSubsampler_C<8, 8, 8, uint8_t, 1, 1>;
220*09537850SAkhilesh Sanikop #endif
221*09537850SAkhilesh Sanikop
222*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize8x16_CflIntraPredictor
223*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize8x16] =
224*09537850SAkhilesh Sanikop CflIntraPredictor_C<8, 16, 8, uint8_t>;
225*09537850SAkhilesh Sanikop #endif
226*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize8x16_CflSubsampler444
227*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x16][kSubsamplingType444] =
228*09537850SAkhilesh Sanikop CflSubsampler_C<8, 16, 8, uint8_t, 0, 0>;
229*09537850SAkhilesh Sanikop #endif
230*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize8x16_CflSubsampler422
231*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x16][kSubsamplingType422] =
232*09537850SAkhilesh Sanikop CflSubsampler_C<8, 16, 8, uint8_t, 1, 0>;
233*09537850SAkhilesh Sanikop #endif
234*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize8x16_CflSubsampler420
235*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x16][kSubsamplingType420] =
236*09537850SAkhilesh Sanikop CflSubsampler_C<8, 16, 8, uint8_t, 1, 1>;
237*09537850SAkhilesh Sanikop #endif
238*09537850SAkhilesh Sanikop
239*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize8x32_CflIntraPredictor
240*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize8x32] =
241*09537850SAkhilesh Sanikop CflIntraPredictor_C<8, 32, 8, uint8_t>;
242*09537850SAkhilesh Sanikop #endif
243*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize8x32_CflSubsampler444
244*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x32][kSubsamplingType444] =
245*09537850SAkhilesh Sanikop CflSubsampler_C<8, 32, 8, uint8_t, 0, 0>;
246*09537850SAkhilesh Sanikop #endif
247*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize8x32_CflSubsampler422
248*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x32][kSubsamplingType422] =
249*09537850SAkhilesh Sanikop CflSubsampler_C<8, 32, 8, uint8_t, 1, 0>;
250*09537850SAkhilesh Sanikop #endif
251*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize8x32_CflSubsampler420
252*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x32][kSubsamplingType420] =
253*09537850SAkhilesh Sanikop CflSubsampler_C<8, 32, 8, uint8_t, 1, 1>;
254*09537850SAkhilesh Sanikop #endif
255*09537850SAkhilesh Sanikop
256*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize16x4_CflIntraPredictor
257*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize16x4] =
258*09537850SAkhilesh Sanikop CflIntraPredictor_C<16, 4, 8, uint8_t>;
259*09537850SAkhilesh Sanikop #endif
260*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize16x4_CflSubsampler444
261*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x4][kSubsamplingType444] =
262*09537850SAkhilesh Sanikop CflSubsampler_C<16, 4, 8, uint8_t, 0, 0>;
263*09537850SAkhilesh Sanikop #endif
264*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize16x4_CflSubsampler422
265*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x4][kSubsamplingType422] =
266*09537850SAkhilesh Sanikop CflSubsampler_C<16, 4, 8, uint8_t, 1, 0>;
267*09537850SAkhilesh Sanikop #endif
268*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize16x4_CflSubsampler420
269*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x4][kSubsamplingType420] =
270*09537850SAkhilesh Sanikop CflSubsampler_C<16, 4, 8, uint8_t, 1, 1>;
271*09537850SAkhilesh Sanikop #endif
272*09537850SAkhilesh Sanikop
273*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize16x8_CflIntraPredictor
274*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize16x8] =
275*09537850SAkhilesh Sanikop CflIntraPredictor_C<16, 8, 8, uint8_t>;
276*09537850SAkhilesh Sanikop #endif
277*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize16x8_CflSubsampler444
278*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x8][kSubsamplingType444] =
279*09537850SAkhilesh Sanikop CflSubsampler_C<16, 8, 8, uint8_t, 0, 0>;
280*09537850SAkhilesh Sanikop #endif
281*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize16x8_CflSubsampler422
282*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x8][kSubsamplingType422] =
283*09537850SAkhilesh Sanikop CflSubsampler_C<16, 8, 8, uint8_t, 1, 0>;
284*09537850SAkhilesh Sanikop #endif
285*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize16x8_CflSubsampler420
286*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x8][kSubsamplingType420] =
287*09537850SAkhilesh Sanikop CflSubsampler_C<16, 8, 8, uint8_t, 1, 1>;
288*09537850SAkhilesh Sanikop #endif
289*09537850SAkhilesh Sanikop
290*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize16x16_CflIntraPredictor
291*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize16x16] =
292*09537850SAkhilesh Sanikop CflIntraPredictor_C<16, 16, 8, uint8_t>;
293*09537850SAkhilesh Sanikop #endif
294*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize16x16_CflSubsampler444
295*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x16][kSubsamplingType444] =
296*09537850SAkhilesh Sanikop CflSubsampler_C<16, 16, 8, uint8_t, 0, 0>;
297*09537850SAkhilesh Sanikop #endif
298*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize16x16_CflSubsampler422
299*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x16][kSubsamplingType422] =
300*09537850SAkhilesh Sanikop CflSubsampler_C<16, 16, 8, uint8_t, 1, 0>;
301*09537850SAkhilesh Sanikop #endif
302*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize16x16_CflSubsampler420
303*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x16][kSubsamplingType420] =
304*09537850SAkhilesh Sanikop CflSubsampler_C<16, 16, 8, uint8_t, 1, 1>;
305*09537850SAkhilesh Sanikop #endif
306*09537850SAkhilesh Sanikop
307*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize16x32_CflIntraPredictor
308*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize16x32] =
309*09537850SAkhilesh Sanikop CflIntraPredictor_C<16, 32, 8, uint8_t>;
310*09537850SAkhilesh Sanikop #endif
311*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize16x32_CflSubsampler444
312*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x32][kSubsamplingType444] =
313*09537850SAkhilesh Sanikop CflSubsampler_C<16, 32, 8, uint8_t, 0, 0>;
314*09537850SAkhilesh Sanikop #endif
315*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize16x32_CflSubsampler422
316*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x32][kSubsamplingType422] =
317*09537850SAkhilesh Sanikop CflSubsampler_C<16, 32, 8, uint8_t, 1, 0>;
318*09537850SAkhilesh Sanikop #endif
319*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize16x32_CflSubsampler420
320*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x32][kSubsamplingType420] =
321*09537850SAkhilesh Sanikop CflSubsampler_C<16, 32, 8, uint8_t, 1, 1>;
322*09537850SAkhilesh Sanikop #endif
323*09537850SAkhilesh Sanikop
324*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize32x8_CflIntraPredictor
325*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize32x8] =
326*09537850SAkhilesh Sanikop CflIntraPredictor_C<32, 8, 8, uint8_t>;
327*09537850SAkhilesh Sanikop #endif
328*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize32x8_CflSubsampler444
329*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize32x8][kSubsamplingType444] =
330*09537850SAkhilesh Sanikop CflSubsampler_C<32, 8, 8, uint8_t, 0, 0>;
331*09537850SAkhilesh Sanikop #endif
332*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize32x8_CflSubsampler422
333*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize32x8][kSubsamplingType422] =
334*09537850SAkhilesh Sanikop CflSubsampler_C<32, 8, 8, uint8_t, 1, 0>;
335*09537850SAkhilesh Sanikop #endif
336*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize32x8_CflSubsampler420
337*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize32x8][kSubsamplingType420] =
338*09537850SAkhilesh Sanikop CflSubsampler_C<32, 8, 8, uint8_t, 1, 1>;
339*09537850SAkhilesh Sanikop #endif
340*09537850SAkhilesh Sanikop
341*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize32x16_CflIntraPredictor
342*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize32x16] =
343*09537850SAkhilesh Sanikop CflIntraPredictor_C<32, 16, 8, uint8_t>;
344*09537850SAkhilesh Sanikop #endif
345*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize32x16_CflSubsampler444
346*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize32x16][kSubsamplingType444] =
347*09537850SAkhilesh Sanikop CflSubsampler_C<32, 16, 8, uint8_t, 0, 0>;
348*09537850SAkhilesh Sanikop #endif
349*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize32x16_CflSubsampler422
350*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize32x16][kSubsamplingType422] =
351*09537850SAkhilesh Sanikop CflSubsampler_C<32, 16, 8, uint8_t, 1, 0>;
352*09537850SAkhilesh Sanikop #endif
353*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize32x16_CflSubsampler420
354*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize32x16][kSubsamplingType420] =
355*09537850SAkhilesh Sanikop CflSubsampler_C<32, 16, 8, uint8_t, 1, 1>;
356*09537850SAkhilesh Sanikop #endif
357*09537850SAkhilesh Sanikop
358*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize32x32_CflIntraPredictor
359*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize32x32] =
360*09537850SAkhilesh Sanikop CflIntraPredictor_C<32, 32, 8, uint8_t>;
361*09537850SAkhilesh Sanikop #endif
362*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize32x32_CflSubsampler444
363*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize32x32][kSubsamplingType444] =
364*09537850SAkhilesh Sanikop CflSubsampler_C<32, 32, 8, uint8_t, 0, 0>;
365*09537850SAkhilesh Sanikop #endif
366*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize32x32_CflSubsampler422
367*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize32x32][kSubsamplingType422] =
368*09537850SAkhilesh Sanikop CflSubsampler_C<32, 32, 8, uint8_t, 1, 0>;
369*09537850SAkhilesh Sanikop #endif
370*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_TransformSize32x32_CflSubsampler420
371*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize32x32][kSubsamplingType420] =
372*09537850SAkhilesh Sanikop CflSubsampler_C<32, 32, 8, uint8_t, 1, 1>;
373*09537850SAkhilesh Sanikop #endif
374*09537850SAkhilesh Sanikop #endif // LIBGAV1_ENABLE_ALL_DSP_FUNCTIONS
375*09537850SAkhilesh Sanikop // Cfl predictors are available only for transform sizes with max(width,
376*09537850SAkhilesh Sanikop // height) <= 32. Set all others to nullptr.
377*09537850SAkhilesh Sanikop for (const auto i : kTransformSizesLargerThan32x32) {
378*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[i] = nullptr;
379*09537850SAkhilesh Sanikop for (int j = 0; j < kNumSubsamplingTypes; ++j) {
380*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[i][j] = nullptr;
381*09537850SAkhilesh Sanikop }
382*09537850SAkhilesh Sanikop }
383*09537850SAkhilesh Sanikop } // NOLINT(readability/fn_size)
384*09537850SAkhilesh Sanikop
385*09537850SAkhilesh Sanikop #if LIBGAV1_MAX_BITDEPTH >= 10
Init10bpp()386*09537850SAkhilesh Sanikop void Init10bpp() {
387*09537850SAkhilesh Sanikop Dsp* const dsp = dsp_internal::GetWritableDspTable(10);
388*09537850SAkhilesh Sanikop assert(dsp != nullptr);
389*09537850SAkhilesh Sanikop #if LIBGAV1_ENABLE_ALL_DSP_FUNCTIONS
390*09537850SAkhilesh Sanikop INIT_CFL_INTRAPREDICTORS(10, uint16_t);
391*09537850SAkhilesh Sanikop #else // !LIBGAV1_ENABLE_ALL_DSP_FUNCTIONS
392*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize4x4_CflIntraPredictor
393*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize4x4] =
394*09537850SAkhilesh Sanikop CflIntraPredictor_C<4, 4, 10, uint16_t>;
395*09537850SAkhilesh Sanikop #endif
396*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize4x4_CflSubsampler444
397*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize4x4][kSubsamplingType444] =
398*09537850SAkhilesh Sanikop CflSubsampler_C<4, 4, 10, uint16_t, 0, 0>;
399*09537850SAkhilesh Sanikop #endif
400*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize4x4_CflSubsampler422
401*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize4x4][kSubsamplingType422] =
402*09537850SAkhilesh Sanikop CflSubsampler_C<4, 4, 10, uint16_t, 1, 0>;
403*09537850SAkhilesh Sanikop #endif
404*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize4x4_CflSubsampler420
405*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize4x4][kSubsamplingType420] =
406*09537850SAkhilesh Sanikop CflSubsampler_C<4, 4, 10, uint16_t, 1, 1>;
407*09537850SAkhilesh Sanikop #endif
408*09537850SAkhilesh Sanikop
409*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize4x8_CflIntraPredictor
410*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize4x8] =
411*09537850SAkhilesh Sanikop CflIntraPredictor_C<4, 8, 10, uint16_t>;
412*09537850SAkhilesh Sanikop #endif
413*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize4x8_CflSubsampler444
414*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize4x8][kSubsamplingType444] =
415*09537850SAkhilesh Sanikop CflSubsampler_C<4, 8, 10, uint16_t, 0, 0>;
416*09537850SAkhilesh Sanikop #endif
417*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize4x8_CflSubsampler422
418*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize4x8][kSubsamplingType422] =
419*09537850SAkhilesh Sanikop CflSubsampler_C<4, 8, 10, uint16_t, 1, 0>;
420*09537850SAkhilesh Sanikop #endif
421*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize4x8_CflSubsampler420
422*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize4x8][kSubsamplingType420] =
423*09537850SAkhilesh Sanikop CflSubsampler_C<4, 8, 10, uint16_t, 1, 1>;
424*09537850SAkhilesh Sanikop #endif
425*09537850SAkhilesh Sanikop
426*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize4x16_CflIntraPredictor
427*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize4x16] =
428*09537850SAkhilesh Sanikop CflIntraPredictor_C<4, 16, 10, uint16_t>;
429*09537850SAkhilesh Sanikop #endif
430*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize4x16_CflSubsampler444
431*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize4x16][kSubsamplingType444] =
432*09537850SAkhilesh Sanikop CflSubsampler_C<4, 16, 10, uint16_t, 0, 0>;
433*09537850SAkhilesh Sanikop #endif
434*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize4x16_CflSubsampler422
435*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize4x16][kSubsamplingType422] =
436*09537850SAkhilesh Sanikop CflSubsampler_C<4, 16, 10, uint16_t, 1, 0>;
437*09537850SAkhilesh Sanikop #endif
438*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize4x16_CflSubsampler420
439*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize4x16][kSubsamplingType420] =
440*09537850SAkhilesh Sanikop CflSubsampler_C<4, 16, 10, uint16_t, 1, 1>;
441*09537850SAkhilesh Sanikop #endif
442*09537850SAkhilesh Sanikop
443*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize8x4_CflIntraPredictor
444*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize8x4] =
445*09537850SAkhilesh Sanikop CflIntraPredictor_C<8, 4, 10, uint16_t>;
446*09537850SAkhilesh Sanikop #endif
447*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize8x4_CflSubsampler444
448*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x4][kSubsamplingType444] =
449*09537850SAkhilesh Sanikop CflSubsampler_C<8, 4, 10, uint16_t, 0, 0>;
450*09537850SAkhilesh Sanikop #endif
451*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize8x4_CflSubsampler422
452*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x4][kSubsamplingType422] =
453*09537850SAkhilesh Sanikop CflSubsampler_C<8, 4, 10, uint16_t, 1, 0>;
454*09537850SAkhilesh Sanikop #endif
455*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize8x4_CflSubsampler420
456*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x4][kSubsamplingType420] =
457*09537850SAkhilesh Sanikop CflSubsampler_C<8, 4, 10, uint16_t, 1, 1>;
458*09537850SAkhilesh Sanikop #endif
459*09537850SAkhilesh Sanikop
460*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize8x8_CflIntraPredictor
461*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize8x8] =
462*09537850SAkhilesh Sanikop CflIntraPredictor_C<8, 8, 10, uint16_t>;
463*09537850SAkhilesh Sanikop #endif
464*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize8x8_CflSubsampler444
465*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x8][kSubsamplingType444] =
466*09537850SAkhilesh Sanikop CflSubsampler_C<8, 8, 10, uint16_t, 0, 0>;
467*09537850SAkhilesh Sanikop #endif
468*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize8x8_CflSubsampler422
469*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x8][kSubsamplingType422] =
470*09537850SAkhilesh Sanikop CflSubsampler_C<8, 8, 10, uint16_t, 1, 0>;
471*09537850SAkhilesh Sanikop #endif
472*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize8x8_CflSubsampler420
473*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x8][kSubsamplingType420] =
474*09537850SAkhilesh Sanikop CflSubsampler_C<8, 8, 10, uint16_t, 1, 1>;
475*09537850SAkhilesh Sanikop #endif
476*09537850SAkhilesh Sanikop
477*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize8x16_CflIntraPredictor
478*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize8x16] =
479*09537850SAkhilesh Sanikop CflIntraPredictor_C<8, 16, 10, uint16_t>;
480*09537850SAkhilesh Sanikop #endif
481*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize8x16_CflSubsampler444
482*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x16][kSubsamplingType444] =
483*09537850SAkhilesh Sanikop CflSubsampler_C<8, 16, 10, uint16_t, 0, 0>;
484*09537850SAkhilesh Sanikop #endif
485*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize8x16_CflSubsampler422
486*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x16][kSubsamplingType422] =
487*09537850SAkhilesh Sanikop CflSubsampler_C<8, 16, 10, uint16_t, 1, 0>;
488*09537850SAkhilesh Sanikop #endif
489*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize8x16_CflSubsampler420
490*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x16][kSubsamplingType420] =
491*09537850SAkhilesh Sanikop CflSubsampler_C<8, 16, 10, uint16_t, 1, 1>;
492*09537850SAkhilesh Sanikop #endif
493*09537850SAkhilesh Sanikop
494*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize8x32_CflIntraPredictor
495*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize8x32] =
496*09537850SAkhilesh Sanikop CflIntraPredictor_C<8, 32, 10, uint16_t>;
497*09537850SAkhilesh Sanikop #endif
498*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize8x32_CflSubsampler444
499*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x32][kSubsamplingType444] =
500*09537850SAkhilesh Sanikop CflSubsampler_C<8, 32, 10, uint16_t, 0, 0>;
501*09537850SAkhilesh Sanikop #endif
502*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize8x32_CflSubsampler422
503*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x32][kSubsamplingType422] =
504*09537850SAkhilesh Sanikop CflSubsampler_C<8, 32, 10, uint16_t, 1, 0>;
505*09537850SAkhilesh Sanikop #endif
506*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize8x32_CflSubsampler420
507*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x32][kSubsamplingType420] =
508*09537850SAkhilesh Sanikop CflSubsampler_C<8, 32, 10, uint16_t, 1, 1>;
509*09537850SAkhilesh Sanikop #endif
510*09537850SAkhilesh Sanikop
511*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize16x4_CflIntraPredictor
512*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize16x4] =
513*09537850SAkhilesh Sanikop CflIntraPredictor_C<16, 4, 10, uint16_t>;
514*09537850SAkhilesh Sanikop #endif
515*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize16x4_CflSubsampler444
516*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x4][kSubsamplingType444] =
517*09537850SAkhilesh Sanikop CflSubsampler_C<16, 4, 10, uint16_t, 0, 0>;
518*09537850SAkhilesh Sanikop #endif
519*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize16x4_CflSubsampler422
520*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x4][kSubsamplingType422] =
521*09537850SAkhilesh Sanikop CflSubsampler_C<16, 4, 10, uint16_t, 1, 0>;
522*09537850SAkhilesh Sanikop #endif
523*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize16x4_CflSubsampler420
524*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x4][kSubsamplingType420] =
525*09537850SAkhilesh Sanikop CflSubsampler_C<16, 4, 10, uint16_t, 1, 1>;
526*09537850SAkhilesh Sanikop #endif
527*09537850SAkhilesh Sanikop
528*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize16x8_CflIntraPredictor
529*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize16x8] =
530*09537850SAkhilesh Sanikop CflIntraPredictor_C<16, 8, 10, uint16_t>;
531*09537850SAkhilesh Sanikop #endif
532*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize16x8_CflSubsampler444
533*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x8][kSubsamplingType444] =
534*09537850SAkhilesh Sanikop CflSubsampler_C<16, 8, 10, uint16_t, 0, 0>;
535*09537850SAkhilesh Sanikop #endif
536*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize16x8_CflSubsampler422
537*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x8][kSubsamplingType422] =
538*09537850SAkhilesh Sanikop CflSubsampler_C<16, 8, 10, uint16_t, 1, 0>;
539*09537850SAkhilesh Sanikop #endif
540*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize16x8_CflSubsampler420
541*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x8][kSubsamplingType420] =
542*09537850SAkhilesh Sanikop CflSubsampler_C<16, 8, 10, uint16_t, 1, 1>;
543*09537850SAkhilesh Sanikop #endif
544*09537850SAkhilesh Sanikop
545*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize16x16_CflIntraPredictor
546*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize16x16] =
547*09537850SAkhilesh Sanikop CflIntraPredictor_C<16, 16, 10, uint16_t>;
548*09537850SAkhilesh Sanikop #endif
549*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize16x16_CflSubsampler444
550*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x16][kSubsamplingType444] =
551*09537850SAkhilesh Sanikop CflSubsampler_C<16, 16, 10, uint16_t, 0, 0>;
552*09537850SAkhilesh Sanikop #endif
553*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize16x16_CflSubsampler422
554*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x16][kSubsamplingType422] =
555*09537850SAkhilesh Sanikop CflSubsampler_C<16, 16, 10, uint16_t, 1, 0>;
556*09537850SAkhilesh Sanikop #endif
557*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize16x16_CflSubsampler420
558*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x16][kSubsamplingType420] =
559*09537850SAkhilesh Sanikop CflSubsampler_C<16, 16, 10, uint16_t, 1, 1>;
560*09537850SAkhilesh Sanikop #endif
561*09537850SAkhilesh Sanikop
562*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize16x32_CflIntraPredictor
563*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize16x32] =
564*09537850SAkhilesh Sanikop CflIntraPredictor_C<16, 32, 10, uint16_t>;
565*09537850SAkhilesh Sanikop #endif
566*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize16x32_CflSubsampler444
567*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x32][kSubsamplingType444] =
568*09537850SAkhilesh Sanikop CflSubsampler_C<16, 32, 10, uint16_t, 0, 0>;
569*09537850SAkhilesh Sanikop #endif
570*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize16x32_CflSubsampler422
571*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x32][kSubsamplingType422] =
572*09537850SAkhilesh Sanikop CflSubsampler_C<16, 32, 10, uint16_t, 1, 0>;
573*09537850SAkhilesh Sanikop #endif
574*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize16x32_CflSubsampler420
575*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x32][kSubsamplingType420] =
576*09537850SAkhilesh Sanikop CflSubsampler_C<16, 32, 10, uint16_t, 1, 1>;
577*09537850SAkhilesh Sanikop #endif
578*09537850SAkhilesh Sanikop
579*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize32x8_CflIntraPredictor
580*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize32x8] =
581*09537850SAkhilesh Sanikop CflIntraPredictor_C<32, 8, 10, uint16_t>;
582*09537850SAkhilesh Sanikop #endif
583*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize32x8_CflSubsampler444
584*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize32x8][kSubsamplingType444] =
585*09537850SAkhilesh Sanikop CflSubsampler_C<32, 8, 10, uint16_t, 0, 0>;
586*09537850SAkhilesh Sanikop #endif
587*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize32x8_CflSubsampler422
588*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize32x8][kSubsamplingType422] =
589*09537850SAkhilesh Sanikop CflSubsampler_C<32, 8, 10, uint16_t, 1, 0>;
590*09537850SAkhilesh Sanikop #endif
591*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize32x8_CflSubsampler420
592*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize32x8][kSubsamplingType420] =
593*09537850SAkhilesh Sanikop CflSubsampler_C<32, 8, 10, uint16_t, 1, 1>;
594*09537850SAkhilesh Sanikop #endif
595*09537850SAkhilesh Sanikop
596*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize32x16_CflIntraPredictor
597*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize32x16] =
598*09537850SAkhilesh Sanikop CflIntraPredictor_C<32, 16, 10, uint16_t>;
599*09537850SAkhilesh Sanikop #endif
600*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize32x16_CflSubsampler444
601*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize32x16][kSubsamplingType444] =
602*09537850SAkhilesh Sanikop CflSubsampler_C<32, 16, 10, uint16_t, 0, 0>;
603*09537850SAkhilesh Sanikop #endif
604*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize32x16_CflSubsampler422
605*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize32x16][kSubsamplingType422] =
606*09537850SAkhilesh Sanikop CflSubsampler_C<32, 16, 10, uint16_t, 1, 0>;
607*09537850SAkhilesh Sanikop #endif
608*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize32x16_CflSubsampler420
609*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize32x16][kSubsamplingType420] =
610*09537850SAkhilesh Sanikop CflSubsampler_C<32, 16, 10, uint16_t, 1, 1>;
611*09537850SAkhilesh Sanikop #endif
612*09537850SAkhilesh Sanikop
613*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize32x32_CflIntraPredictor
614*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize32x32] =
615*09537850SAkhilesh Sanikop CflIntraPredictor_C<32, 32, 10, uint16_t>;
616*09537850SAkhilesh Sanikop #endif
617*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize32x32_CflSubsampler444
618*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize32x32][kSubsamplingType444] =
619*09537850SAkhilesh Sanikop CflSubsampler_C<32, 32, 10, uint16_t, 0, 0>;
620*09537850SAkhilesh Sanikop #endif
621*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize32x32_CflSubsampler422
622*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize32x32][kSubsamplingType422] =
623*09537850SAkhilesh Sanikop CflSubsampler_C<32, 32, 10, uint16_t, 1, 0>;
624*09537850SAkhilesh Sanikop #endif
625*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_TransformSize32x32_CflSubsampler420
626*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize32x32][kSubsamplingType420] =
627*09537850SAkhilesh Sanikop CflSubsampler_C<32, 32, 10, uint16_t, 1, 1>;
628*09537850SAkhilesh Sanikop #endif
629*09537850SAkhilesh Sanikop
630*09537850SAkhilesh Sanikop #endif // LIBGAV1_ENABLE_ALL_DSP_FUNCTIONS
631*09537850SAkhilesh Sanikop // Cfl predictors are available only for transform sizes with max(width,
632*09537850SAkhilesh Sanikop // height) <= 32. Set all others to nullptr.
633*09537850SAkhilesh Sanikop for (const auto i : kTransformSizesLargerThan32x32) {
634*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[i] = nullptr;
635*09537850SAkhilesh Sanikop for (int j = 0; j < kNumSubsamplingTypes; ++j) {
636*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[i][j] = nullptr;
637*09537850SAkhilesh Sanikop }
638*09537850SAkhilesh Sanikop }
639*09537850SAkhilesh Sanikop } // NOLINT(readability/fn_size)
640*09537850SAkhilesh Sanikop #endif // LIBGAV1_MAX_BITDEPTH >= 10
641*09537850SAkhilesh Sanikop
642*09537850SAkhilesh Sanikop #if LIBGAV1_MAX_BITDEPTH == 12
Init12bpp()643*09537850SAkhilesh Sanikop void Init12bpp() {
644*09537850SAkhilesh Sanikop Dsp* const dsp = dsp_internal::GetWritableDspTable(12);
645*09537850SAkhilesh Sanikop assert(dsp != nullptr);
646*09537850SAkhilesh Sanikop #if LIBGAV1_ENABLE_ALL_DSP_FUNCTIONS
647*09537850SAkhilesh Sanikop INIT_CFL_INTRAPREDICTORS(12, uint16_t);
648*09537850SAkhilesh Sanikop #else // !LIBGAV1_ENABLE_ALL_DSP_FUNCTIONS
649*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize4x4_CflIntraPredictor
650*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize4x4] =
651*09537850SAkhilesh Sanikop CflIntraPredictor_C<4, 4, 12, uint16_t>;
652*09537850SAkhilesh Sanikop #endif
653*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize4x4_CflSubsampler444
654*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize4x4][kSubsamplingType444] =
655*09537850SAkhilesh Sanikop CflSubsampler_C<4, 4, 12, uint16_t, 0, 0>;
656*09537850SAkhilesh Sanikop #endif
657*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize4x4_CflSubsampler422
658*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize4x4][kSubsamplingType422] =
659*09537850SAkhilesh Sanikop CflSubsampler_C<4, 4, 12, uint16_t, 1, 0>;
660*09537850SAkhilesh Sanikop #endif
661*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize4x4_CflSubsampler420
662*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize4x4][kSubsamplingType420] =
663*09537850SAkhilesh Sanikop CflSubsampler_C<4, 4, 12, uint16_t, 1, 1>;
664*09537850SAkhilesh Sanikop #endif
665*09537850SAkhilesh Sanikop
666*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize4x8_CflIntraPredictor
667*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize4x8] =
668*09537850SAkhilesh Sanikop CflIntraPredictor_C<4, 8, 12, uint16_t>;
669*09537850SAkhilesh Sanikop #endif
670*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize4x8_CflSubsampler444
671*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize4x8][kSubsamplingType444] =
672*09537850SAkhilesh Sanikop CflSubsampler_C<4, 8, 12, uint16_t, 0, 0>;
673*09537850SAkhilesh Sanikop #endif
674*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize4x8_CflSubsampler422
675*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize4x8][kSubsamplingType422] =
676*09537850SAkhilesh Sanikop CflSubsampler_C<4, 8, 12, uint16_t, 1, 0>;
677*09537850SAkhilesh Sanikop #endif
678*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize4x8_CflSubsampler420
679*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize4x8][kSubsamplingType420] =
680*09537850SAkhilesh Sanikop CflSubsampler_C<4, 8, 12, uint16_t, 1, 1>;
681*09537850SAkhilesh Sanikop #endif
682*09537850SAkhilesh Sanikop
683*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize4x16_CflIntraPredictor
684*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize4x16] =
685*09537850SAkhilesh Sanikop CflIntraPredictor_C<4, 16, 12, uint16_t>;
686*09537850SAkhilesh Sanikop #endif
687*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize4x16_CflSubsampler444
688*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize4x16][kSubsamplingType444] =
689*09537850SAkhilesh Sanikop CflSubsampler_C<4, 16, 12, uint16_t, 0, 0>;
690*09537850SAkhilesh Sanikop #endif
691*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize4x16_CflSubsampler422
692*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize4x16][kSubsamplingType422] =
693*09537850SAkhilesh Sanikop CflSubsampler_C<4, 16, 12, uint16_t, 1, 0>;
694*09537850SAkhilesh Sanikop #endif
695*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize4x16_CflSubsampler420
696*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize4x16][kSubsamplingType420] =
697*09537850SAkhilesh Sanikop CflSubsampler_C<4, 16, 12, uint16_t, 1, 1>;
698*09537850SAkhilesh Sanikop #endif
699*09537850SAkhilesh Sanikop
700*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize8x4_CflIntraPredictor
701*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize8x4] =
702*09537850SAkhilesh Sanikop CflIntraPredictor_C<8, 4, 12, uint16_t>;
703*09537850SAkhilesh Sanikop #endif
704*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize8x4_CflSubsampler444
705*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x4][kSubsamplingType444] =
706*09537850SAkhilesh Sanikop CflSubsampler_C<8, 4, 12, uint16_t, 0, 0>;
707*09537850SAkhilesh Sanikop #endif
708*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize8x4_CflSubsampler422
709*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x4][kSubsamplingType422] =
710*09537850SAkhilesh Sanikop CflSubsampler_C<8, 4, 12, uint16_t, 1, 0>;
711*09537850SAkhilesh Sanikop #endif
712*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize8x4_CflSubsampler420
713*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x4][kSubsamplingType420] =
714*09537850SAkhilesh Sanikop CflSubsampler_C<8, 4, 12, uint16_t, 1, 1>;
715*09537850SAkhilesh Sanikop #endif
716*09537850SAkhilesh Sanikop
717*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize8x8_CflIntraPredictor
718*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize8x8] =
719*09537850SAkhilesh Sanikop CflIntraPredictor_C<8, 8, 12, uint16_t>;
720*09537850SAkhilesh Sanikop #endif
721*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize8x8_CflSubsampler444
722*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x8][kSubsamplingType444] =
723*09537850SAkhilesh Sanikop CflSubsampler_C<8, 8, 12, uint16_t, 0, 0>;
724*09537850SAkhilesh Sanikop #endif
725*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize8x8_CflSubsampler422
726*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x8][kSubsamplingType422] =
727*09537850SAkhilesh Sanikop CflSubsampler_C<8, 8, 12, uint16_t, 1, 0>;
728*09537850SAkhilesh Sanikop #endif
729*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize8x8_CflSubsampler420
730*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x8][kSubsamplingType420] =
731*09537850SAkhilesh Sanikop CflSubsampler_C<8, 8, 12, uint16_t, 1, 1>;
732*09537850SAkhilesh Sanikop #endif
733*09537850SAkhilesh Sanikop
734*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize8x16_CflIntraPredictor
735*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize8x16] =
736*09537850SAkhilesh Sanikop CflIntraPredictor_C<8, 16, 12, uint16_t>;
737*09537850SAkhilesh Sanikop #endif
738*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize8x16_CflSubsampler444
739*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x16][kSubsamplingType444] =
740*09537850SAkhilesh Sanikop CflSubsampler_C<8, 16, 12, uint16_t, 0, 0>;
741*09537850SAkhilesh Sanikop #endif
742*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize8x16_CflSubsampler422
743*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x16][kSubsamplingType422] =
744*09537850SAkhilesh Sanikop CflSubsampler_C<8, 16, 12, uint16_t, 1, 0>;
745*09537850SAkhilesh Sanikop #endif
746*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize8x16_CflSubsampler420
747*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x16][kSubsamplingType420] =
748*09537850SAkhilesh Sanikop CflSubsampler_C<8, 16, 12, uint16_t, 1, 1>;
749*09537850SAkhilesh Sanikop #endif
750*09537850SAkhilesh Sanikop
751*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize8x32_CflIntraPredictor
752*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize8x32] =
753*09537850SAkhilesh Sanikop CflIntraPredictor_C<8, 32, 12, uint16_t>;
754*09537850SAkhilesh Sanikop #endif
755*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize8x32_CflSubsampler444
756*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x32][kSubsamplingType444] =
757*09537850SAkhilesh Sanikop CflSubsampler_C<8, 32, 12, uint16_t, 0, 0>;
758*09537850SAkhilesh Sanikop #endif
759*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize8x32_CflSubsampler422
760*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x32][kSubsamplingType422] =
761*09537850SAkhilesh Sanikop CflSubsampler_C<8, 32, 12, uint16_t, 1, 0>;
762*09537850SAkhilesh Sanikop #endif
763*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize8x32_CflSubsampler420
764*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize8x32][kSubsamplingType420] =
765*09537850SAkhilesh Sanikop CflSubsampler_C<8, 32, 12, uint16_t, 1, 1>;
766*09537850SAkhilesh Sanikop #endif
767*09537850SAkhilesh Sanikop
768*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize16x4_CflIntraPredictor
769*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize16x4] =
770*09537850SAkhilesh Sanikop CflIntraPredictor_C<16, 4, 12, uint16_t>;
771*09537850SAkhilesh Sanikop #endif
772*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize16x4_CflSubsampler444
773*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x4][kSubsamplingType444] =
774*09537850SAkhilesh Sanikop CflSubsampler_C<16, 4, 12, uint16_t, 0, 0>;
775*09537850SAkhilesh Sanikop #endif
776*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize16x4_CflSubsampler422
777*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x4][kSubsamplingType422] =
778*09537850SAkhilesh Sanikop CflSubsampler_C<16, 4, 12, uint16_t, 1, 0>;
779*09537850SAkhilesh Sanikop #endif
780*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize16x4_CflSubsampler420
781*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x4][kSubsamplingType420] =
782*09537850SAkhilesh Sanikop CflSubsampler_C<16, 4, 12, uint16_t, 1, 1>;
783*09537850SAkhilesh Sanikop #endif
784*09537850SAkhilesh Sanikop
785*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize16x8_CflIntraPredictor
786*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize16x8] =
787*09537850SAkhilesh Sanikop CflIntraPredictor_C<16, 8, 12, uint16_t>;
788*09537850SAkhilesh Sanikop #endif
789*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize16x8_CflSubsampler444
790*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x8][kSubsamplingType444] =
791*09537850SAkhilesh Sanikop CflSubsampler_C<16, 8, 12, uint16_t, 0, 0>;
792*09537850SAkhilesh Sanikop #endif
793*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize16x8_CflSubsampler422
794*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x8][kSubsamplingType422] =
795*09537850SAkhilesh Sanikop CflSubsampler_C<16, 8, 12, uint16_t, 1, 0>;
796*09537850SAkhilesh Sanikop #endif
797*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize16x8_CflSubsampler420
798*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x8][kSubsamplingType420] =
799*09537850SAkhilesh Sanikop CflSubsampler_C<16, 8, 12, uint16_t, 1, 1>;
800*09537850SAkhilesh Sanikop #endif
801*09537850SAkhilesh Sanikop
802*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize16x16_CflIntraPredictor
803*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize16x16] =
804*09537850SAkhilesh Sanikop CflIntraPredictor_C<16, 16, 12, uint16_t>;
805*09537850SAkhilesh Sanikop #endif
806*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize16x16_CflSubsampler444
807*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x16][kSubsamplingType444] =
808*09537850SAkhilesh Sanikop CflSubsampler_C<16, 16, 12, uint16_t, 0, 0>;
809*09537850SAkhilesh Sanikop #endif
810*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize16x16_CflSubsampler422
811*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x16][kSubsamplingType422] =
812*09537850SAkhilesh Sanikop CflSubsampler_C<16, 16, 12, uint16_t, 1, 0>;
813*09537850SAkhilesh Sanikop #endif
814*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize16x16_CflSubsampler420
815*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x16][kSubsamplingType420] =
816*09537850SAkhilesh Sanikop CflSubsampler_C<16, 16, 12, uint16_t, 1, 1>;
817*09537850SAkhilesh Sanikop #endif
818*09537850SAkhilesh Sanikop
819*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize16x32_CflIntraPredictor
820*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize16x32] =
821*09537850SAkhilesh Sanikop CflIntraPredictor_C<16, 32, 12, uint16_t>;
822*09537850SAkhilesh Sanikop #endif
823*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize16x32_CflSubsampler444
824*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x32][kSubsamplingType444] =
825*09537850SAkhilesh Sanikop CflSubsampler_C<16, 32, 12, uint16_t, 0, 0>;
826*09537850SAkhilesh Sanikop #endif
827*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize16x32_CflSubsampler422
828*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x32][kSubsamplingType422] =
829*09537850SAkhilesh Sanikop CflSubsampler_C<16, 32, 12, uint16_t, 1, 0>;
830*09537850SAkhilesh Sanikop #endif
831*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize16x32_CflSubsampler420
832*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize16x32][kSubsamplingType420] =
833*09537850SAkhilesh Sanikop CflSubsampler_C<16, 32, 12, uint16_t, 1, 1>;
834*09537850SAkhilesh Sanikop #endif
835*09537850SAkhilesh Sanikop
836*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize32x8_CflIntraPredictor
837*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize32x8] =
838*09537850SAkhilesh Sanikop CflIntraPredictor_C<32, 8, 12, uint16_t>;
839*09537850SAkhilesh Sanikop #endif
840*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize32x8_CflSubsampler444
841*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize32x8][kSubsamplingType444] =
842*09537850SAkhilesh Sanikop CflSubsampler_C<32, 8, 12, uint16_t, 0, 0>;
843*09537850SAkhilesh Sanikop #endif
844*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize32x8_CflSubsampler422
845*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize32x8][kSubsamplingType422] =
846*09537850SAkhilesh Sanikop CflSubsampler_C<32, 8, 12, uint16_t, 1, 0>;
847*09537850SAkhilesh Sanikop #endif
848*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize32x8_CflSubsampler420
849*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize32x8][kSubsamplingType420] =
850*09537850SAkhilesh Sanikop CflSubsampler_C<32, 8, 12, uint16_t, 1, 1>;
851*09537850SAkhilesh Sanikop #endif
852*09537850SAkhilesh Sanikop
853*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize32x16_CflIntraPredictor
854*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize32x16] =
855*09537850SAkhilesh Sanikop CflIntraPredictor_C<32, 16, 12, uint16_t>;
856*09537850SAkhilesh Sanikop #endif
857*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize32x16_CflSubsampler444
858*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize32x16][kSubsamplingType444] =
859*09537850SAkhilesh Sanikop CflSubsampler_C<32, 16, 12, uint16_t, 0, 0>;
860*09537850SAkhilesh Sanikop #endif
861*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize32x16_CflSubsampler422
862*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize32x16][kSubsamplingType422] =
863*09537850SAkhilesh Sanikop CflSubsampler_C<32, 16, 12, uint16_t, 1, 0>;
864*09537850SAkhilesh Sanikop #endif
865*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize32x16_CflSubsampler420
866*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize32x16][kSubsamplingType420] =
867*09537850SAkhilesh Sanikop CflSubsampler_C<32, 16, 12, uint16_t, 1, 1>;
868*09537850SAkhilesh Sanikop #endif
869*09537850SAkhilesh Sanikop
870*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize32x32_CflIntraPredictor
871*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[kTransformSize32x32] =
872*09537850SAkhilesh Sanikop CflIntraPredictor_C<32, 32, 12, uint16_t>;
873*09537850SAkhilesh Sanikop #endif
874*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize32x32_CflSubsampler444
875*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize32x32][kSubsamplingType444] =
876*09537850SAkhilesh Sanikop CflSubsampler_C<32, 32, 12, uint16_t, 0, 0>;
877*09537850SAkhilesh Sanikop #endif
878*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize32x32_CflSubsampler422
879*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize32x32][kSubsamplingType422] =
880*09537850SAkhilesh Sanikop CflSubsampler_C<32, 32, 12, uint16_t, 1, 0>;
881*09537850SAkhilesh Sanikop #endif
882*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_TransformSize32x32_CflSubsampler420
883*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[kTransformSize32x32][kSubsamplingType420] =
884*09537850SAkhilesh Sanikop CflSubsampler_C<32, 32, 12, uint16_t, 1, 1>;
885*09537850SAkhilesh Sanikop #endif
886*09537850SAkhilesh Sanikop
887*09537850SAkhilesh Sanikop #endif // LIBGAV1_ENABLE_ALL_DSP_FUNCTIONS
888*09537850SAkhilesh Sanikop // Cfl predictors are available only for transform sizes with max(width,
889*09537850SAkhilesh Sanikop // height) <= 32. Set all others to nullptr.
890*09537850SAkhilesh Sanikop for (const auto i : kTransformSizesLargerThan32x32) {
891*09537850SAkhilesh Sanikop dsp->cfl_intra_predictors[i] = nullptr;
892*09537850SAkhilesh Sanikop for (int j = 0; j < kNumSubsamplingTypes; ++j) {
893*09537850SAkhilesh Sanikop dsp->cfl_subsamplers[i][j] = nullptr;
894*09537850SAkhilesh Sanikop }
895*09537850SAkhilesh Sanikop }
896*09537850SAkhilesh Sanikop } // NOLINT(readability/fn_size)
897*09537850SAkhilesh Sanikop #endif // LIBGAV1_MAX_BITDEPTH == 12
898*09537850SAkhilesh Sanikop
899*09537850SAkhilesh Sanikop #undef INIT_CFL_INTRAPREDICTOR_WxH
900*09537850SAkhilesh Sanikop #undef INIT_CFL_INTRAPREDICTORS
901*09537850SAkhilesh Sanikop
902*09537850SAkhilesh Sanikop } // namespace
903*09537850SAkhilesh Sanikop
IntraPredCflInit_C()904*09537850SAkhilesh Sanikop void IntraPredCflInit_C() {
905*09537850SAkhilesh Sanikop Init8bpp();
906*09537850SAkhilesh Sanikop #if LIBGAV1_MAX_BITDEPTH >= 10
907*09537850SAkhilesh Sanikop Init10bpp();
908*09537850SAkhilesh Sanikop #endif
909*09537850SAkhilesh Sanikop #if LIBGAV1_MAX_BITDEPTH == 12
910*09537850SAkhilesh Sanikop Init12bpp();
911*09537850SAkhilesh Sanikop #endif
912*09537850SAkhilesh Sanikop }
913*09537850SAkhilesh Sanikop
914*09537850SAkhilesh Sanikop } // namespace dsp
915*09537850SAkhilesh Sanikop } // namespace libgav1
916