Line data Source code
1 : /*
2 : * Copyright (c) 2016, Alliance for Open Media. All rights reserved
3 : *
4 : * This source code is subject to the terms of the BSD 2 Clause License and
5 : * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
6 : * was not distributed with this source code in the LICENSE file, you can
7 : * obtain it at www.aomedia.org/license/software. If the Alliance for Open
8 : * Media Patent License 1.0 was not distributed with this source code in the
9 : * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
10 : */
11 :
12 : #include "./av1_rtcd.h"
13 : #include "./aom_config.h"
14 : #include "./aom_dsp_rtcd.h"
15 :
16 : #include "av1/common/idct.h"
17 : #include "av1/encoder/hybrid_fwd_txfm.h"
18 :
19 : #if CONFIG_CHROMA_2X2
20 : static void fwd_txfm_2x2(const int16_t *src_diff, tran_low_t *coeff,
21 : int diff_stride, TX_TYPE tx_type, int lossless) {
22 : tran_high_t a1 = src_diff[0];
23 : tran_high_t b1 = src_diff[1];
24 : tran_high_t c1 = src_diff[diff_stride];
25 : tran_high_t d1 = src_diff[1 + diff_stride];
26 :
27 : tran_high_t a2 = a1 + c1;
28 : tran_high_t b2 = b1 + d1;
29 : tran_high_t c2 = a1 - c1;
30 : tran_high_t d2 = b1 - d1;
31 :
32 : a1 = a2 + b2;
33 : b1 = a2 - b2;
34 : c1 = c2 + d2;
35 : d1 = c2 - d2;
36 :
37 : coeff[0] = (tran_low_t)(4 * a1);
38 : coeff[1] = (tran_low_t)(4 * b1);
39 : coeff[2] = (tran_low_t)(4 * c1);
40 : coeff[3] = (tran_low_t)(4 * d1);
41 :
42 : (void)tx_type;
43 : (void)lossless;
44 : }
45 : #endif
46 :
47 0 : static void fwd_txfm_4x4(const int16_t *src_diff, tran_low_t *coeff,
48 : int diff_stride, TX_TYPE tx_type, int lossless) {
49 0 : if (lossless) {
50 0 : assert(tx_type == DCT_DCT);
51 0 : av1_fwht4x4(src_diff, coeff, diff_stride);
52 0 : return;
53 : }
54 :
55 0 : av1_fht4x4(src_diff, coeff, diff_stride, tx_type);
56 : }
57 :
58 0 : static void fwd_txfm_4x8(const int16_t *src_diff, tran_low_t *coeff,
59 : int diff_stride, TX_TYPE tx_type,
60 : FWD_TXFM_OPT fwd_txfm_opt) {
61 : (void)fwd_txfm_opt;
62 0 : av1_fht4x8(src_diff, coeff, diff_stride, tx_type);
63 0 : }
64 :
65 0 : static void fwd_txfm_8x4(const int16_t *src_diff, tran_low_t *coeff,
66 : int diff_stride, TX_TYPE tx_type,
67 : FWD_TXFM_OPT fwd_txfm_opt) {
68 : (void)fwd_txfm_opt;
69 0 : av1_fht8x4(src_diff, coeff, diff_stride, tx_type);
70 0 : }
71 :
72 0 : static void fwd_txfm_8x16(const int16_t *src_diff, tran_low_t *coeff,
73 : int diff_stride, TX_TYPE tx_type,
74 : FWD_TXFM_OPT fwd_txfm_opt) {
75 : (void)fwd_txfm_opt;
76 0 : av1_fht8x16(src_diff, coeff, diff_stride, tx_type);
77 0 : }
78 :
79 0 : static void fwd_txfm_16x8(const int16_t *src_diff, tran_low_t *coeff,
80 : int diff_stride, TX_TYPE tx_type,
81 : FWD_TXFM_OPT fwd_txfm_opt) {
82 : (void)fwd_txfm_opt;
83 0 : av1_fht16x8(src_diff, coeff, diff_stride, tx_type);
84 0 : }
85 :
86 0 : static void fwd_txfm_16x32(const int16_t *src_diff, tran_low_t *coeff,
87 : int diff_stride, TX_TYPE tx_type,
88 : FWD_TXFM_OPT fwd_txfm_opt) {
89 : (void)fwd_txfm_opt;
90 0 : av1_fht16x32(src_diff, coeff, diff_stride, tx_type);
91 0 : }
92 :
93 0 : static void fwd_txfm_32x16(const int16_t *src_diff, tran_low_t *coeff,
94 : int diff_stride, TX_TYPE tx_type,
95 : FWD_TXFM_OPT fwd_txfm_opt) {
96 : (void)fwd_txfm_opt;
97 0 : av1_fht32x16(src_diff, coeff, diff_stride, tx_type);
98 0 : }
99 :
100 0 : static void fwd_txfm_8x8(const int16_t *src_diff, tran_low_t *coeff,
101 : int diff_stride, TX_TYPE tx_type,
102 : FWD_TXFM_OPT fwd_txfm_opt) {
103 : (void)fwd_txfm_opt;
104 0 : av1_fht8x8(src_diff, coeff, diff_stride, tx_type);
105 0 : }
106 :
107 0 : static void fwd_txfm_16x16(const int16_t *src_diff, tran_low_t *coeff,
108 : int diff_stride, TX_TYPE tx_type,
109 : FWD_TXFM_OPT fwd_txfm_opt) {
110 : (void)fwd_txfm_opt;
111 0 : av1_fht16x16(src_diff, coeff, diff_stride, tx_type);
112 0 : }
113 :
114 0 : static void fwd_txfm_32x32(const int16_t *src_diff, tran_low_t *coeff,
115 : int diff_stride, TX_TYPE tx_type,
116 : FWD_TXFM_OPT fwd_txfm_opt) {
117 : (void)fwd_txfm_opt;
118 0 : av1_fht32x32(src_diff, coeff, diff_stride, tx_type);
119 0 : }
120 :
121 : #if CONFIG_TX64X64
122 : static void fwd_txfm_64x64(const int16_t *src_diff, tran_low_t *coeff,
123 : int diff_stride, TX_TYPE tx_type,
124 : FWD_TXFM_OPT fwd_txfm_opt) {
125 : (void)fwd_txfm_opt;
126 : #if CONFIG_EXT_TX
127 : if (tx_type == IDTX)
128 : av1_fwd_idtx_c(src_diff, coeff, diff_stride, 64, tx_type);
129 : else
130 : #endif
131 : av1_fht64x64(src_diff, coeff, diff_stride, tx_type);
132 : }
133 : #endif // CONFIG_TX64X64
134 :
135 : #if CONFIG_EXT_TX && CONFIG_RECT_TX && CONFIG_RECT_TX_EXT
136 : static void fwd_txfm_16x4(const int16_t *src_diff, tran_low_t *coeff,
137 : int diff_stride, TX_TYPE tx_type,
138 : FWD_TXFM_OPT fwd_txfm_opt) {
139 : (void)fwd_txfm_opt;
140 : av1_fht16x4(src_diff, coeff, diff_stride, tx_type);
141 : }
142 :
143 : static void fwd_txfm_4x16(const int16_t *src_diff, tran_low_t *coeff,
144 : int diff_stride, TX_TYPE tx_type,
145 : FWD_TXFM_OPT fwd_txfm_opt) {
146 : (void)fwd_txfm_opt;
147 : av1_fht4x16(src_diff, coeff, diff_stride, tx_type);
148 : }
149 :
150 : static void fwd_txfm_32x8(const int16_t *src_diff, tran_low_t *coeff,
151 : int diff_stride, TX_TYPE tx_type,
152 : FWD_TXFM_OPT fwd_txfm_opt) {
153 : (void)fwd_txfm_opt;
154 : av1_fht32x8(src_diff, coeff, diff_stride, tx_type);
155 : }
156 :
157 : static void fwd_txfm_8x32(const int16_t *src_diff, tran_low_t *coeff,
158 : int diff_stride, TX_TYPE tx_type,
159 : FWD_TXFM_OPT fwd_txfm_opt) {
160 : (void)fwd_txfm_opt;
161 : av1_fht8x32(src_diff, coeff, diff_stride, tx_type);
162 : }
163 : #endif // CONFIG_EXT_TX && CONFIG_RECT_TX && CONFIG_RECT_TX_EXT
164 :
165 : #if CONFIG_HIGHBITDEPTH
166 : #if CONFIG_CHROMA_2X2
167 : static void highbd_fwd_txfm_2x2(const int16_t *src_diff, tran_low_t *coeff,
168 : int diff_stride, TX_TYPE tx_type, int lossless,
169 : const int bd) {
170 : tran_high_t a1 = src_diff[0];
171 : tran_high_t b1 = src_diff[1];
172 : tran_high_t c1 = src_diff[diff_stride];
173 : tran_high_t d1 = src_diff[1 + diff_stride];
174 :
175 : tran_high_t a2 = a1 + c1;
176 : tran_high_t b2 = b1 + d1;
177 : tran_high_t c2 = a1 - c1;
178 : tran_high_t d2 = b1 - d1;
179 :
180 : a1 = a2 + b2;
181 : b1 = a2 - b2;
182 : c1 = c2 + d2;
183 : d1 = c2 - d2;
184 :
185 : coeff[0] = (tran_low_t)(4 * a1);
186 : coeff[1] = (tran_low_t)(4 * b1);
187 : coeff[2] = (tran_low_t)(4 * c1);
188 : coeff[3] = (tran_low_t)(4 * d1);
189 :
190 : (void)tx_type;
191 : (void)lossless;
192 : (void)bd;
193 : }
194 : #endif
195 :
196 0 : static void highbd_fwd_txfm_4x4(const int16_t *src_diff, tran_low_t *coeff,
197 : int diff_stride, TX_TYPE tx_type, int lossless,
198 : const int bd) {
199 0 : if (lossless) {
200 0 : assert(tx_type == DCT_DCT);
201 0 : av1_highbd_fwht4x4(src_diff, coeff, diff_stride);
202 0 : return;
203 : }
204 :
205 0 : switch (tx_type) {
206 : case DCT_DCT:
207 : case ADST_DCT:
208 : case DCT_ADST:
209 : case ADST_ADST:
210 0 : av1_fwd_txfm2d_4x4(src_diff, coeff, diff_stride, tx_type, bd);
211 0 : break;
212 : #if CONFIG_EXT_TX
213 : case FLIPADST_DCT:
214 : case DCT_FLIPADST:
215 : case FLIPADST_FLIPADST:
216 : case ADST_FLIPADST:
217 : case FLIPADST_ADST:
218 0 : av1_fwd_txfm2d_4x4(src_diff, coeff, diff_stride, tx_type, bd);
219 0 : break;
220 : case V_DCT:
221 : case H_DCT:
222 : case V_ADST:
223 : case H_ADST:
224 : case V_FLIPADST:
225 : case H_FLIPADST:
226 0 : av1_highbd_fht4x4_c(src_diff, coeff, diff_stride, tx_type);
227 0 : break;
228 0 : case IDTX: av1_fwd_idtx_c(src_diff, coeff, diff_stride, 4, tx_type); break;
229 : #endif // CONFIG_EXT_TX
230 0 : default: assert(0);
231 : }
232 : }
233 :
234 0 : static void highbd_fwd_txfm_4x8(const int16_t *src_diff, tran_low_t *coeff,
235 : int diff_stride, TX_TYPE tx_type,
236 : FWD_TXFM_OPT fwd_txfm_opt, const int bd) {
237 : (void)fwd_txfm_opt;
238 : (void)bd;
239 0 : av1_highbd_fht4x8(src_diff, coeff, diff_stride, tx_type);
240 0 : }
241 :
242 0 : static void highbd_fwd_txfm_8x4(const int16_t *src_diff, tran_low_t *coeff,
243 : int diff_stride, TX_TYPE tx_type,
244 : FWD_TXFM_OPT fwd_txfm_opt, const int bd) {
245 : (void)fwd_txfm_opt;
246 : (void)bd;
247 0 : av1_highbd_fht8x4(src_diff, coeff, diff_stride, tx_type);
248 0 : }
249 :
250 0 : static void highbd_fwd_txfm_8x16(const int16_t *src_diff, tran_low_t *coeff,
251 : int diff_stride, TX_TYPE tx_type,
252 : FWD_TXFM_OPT fwd_txfm_opt, const int bd) {
253 : (void)fwd_txfm_opt;
254 : (void)bd;
255 0 : av1_highbd_fht8x16(src_diff, coeff, diff_stride, tx_type);
256 0 : }
257 :
258 0 : static void highbd_fwd_txfm_16x8(const int16_t *src_diff, tran_low_t *coeff,
259 : int diff_stride, TX_TYPE tx_type,
260 : FWD_TXFM_OPT fwd_txfm_opt, const int bd) {
261 : (void)fwd_txfm_opt;
262 : (void)bd;
263 0 : av1_highbd_fht16x8(src_diff, coeff, diff_stride, tx_type);
264 0 : }
265 :
266 0 : static void highbd_fwd_txfm_16x32(const int16_t *src_diff, tran_low_t *coeff,
267 : int diff_stride, TX_TYPE tx_type,
268 : FWD_TXFM_OPT fwd_txfm_opt, const int bd) {
269 : (void)fwd_txfm_opt;
270 : (void)bd;
271 0 : av1_highbd_fht16x32(src_diff, coeff, diff_stride, tx_type);
272 0 : }
273 :
274 0 : static void highbd_fwd_txfm_32x16(const int16_t *src_diff, tran_low_t *coeff,
275 : int diff_stride, TX_TYPE tx_type,
276 : FWD_TXFM_OPT fwd_txfm_opt, const int bd) {
277 : (void)fwd_txfm_opt;
278 : (void)bd;
279 0 : av1_highbd_fht32x16(src_diff, coeff, diff_stride, tx_type);
280 0 : }
281 :
282 0 : static void highbd_fwd_txfm_8x8(const int16_t *src_diff, tran_low_t *coeff,
283 : int diff_stride, TX_TYPE tx_type,
284 : FWD_TXFM_OPT fwd_txfm_opt, const int bd) {
285 : (void)fwd_txfm_opt;
286 0 : switch (tx_type) {
287 : case DCT_DCT:
288 : case ADST_DCT:
289 : case DCT_ADST:
290 : case ADST_ADST:
291 0 : av1_fwd_txfm2d_8x8(src_diff, coeff, diff_stride, tx_type, bd);
292 0 : break;
293 : #if CONFIG_EXT_TX
294 : case FLIPADST_DCT:
295 : case DCT_FLIPADST:
296 : case FLIPADST_FLIPADST:
297 : case ADST_FLIPADST:
298 : case FLIPADST_ADST:
299 0 : av1_fwd_txfm2d_8x8(src_diff, coeff, diff_stride, tx_type, bd);
300 0 : break;
301 : case V_DCT:
302 : case H_DCT:
303 : case V_ADST:
304 : case H_ADST:
305 : case V_FLIPADST:
306 : case H_FLIPADST:
307 : // Use C version since DST exists only in C
308 0 : av1_highbd_fht8x8_c(src_diff, coeff, diff_stride, tx_type);
309 0 : break;
310 0 : case IDTX: av1_fwd_idtx_c(src_diff, coeff, diff_stride, 8, tx_type); break;
311 : #endif // CONFIG_EXT_TX
312 0 : default: assert(0);
313 : }
314 0 : }
315 :
316 0 : static void highbd_fwd_txfm_16x16(const int16_t *src_diff, tran_low_t *coeff,
317 : int diff_stride, TX_TYPE tx_type,
318 : FWD_TXFM_OPT fwd_txfm_opt, const int bd) {
319 : (void)fwd_txfm_opt;
320 0 : switch (tx_type) {
321 : case DCT_DCT:
322 : case ADST_DCT:
323 : case DCT_ADST:
324 : case ADST_ADST:
325 0 : av1_fwd_txfm2d_16x16(src_diff, coeff, diff_stride, tx_type, bd);
326 0 : break;
327 : #if CONFIG_EXT_TX
328 : case FLIPADST_DCT:
329 : case DCT_FLIPADST:
330 : case FLIPADST_FLIPADST:
331 : case ADST_FLIPADST:
332 : case FLIPADST_ADST:
333 0 : av1_fwd_txfm2d_16x16(src_diff, coeff, diff_stride, tx_type, bd);
334 0 : break;
335 : case V_DCT:
336 : case H_DCT:
337 : case V_ADST:
338 : case H_ADST:
339 : case V_FLIPADST:
340 : case H_FLIPADST:
341 : // Use C version since DST exists only in C
342 0 : av1_highbd_fht16x16_c(src_diff, coeff, diff_stride, tx_type);
343 0 : break;
344 0 : case IDTX: av1_fwd_idtx_c(src_diff, coeff, diff_stride, 16, tx_type); break;
345 : #endif // CONFIG_EXT_TX
346 0 : default: assert(0);
347 : }
348 0 : }
349 :
350 0 : static void highbd_fwd_txfm_32x32(const int16_t *src_diff, tran_low_t *coeff,
351 : int diff_stride, TX_TYPE tx_type,
352 : FWD_TXFM_OPT fwd_txfm_opt, const int bd) {
353 : (void)fwd_txfm_opt;
354 0 : switch (tx_type) {
355 : case DCT_DCT:
356 0 : av1_fwd_txfm2d_32x32(src_diff, coeff, diff_stride, tx_type, bd);
357 0 : break;
358 : #if CONFIG_EXT_TX
359 : case ADST_DCT:
360 : case DCT_ADST:
361 : case ADST_ADST:
362 : case FLIPADST_DCT:
363 : case DCT_FLIPADST:
364 : case FLIPADST_FLIPADST:
365 : case ADST_FLIPADST:
366 : case FLIPADST_ADST:
367 : case V_DCT:
368 : case H_DCT:
369 : case V_ADST:
370 : case H_ADST:
371 : case V_FLIPADST:
372 : case H_FLIPADST:
373 0 : av1_highbd_fht32x32_c(src_diff, coeff, diff_stride, tx_type);
374 0 : break;
375 0 : case IDTX: av1_fwd_idtx_c(src_diff, coeff, diff_stride, 32, tx_type); break;
376 : #endif // CONFIG_EXT_TX
377 0 : default: assert(0); break;
378 : }
379 0 : }
380 :
381 : #if CONFIG_TX64X64
382 : static void highbd_fwd_txfm_64x64(const int16_t *src_diff, tran_low_t *coeff,
383 : int diff_stride, TX_TYPE tx_type,
384 : FWD_TXFM_OPT fwd_txfm_opt, const int bd) {
385 : (void)fwd_txfm_opt;
386 : (void)bd;
387 : switch (tx_type) {
388 : case DCT_DCT:
389 : av1_highbd_fht64x64(src_diff, coeff, diff_stride, tx_type);
390 : break;
391 : #if CONFIG_EXT_TX
392 : case ADST_DCT:
393 : case DCT_ADST:
394 : case ADST_ADST:
395 : case FLIPADST_DCT:
396 : case DCT_FLIPADST:
397 : case FLIPADST_FLIPADST:
398 : case ADST_FLIPADST:
399 : case FLIPADST_ADST:
400 : case V_DCT:
401 : case H_DCT:
402 : case V_ADST:
403 : case H_ADST:
404 : case V_FLIPADST:
405 : case H_FLIPADST:
406 : av1_highbd_fht64x64(src_diff, coeff, diff_stride, tx_type);
407 : break;
408 : case IDTX: av1_fwd_idtx_c(src_diff, coeff, diff_stride, 64, tx_type); break;
409 : #endif // CONFIG_EXT_TX
410 : default: assert(0); break;
411 : }
412 : }
413 : #endif // CONFIG_TX64X64
414 : #endif // CONFIG_HIGHBITDEPTH
415 :
416 0 : void av1_fwd_txfm(const int16_t *src_diff, tran_low_t *coeff, int diff_stride,
417 : FWD_TXFM_PARAM *fwd_txfm_param) {
418 0 : const int fwd_txfm_opt = FWD_TXFM_OPT_NORMAL;
419 0 : const TX_TYPE tx_type = fwd_txfm_param->tx_type;
420 0 : const TX_SIZE tx_size = fwd_txfm_param->tx_size;
421 0 : const int lossless = fwd_txfm_param->lossless;
422 0 : switch (tx_size) {
423 : #if CONFIG_TX64X64
424 : case TX_64X64:
425 : fwd_txfm_64x64(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt);
426 : break;
427 : #endif // CONFIG_TX64X64
428 : case TX_32X32:
429 0 : fwd_txfm_32x32(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt);
430 0 : break;
431 : case TX_16X16:
432 0 : fwd_txfm_16x16(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt);
433 0 : break;
434 : case TX_8X8:
435 0 : fwd_txfm_8x8(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt);
436 0 : break;
437 : case TX_4X8:
438 0 : fwd_txfm_4x8(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt);
439 0 : break;
440 : case TX_8X4:
441 0 : fwd_txfm_8x4(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt);
442 0 : break;
443 : case TX_8X16:
444 0 : fwd_txfm_8x16(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt);
445 0 : break;
446 : case TX_16X8:
447 0 : fwd_txfm_16x8(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt);
448 0 : break;
449 : case TX_16X32:
450 0 : fwd_txfm_16x32(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt);
451 0 : break;
452 : case TX_32X16:
453 0 : fwd_txfm_32x16(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt);
454 0 : break;
455 : case TX_4X4:
456 0 : fwd_txfm_4x4(src_diff, coeff, diff_stride, tx_type, lossless);
457 0 : break;
458 : #if CONFIG_CHROMA_2X2
459 : case TX_2X2:
460 : fwd_txfm_2x2(src_diff, coeff, diff_stride, tx_type, lossless);
461 : break;
462 : #endif
463 : #if CONFIG_EXT_TX && CONFIG_RECT_TX && CONFIG_RECT_TX_EXT
464 : case TX_4X16:
465 : fwd_txfm_4x16(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt);
466 : break;
467 : case TX_16X4:
468 : fwd_txfm_16x4(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt);
469 : break;
470 : case TX_8X32:
471 : fwd_txfm_8x32(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt);
472 : break;
473 : case TX_32X8:
474 : fwd_txfm_32x8(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt);
475 : break;
476 : #endif // CONFIG_EXT_TX && CONFIG_RECT_TX && CONFIG_RECT_TX_EXT
477 0 : default: assert(0); break;
478 : }
479 0 : }
480 :
481 : #if CONFIG_HIGHBITDEPTH
482 0 : void av1_highbd_fwd_txfm(const int16_t *src_diff, tran_low_t *coeff,
483 : int diff_stride, FWD_TXFM_PARAM *fwd_txfm_param) {
484 0 : const int fwd_txfm_opt = FWD_TXFM_OPT_NORMAL;
485 0 : const TX_TYPE tx_type = fwd_txfm_param->tx_type;
486 0 : const TX_SIZE tx_size = fwd_txfm_param->tx_size;
487 0 : const int lossless = fwd_txfm_param->lossless;
488 0 : const int bd = fwd_txfm_param->bd;
489 0 : switch (tx_size) {
490 : #if CONFIG_TX64X64
491 : case TX_64X64:
492 : highbd_fwd_txfm_64x64(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt,
493 : bd);
494 : break;
495 : #endif // CONFIG_TX64X64
496 : case TX_32X32:
497 0 : highbd_fwd_txfm_32x32(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt,
498 : bd);
499 0 : break;
500 : case TX_16X16:
501 0 : highbd_fwd_txfm_16x16(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt,
502 : bd);
503 0 : break;
504 : case TX_8X8:
505 0 : highbd_fwd_txfm_8x8(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt,
506 : bd);
507 0 : break;
508 : case TX_4X8:
509 0 : highbd_fwd_txfm_4x8(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt,
510 : bd);
511 0 : break;
512 : case TX_8X4:
513 0 : highbd_fwd_txfm_8x4(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt,
514 : bd);
515 0 : break;
516 : case TX_8X16:
517 0 : highbd_fwd_txfm_8x16(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt,
518 : bd);
519 0 : break;
520 : case TX_16X8:
521 0 : highbd_fwd_txfm_16x8(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt,
522 : bd);
523 0 : break;
524 : case TX_16X32:
525 0 : highbd_fwd_txfm_16x32(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt,
526 : bd);
527 0 : break;
528 : case TX_32X16:
529 0 : highbd_fwd_txfm_32x16(src_diff, coeff, diff_stride, tx_type, fwd_txfm_opt,
530 : bd);
531 0 : break;
532 : case TX_4X4:
533 0 : highbd_fwd_txfm_4x4(src_diff, coeff, diff_stride, tx_type, lossless, bd);
534 0 : break;
535 : #if CONFIG_CHROMA_2X2
536 : case TX_2X2:
537 : highbd_fwd_txfm_2x2(src_diff, coeff, diff_stride, tx_type, lossless, bd);
538 : break;
539 : #endif
540 0 : default: assert(0); break;
541 : }
542 0 : }
543 : #endif // CONFIG_HIGHBITDEPTH
|