1*09537850SAkhilesh Sanikop // Copyright 2019 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/mask_blend.h"
16*09537850SAkhilesh Sanikop
17*09537850SAkhilesh Sanikop #include <cassert>
18*09537850SAkhilesh Sanikop #include <cstddef>
19*09537850SAkhilesh Sanikop #include <cstdint>
20*09537850SAkhilesh Sanikop
21*09537850SAkhilesh Sanikop #include "src/dsp/dsp.h"
22*09537850SAkhilesh Sanikop #include "src/utils/common.h"
23*09537850SAkhilesh Sanikop
24*09537850SAkhilesh Sanikop namespace libgav1 {
25*09537850SAkhilesh Sanikop namespace dsp {
26*09537850SAkhilesh Sanikop namespace {
27*09537850SAkhilesh Sanikop
GetMaskValue(const uint8_t * LIBGAV1_RESTRICT mask,const uint8_t * LIBGAV1_RESTRICT mask_next_row,int x,int subsampling_x,int subsampling_y)28*09537850SAkhilesh Sanikop uint8_t GetMaskValue(const uint8_t* LIBGAV1_RESTRICT mask,
29*09537850SAkhilesh Sanikop const uint8_t* LIBGAV1_RESTRICT mask_next_row, int x,
30*09537850SAkhilesh Sanikop int subsampling_x, int subsampling_y) {
31*09537850SAkhilesh Sanikop if ((subsampling_x | subsampling_y) == 0) {
32*09537850SAkhilesh Sanikop return mask[x];
33*09537850SAkhilesh Sanikop }
34*09537850SAkhilesh Sanikop if (subsampling_x == 1 && subsampling_y == 0) {
35*09537850SAkhilesh Sanikop return static_cast<uint8_t>(RightShiftWithRounding(
36*09537850SAkhilesh Sanikop mask[MultiplyBy2(x)] + mask[MultiplyBy2(x) + 1], 1));
37*09537850SAkhilesh Sanikop }
38*09537850SAkhilesh Sanikop assert(subsampling_x == 1 && subsampling_y == 1);
39*09537850SAkhilesh Sanikop return static_cast<uint8_t>(RightShiftWithRounding(
40*09537850SAkhilesh Sanikop mask[MultiplyBy2(x)] + mask[MultiplyBy2(x) + 1] +
41*09537850SAkhilesh Sanikop mask_next_row[MultiplyBy2(x)] + mask_next_row[MultiplyBy2(x) + 1],
42*09537850SAkhilesh Sanikop 2));
43*09537850SAkhilesh Sanikop }
44*09537850SAkhilesh Sanikop
45*09537850SAkhilesh Sanikop template <int bitdepth, typename Pixel, bool is_inter_intra, int subsampling_x,
46*09537850SAkhilesh Sanikop int subsampling_y>
MaskBlend_C(const void * LIBGAV1_RESTRICT prediction_0,const void * LIBGAV1_RESTRICT prediction_1,const ptrdiff_t prediction_stride_1,const uint8_t * LIBGAV1_RESTRICT mask,const ptrdiff_t mask_stride,const int width,const int height,void * LIBGAV1_RESTRICT dest,const ptrdiff_t dest_stride)47*09537850SAkhilesh Sanikop void MaskBlend_C(const void* LIBGAV1_RESTRICT prediction_0,
48*09537850SAkhilesh Sanikop const void* LIBGAV1_RESTRICT prediction_1,
49*09537850SAkhilesh Sanikop const ptrdiff_t prediction_stride_1,
50*09537850SAkhilesh Sanikop const uint8_t* LIBGAV1_RESTRICT mask,
51*09537850SAkhilesh Sanikop const ptrdiff_t mask_stride, const int width, const int height,
52*09537850SAkhilesh Sanikop void* LIBGAV1_RESTRICT dest, const ptrdiff_t dest_stride) {
53*09537850SAkhilesh Sanikop static_assert(!(bitdepth == 8 && is_inter_intra), "");
54*09537850SAkhilesh Sanikop assert(mask != nullptr);
55*09537850SAkhilesh Sanikop using PredType =
56*09537850SAkhilesh Sanikop typename std::conditional<bitdepth == 8, int16_t, uint16_t>::type;
57*09537850SAkhilesh Sanikop const auto* pred_0 = static_cast<const PredType*>(prediction_0);
58*09537850SAkhilesh Sanikop const auto* pred_1 = static_cast<const PredType*>(prediction_1);
59*09537850SAkhilesh Sanikop auto* dst = static_cast<Pixel*>(dest);
60*09537850SAkhilesh Sanikop const ptrdiff_t dst_stride = dest_stride / sizeof(Pixel);
61*09537850SAkhilesh Sanikop constexpr int step_y = subsampling_y ? 2 : 1;
62*09537850SAkhilesh Sanikop const uint8_t* mask_next_row = mask + mask_stride;
63*09537850SAkhilesh Sanikop // 7.11.3.2 Rounding variables derivation process
64*09537850SAkhilesh Sanikop // 2 * FILTER_BITS(7) - (InterRound0(3|5) + InterRound1(7))
65*09537850SAkhilesh Sanikop constexpr int inter_post_round_bits = (bitdepth == 12) ? 2 : 4;
66*09537850SAkhilesh Sanikop for (int y = 0; y < height; ++y) {
67*09537850SAkhilesh Sanikop for (int x = 0; x < width; ++x) {
68*09537850SAkhilesh Sanikop const uint8_t mask_value =
69*09537850SAkhilesh Sanikop GetMaskValue(mask, mask_next_row, x, subsampling_x, subsampling_y);
70*09537850SAkhilesh Sanikop if (is_inter_intra) {
71*09537850SAkhilesh Sanikop dst[x] = static_cast<Pixel>(RightShiftWithRounding(
72*09537850SAkhilesh Sanikop mask_value * pred_1[x] + (64 - mask_value) * pred_0[x], 6));
73*09537850SAkhilesh Sanikop } else {
74*09537850SAkhilesh Sanikop assert(prediction_stride_1 == width);
75*09537850SAkhilesh Sanikop int res = (mask_value * pred_0[x] + (64 - mask_value) * pred_1[x]) >> 6;
76*09537850SAkhilesh Sanikop res -= (bitdepth == 8) ? 0 : kCompoundOffset;
77*09537850SAkhilesh Sanikop dst[x] = static_cast<Pixel>(
78*09537850SAkhilesh Sanikop Clip3(RightShiftWithRounding(res, inter_post_round_bits), 0,
79*09537850SAkhilesh Sanikop (1 << bitdepth) - 1));
80*09537850SAkhilesh Sanikop }
81*09537850SAkhilesh Sanikop }
82*09537850SAkhilesh Sanikop dst += dst_stride;
83*09537850SAkhilesh Sanikop mask += mask_stride * step_y;
84*09537850SAkhilesh Sanikop mask_next_row += mask_stride * step_y;
85*09537850SAkhilesh Sanikop pred_0 += width;
86*09537850SAkhilesh Sanikop pred_1 += prediction_stride_1;
87*09537850SAkhilesh Sanikop }
88*09537850SAkhilesh Sanikop }
89*09537850SAkhilesh Sanikop
90*09537850SAkhilesh Sanikop template <int subsampling_x, int subsampling_y>
InterIntraMaskBlend8bpp_C(const uint8_t * LIBGAV1_RESTRICT prediction_0,uint8_t * LIBGAV1_RESTRICT prediction_1,const ptrdiff_t prediction_stride_1,const uint8_t * LIBGAV1_RESTRICT mask,const ptrdiff_t mask_stride,const int width,const int height)91*09537850SAkhilesh Sanikop void InterIntraMaskBlend8bpp_C(const uint8_t* LIBGAV1_RESTRICT prediction_0,
92*09537850SAkhilesh Sanikop uint8_t* LIBGAV1_RESTRICT prediction_1,
93*09537850SAkhilesh Sanikop const ptrdiff_t prediction_stride_1,
94*09537850SAkhilesh Sanikop const uint8_t* LIBGAV1_RESTRICT mask,
95*09537850SAkhilesh Sanikop const ptrdiff_t mask_stride, const int width,
96*09537850SAkhilesh Sanikop const int height) {
97*09537850SAkhilesh Sanikop assert(mask != nullptr);
98*09537850SAkhilesh Sanikop constexpr int step_y = subsampling_y ? 2 : 1;
99*09537850SAkhilesh Sanikop const uint8_t* mask_next_row = mask + mask_stride;
100*09537850SAkhilesh Sanikop for (int y = 0; y < height; ++y) {
101*09537850SAkhilesh Sanikop for (int x = 0; x < width; ++x) {
102*09537850SAkhilesh Sanikop const uint8_t mask_value =
103*09537850SAkhilesh Sanikop GetMaskValue(mask, mask_next_row, x, subsampling_x, subsampling_y);
104*09537850SAkhilesh Sanikop prediction_1[x] = static_cast<uint8_t>(RightShiftWithRounding(
105*09537850SAkhilesh Sanikop mask_value * prediction_1[x] + (64 - mask_value) * prediction_0[x],
106*09537850SAkhilesh Sanikop 6));
107*09537850SAkhilesh Sanikop }
108*09537850SAkhilesh Sanikop mask += mask_stride * step_y;
109*09537850SAkhilesh Sanikop mask_next_row += mask_stride * step_y;
110*09537850SAkhilesh Sanikop prediction_0 += width;
111*09537850SAkhilesh Sanikop prediction_1 += prediction_stride_1;
112*09537850SAkhilesh Sanikop }
113*09537850SAkhilesh Sanikop }
114*09537850SAkhilesh Sanikop
Init8bpp()115*09537850SAkhilesh Sanikop void Init8bpp() {
116*09537850SAkhilesh Sanikop Dsp* const dsp = dsp_internal::GetWritableDspTable(8);
117*09537850SAkhilesh Sanikop assert(dsp != nullptr);
118*09537850SAkhilesh Sanikop #if LIBGAV1_ENABLE_ALL_DSP_FUNCTIONS
119*09537850SAkhilesh Sanikop dsp->mask_blend[0][0] = MaskBlend_C<8, uint8_t, false, 0, 0>;
120*09537850SAkhilesh Sanikop dsp->mask_blend[1][0] = MaskBlend_C<8, uint8_t, false, 1, 0>;
121*09537850SAkhilesh Sanikop dsp->mask_blend[2][0] = MaskBlend_C<8, uint8_t, false, 1, 1>;
122*09537850SAkhilesh Sanikop // The is_inter_intra index of mask_blend[][] is replaced by
123*09537850SAkhilesh Sanikop // inter_intra_mask_blend_8bpp[] in 8-bit.
124*09537850SAkhilesh Sanikop dsp->mask_blend[0][1] = nullptr;
125*09537850SAkhilesh Sanikop dsp->mask_blend[1][1] = nullptr;
126*09537850SAkhilesh Sanikop dsp->mask_blend[2][1] = nullptr;
127*09537850SAkhilesh Sanikop dsp->inter_intra_mask_blend_8bpp[0] = InterIntraMaskBlend8bpp_C<0, 0>;
128*09537850SAkhilesh Sanikop dsp->inter_intra_mask_blend_8bpp[1] = InterIntraMaskBlend8bpp_C<1, 0>;
129*09537850SAkhilesh Sanikop dsp->inter_intra_mask_blend_8bpp[2] = InterIntraMaskBlend8bpp_C<1, 1>;
130*09537850SAkhilesh Sanikop #else // !LIBGAV1_ENABLE_ALL_DSP_FUNCTIONS
131*09537850SAkhilesh Sanikop static_cast<void>(dsp);
132*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_MaskBlend444
133*09537850SAkhilesh Sanikop dsp->mask_blend[0][0] = MaskBlend_C<8, uint8_t, false, 0, 0>;
134*09537850SAkhilesh Sanikop #endif
135*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_MaskBlend422
136*09537850SAkhilesh Sanikop dsp->mask_blend[1][0] = MaskBlend_C<8, uint8_t, false, 1, 0>;
137*09537850SAkhilesh Sanikop #endif
138*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_MaskBlend420
139*09537850SAkhilesh Sanikop dsp->mask_blend[2][0] = MaskBlend_C<8, uint8_t, false, 1, 1>;
140*09537850SAkhilesh Sanikop #endif
141*09537850SAkhilesh Sanikop // The is_inter_intra index of mask_blend[][] is replaced by
142*09537850SAkhilesh Sanikop // inter_intra_mask_blend_8bpp[] in 8-bit.
143*09537850SAkhilesh Sanikop dsp->mask_blend[0][1] = nullptr;
144*09537850SAkhilesh Sanikop dsp->mask_blend[1][1] = nullptr;
145*09537850SAkhilesh Sanikop dsp->mask_blend[2][1] = nullptr;
146*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_InterIntraMaskBlend8bpp444
147*09537850SAkhilesh Sanikop dsp->inter_intra_mask_blend_8bpp[0] = InterIntraMaskBlend8bpp_C<0, 0>;
148*09537850SAkhilesh Sanikop #endif
149*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_InterIntraMaskBlend8bpp422
150*09537850SAkhilesh Sanikop dsp->inter_intra_mask_blend_8bpp[1] = InterIntraMaskBlend8bpp_C<1, 0>;
151*09537850SAkhilesh Sanikop #endif
152*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp8bpp_InterIntraMaskBlend8bpp420
153*09537850SAkhilesh Sanikop dsp->inter_intra_mask_blend_8bpp[2] = InterIntraMaskBlend8bpp_C<1, 1>;
154*09537850SAkhilesh Sanikop #endif
155*09537850SAkhilesh Sanikop static_cast<void>(GetMaskValue);
156*09537850SAkhilesh Sanikop #endif // LIBGAV1_ENABLE_ALL_DSP_FUNCTIONS
157*09537850SAkhilesh Sanikop }
158*09537850SAkhilesh Sanikop
159*09537850SAkhilesh Sanikop #if LIBGAV1_MAX_BITDEPTH >= 10
Init10bpp()160*09537850SAkhilesh Sanikop void Init10bpp() {
161*09537850SAkhilesh Sanikop Dsp* const dsp = dsp_internal::GetWritableDspTable(10);
162*09537850SAkhilesh Sanikop assert(dsp != nullptr);
163*09537850SAkhilesh Sanikop #if LIBGAV1_ENABLE_ALL_DSP_FUNCTIONS
164*09537850SAkhilesh Sanikop dsp->mask_blend[0][0] = MaskBlend_C<10, uint16_t, false, 0, 0>;
165*09537850SAkhilesh Sanikop dsp->mask_blend[1][0] = MaskBlend_C<10, uint16_t, false, 1, 0>;
166*09537850SAkhilesh Sanikop dsp->mask_blend[2][0] = MaskBlend_C<10, uint16_t, false, 1, 1>;
167*09537850SAkhilesh Sanikop dsp->mask_blend[0][1] = MaskBlend_C<10, uint16_t, true, 0, 0>;
168*09537850SAkhilesh Sanikop dsp->mask_blend[1][1] = MaskBlend_C<10, uint16_t, true, 1, 0>;
169*09537850SAkhilesh Sanikop dsp->mask_blend[2][1] = MaskBlend_C<10, uint16_t, true, 1, 1>;
170*09537850SAkhilesh Sanikop // These are only used with 8-bit.
171*09537850SAkhilesh Sanikop dsp->inter_intra_mask_blend_8bpp[0] = nullptr;
172*09537850SAkhilesh Sanikop dsp->inter_intra_mask_blend_8bpp[1] = nullptr;
173*09537850SAkhilesh Sanikop dsp->inter_intra_mask_blend_8bpp[2] = nullptr;
174*09537850SAkhilesh Sanikop #else // !LIBGAV1_ENABLE_ALL_DSP_FUNCTIONS
175*09537850SAkhilesh Sanikop static_cast<void>(dsp);
176*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_MaskBlend444
177*09537850SAkhilesh Sanikop dsp->mask_blend[0][0] = MaskBlend_C<10, uint16_t, false, 0, 0>;
178*09537850SAkhilesh Sanikop #endif
179*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_MaskBlend422
180*09537850SAkhilesh Sanikop dsp->mask_blend[1][0] = MaskBlend_C<10, uint16_t, false, 1, 0>;
181*09537850SAkhilesh Sanikop #endif
182*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_MaskBlend420
183*09537850SAkhilesh Sanikop dsp->mask_blend[2][0] = MaskBlend_C<10, uint16_t, false, 1, 1>;
184*09537850SAkhilesh Sanikop #endif
185*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_MaskBlendInterIntra444
186*09537850SAkhilesh Sanikop dsp->mask_blend[0][1] = MaskBlend_C<10, uint16_t, true, 0, 0>;
187*09537850SAkhilesh Sanikop #endif
188*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_MaskBlendInterIntra422
189*09537850SAkhilesh Sanikop dsp->mask_blend[1][1] = MaskBlend_C<10, uint16_t, true, 1, 0>;
190*09537850SAkhilesh Sanikop #endif
191*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp10bpp_MaskBlendInterIntra420
192*09537850SAkhilesh Sanikop dsp->mask_blend[2][1] = MaskBlend_C<10, uint16_t, true, 1, 1>;
193*09537850SAkhilesh Sanikop #endif
194*09537850SAkhilesh Sanikop // These are only used with 8-bit.
195*09537850SAkhilesh Sanikop dsp->inter_intra_mask_blend_8bpp[0] = nullptr;
196*09537850SAkhilesh Sanikop dsp->inter_intra_mask_blend_8bpp[1] = nullptr;
197*09537850SAkhilesh Sanikop dsp->inter_intra_mask_blend_8bpp[2] = nullptr;
198*09537850SAkhilesh Sanikop #endif // LIBGAV1_ENABLE_ALL_DSP_FUNCTIONS
199*09537850SAkhilesh Sanikop }
200*09537850SAkhilesh Sanikop #endif // LIBGAV1_MAX_BITDEPTH >= 10
201*09537850SAkhilesh Sanikop
202*09537850SAkhilesh Sanikop #if LIBGAV1_MAX_BITDEPTH == 12
Init12bpp()203*09537850SAkhilesh Sanikop void Init12bpp() {
204*09537850SAkhilesh Sanikop Dsp* const dsp = dsp_internal::GetWritableDspTable(12);
205*09537850SAkhilesh Sanikop assert(dsp != nullptr);
206*09537850SAkhilesh Sanikop #if LIBGAV1_ENABLE_ALL_DSP_FUNCTIONS
207*09537850SAkhilesh Sanikop dsp->mask_blend[0][0] = MaskBlend_C<12, uint16_t, false, 0, 0>;
208*09537850SAkhilesh Sanikop dsp->mask_blend[1][0] = MaskBlend_C<12, uint16_t, false, 1, 0>;
209*09537850SAkhilesh Sanikop dsp->mask_blend[2][0] = MaskBlend_C<12, uint16_t, false, 1, 1>;
210*09537850SAkhilesh Sanikop dsp->mask_blend[0][1] = MaskBlend_C<12, uint16_t, true, 0, 0>;
211*09537850SAkhilesh Sanikop dsp->mask_blend[1][1] = MaskBlend_C<12, uint16_t, true, 1, 0>;
212*09537850SAkhilesh Sanikop dsp->mask_blend[2][1] = MaskBlend_C<12, uint16_t, true, 1, 1>;
213*09537850SAkhilesh Sanikop // These are only used with 8-bit.
214*09537850SAkhilesh Sanikop dsp->inter_intra_mask_blend_8bpp[0] = nullptr;
215*09537850SAkhilesh Sanikop dsp->inter_intra_mask_blend_8bpp[1] = nullptr;
216*09537850SAkhilesh Sanikop dsp->inter_intra_mask_blend_8bpp[2] = nullptr;
217*09537850SAkhilesh Sanikop #else // !LIBGAV1_ENABLE_ALL_DSP_FUNCTIONS
218*09537850SAkhilesh Sanikop static_cast<void>(dsp);
219*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_MaskBlend444
220*09537850SAkhilesh Sanikop dsp->mask_blend[0][0] = MaskBlend_C<12, uint16_t, false, 0, 0>;
221*09537850SAkhilesh Sanikop #endif
222*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_MaskBlend422
223*09537850SAkhilesh Sanikop dsp->mask_blend[1][0] = MaskBlend_C<12, uint16_t, false, 1, 0>;
224*09537850SAkhilesh Sanikop #endif
225*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_MaskBlend420
226*09537850SAkhilesh Sanikop dsp->mask_blend[2][0] = MaskBlend_C<12, uint16_t, false, 1, 1>;
227*09537850SAkhilesh Sanikop #endif
228*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_MaskBlendInterIntra444
229*09537850SAkhilesh Sanikop dsp->mask_blend[0][1] = MaskBlend_C<12, uint16_t, true, 0, 0>;
230*09537850SAkhilesh Sanikop #endif
231*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_MaskBlendInterIntra422
232*09537850SAkhilesh Sanikop dsp->mask_blend[1][1] = MaskBlend_C<12, uint16_t, true, 1, 0>;
233*09537850SAkhilesh Sanikop #endif
234*09537850SAkhilesh Sanikop #ifndef LIBGAV1_Dsp12bpp_MaskBlendInterIntra420
235*09537850SAkhilesh Sanikop dsp->mask_blend[2][1] = MaskBlend_C<12, uint16_t, true, 1, 1>;
236*09537850SAkhilesh Sanikop #endif
237*09537850SAkhilesh Sanikop // These are only used with 8-bit.
238*09537850SAkhilesh Sanikop dsp->inter_intra_mask_blend_8bpp[0] = nullptr;
239*09537850SAkhilesh Sanikop dsp->inter_intra_mask_blend_8bpp[1] = nullptr;
240*09537850SAkhilesh Sanikop dsp->inter_intra_mask_blend_8bpp[2] = nullptr;
241*09537850SAkhilesh Sanikop #endif // LIBGAV1_ENABLE_ALL_DSP_FUNCTIONS
242*09537850SAkhilesh Sanikop }
243*09537850SAkhilesh Sanikop #endif // LIBGAV1_MAX_BITDEPTH == 12
244*09537850SAkhilesh Sanikop
245*09537850SAkhilesh Sanikop } // namespace
246*09537850SAkhilesh Sanikop
MaskBlendInit_C()247*09537850SAkhilesh Sanikop void MaskBlendInit_C() {
248*09537850SAkhilesh Sanikop Init8bpp();
249*09537850SAkhilesh Sanikop #if LIBGAV1_MAX_BITDEPTH >= 10
250*09537850SAkhilesh Sanikop Init10bpp();
251*09537850SAkhilesh Sanikop #endif
252*09537850SAkhilesh Sanikop #if LIBGAV1_MAX_BITDEPTH == 12
253*09537850SAkhilesh Sanikop Init12bpp();
254*09537850SAkhilesh Sanikop #endif
255*09537850SAkhilesh Sanikop }
256*09537850SAkhilesh Sanikop
257*09537850SAkhilesh Sanikop } // namespace dsp
258*09537850SAkhilesh Sanikop } // namespace libgav1
259