blob: 0922557d0d261ec3d8135fc32dd5e9ca419d8304 [file] [log] [blame]
Yaowu Xuc27fc142016-08-22 16:08:15 -07001/*
Yaowu Xu2ab7ff02016-09-02 12:04:54 -07002 * Copyright (c) 2016, Alliance for Open Media. All rights reserved
Yaowu Xuc27fc142016-08-22 16:08:15 -07003 *
Yaowu Xu2ab7ff02016-09-02 12:04:54 -07004 * 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.
Yaowu Xuc27fc142016-08-22 16:08:15 -070010 */
11
Tom Finegan60e653d2018-05-22 11:34:58 -070012#include "config/aom_config.h"
Tom Finegan44702c82018-05-22 13:00:39 -070013#include "config/av1_rtcd.h"
14#include "config/aom_dsp_rtcd.h"
Yaowu Xuc27fc142016-08-22 16:08:15 -070015
16#include "av1/common/idct.h"
17#include "av1/encoder/hybrid_fwd_txfm.h"
18
Urvang Joshi8207b912018-05-07 14:37:51 -070019/* 4-point reversible, orthonormal Walsh-Hadamard in 3.5 adds, 0.5 shifts per
20 pixel. */
21void av1_fwht4x4_c(const int16_t *input, tran_low_t *output, int stride) {
22 int i;
23 tran_high_t a1, b1, c1, d1, e1;
24 const int16_t *ip_pass0 = input;
25 const tran_low_t *ip = NULL;
26 tran_low_t *op = output;
27
28 for (i = 0; i < 4; i++) {
29 a1 = ip_pass0[0 * stride];
30 b1 = ip_pass0[1 * stride];
31 c1 = ip_pass0[2 * stride];
32 d1 = ip_pass0[3 * stride];
33
34 a1 += b1;
35 d1 = d1 - c1;
36 e1 = (a1 - d1) >> 1;
37 b1 = e1 - b1;
38 c1 = e1 - c1;
39 a1 -= c1;
40 d1 += b1;
41 op[0] = (tran_low_t)a1;
42 op[4] = (tran_low_t)c1;
43 op[8] = (tran_low_t)d1;
44 op[12] = (tran_low_t)b1;
45
46 ip_pass0++;
47 op++;
48 }
49 ip = output;
50 op = output;
51
52 for (i = 0; i < 4; i++) {
53 a1 = ip[0];
54 b1 = ip[1];
55 c1 = ip[2];
56 d1 = ip[3];
57
58 a1 += b1;
59 d1 -= c1;
60 e1 = (a1 - d1) >> 1;
61 b1 = e1 - b1;
62 c1 = e1 - c1;
63 a1 -= c1;
64 d1 += b1;
65 op[0] = (tran_low_t)(a1 * UNIT_QUANT_FACTOR);
66 op[1] = (tran_low_t)(c1 * UNIT_QUANT_FACTOR);
67 op[2] = (tran_low_t)(d1 * UNIT_QUANT_FACTOR);
68 op[3] = (tran_low_t)(b1 * UNIT_QUANT_FACTOR);
69
70 ip += 4;
71 op += 4;
72 }
73}
74
75void av1_highbd_fwht4x4_c(const int16_t *input, tran_low_t *output,
76 int stride) {
77 av1_fwht4x4_c(input, output, stride);
78}
79
Yaowu Xuc27fc142016-08-22 16:08:15 -070080static void highbd_fwd_txfm_4x4(const int16_t *src_diff, tran_low_t *coeff,
Lester Lu27319b62017-07-10 16:57:15 -070081 int diff_stride, TxfmParam *txfm_param) {
Yi Luo0f4195c2017-06-27 16:07:28 -070082 int32_t *dst_coeff = (int32_t *)coeff;
Urvang Joshi2283d372017-10-02 17:16:45 -070083 const TX_TYPE tx_type = txfm_param->tx_type;
Lester Lu27319b62017-07-10 16:57:15 -070084 const int bd = txfm_param->bd;
85 if (txfm_param->lossless) {
Yaowu Xuc27fc142016-08-22 16:08:15 -070086 assert(tx_type == DCT_DCT);
Yaowu Xuf883b422016-08-30 14:01:10 -070087 av1_highbd_fwht4x4(src_diff, coeff, diff_stride);
Yaowu Xuc27fc142016-08-22 16:08:15 -070088 return;
89 }
Yaowu Xuc27fc142016-08-22 16:08:15 -070090 switch (tx_type) {
Sarah Parker31c66502017-05-19 16:51:07 -070091 // use the c version for anything including identity for now
Yaowu Xuc27fc142016-08-22 16:08:15 -070092 case V_DCT:
93 case H_DCT:
94 case V_ADST:
95 case H_ADST:
96 case V_FLIPADST:
97 case H_FLIPADST:
Sarah Parker31c66502017-05-19 16:51:07 -070098 case IDTX:
Yi Luo0f4195c2017-06-27 16:07:28 -070099 av1_fwd_txfm2d_4x4_c(src_diff, dst_coeff, diff_stride, tx_type, bd);
Yaowu Xuc27fc142016-08-22 16:08:15 -0700100 break;
Sebastien Alaiwan735e7502018-03-21 16:53:10 +0100101 default:
102 av1_fwd_txfm2d_4x4(src_diff, dst_coeff, diff_stride, tx_type, bd);
103 break;
Yaowu Xuc27fc142016-08-22 16:08:15 -0700104 }
105}
106
Yaowu Xuc27fc142016-08-22 16:08:15 -0700107static void highbd_fwd_txfm_4x8(const int16_t *src_diff, tran_low_t *coeff,
Lester Lu27319b62017-07-10 16:57:15 -0700108 int diff_stride, TxfmParam *txfm_param) {
Yi Luo0f4195c2017-06-27 16:07:28 -0700109 int32_t *dst_coeff = (int32_t *)coeff;
Lester Lu27319b62017-07-10 16:57:15 -0700110 av1_fwd_txfm2d_4x8_c(src_diff, dst_coeff, diff_stride, txfm_param->tx_type,
111 txfm_param->bd);
Yaowu Xuc27fc142016-08-22 16:08:15 -0700112}
113
114static void highbd_fwd_txfm_8x4(const int16_t *src_diff, tran_low_t *coeff,
Lester Lu27319b62017-07-10 16:57:15 -0700115 int diff_stride, TxfmParam *txfm_param) {
Yi Luo0f4195c2017-06-27 16:07:28 -0700116 int32_t *dst_coeff = (int32_t *)coeff;
Lester Lu27319b62017-07-10 16:57:15 -0700117 av1_fwd_txfm2d_8x4_c(src_diff, dst_coeff, diff_stride, txfm_param->tx_type,
118 txfm_param->bd);
Yaowu Xuc27fc142016-08-22 16:08:15 -0700119}
120
121static void highbd_fwd_txfm_8x16(const int16_t *src_diff, tran_low_t *coeff,
Lester Lu27319b62017-07-10 16:57:15 -0700122 int diff_stride, TxfmParam *txfm_param) {
Yi Luo0f4195c2017-06-27 16:07:28 -0700123 int32_t *dst_coeff = (int32_t *)coeff;
Lester Lu27319b62017-07-10 16:57:15 -0700124 av1_fwd_txfm2d_8x16_c(src_diff, dst_coeff, diff_stride, txfm_param->tx_type,
125 txfm_param->bd);
Yaowu Xuc27fc142016-08-22 16:08:15 -0700126}
127
128static void highbd_fwd_txfm_16x8(const int16_t *src_diff, tran_low_t *coeff,
Lester Lu27319b62017-07-10 16:57:15 -0700129 int diff_stride, TxfmParam *txfm_param) {
Yi Luo0f4195c2017-06-27 16:07:28 -0700130 int32_t *dst_coeff = (int32_t *)coeff;
Lester Lu27319b62017-07-10 16:57:15 -0700131 av1_fwd_txfm2d_16x8_c(src_diff, dst_coeff, diff_stride, txfm_param->tx_type,
132 txfm_param->bd);
Yaowu Xuc27fc142016-08-22 16:08:15 -0700133}
134
135static void highbd_fwd_txfm_16x32(const int16_t *src_diff, tran_low_t *coeff,
Lester Lu27319b62017-07-10 16:57:15 -0700136 int diff_stride, TxfmParam *txfm_param) {
Yi Luo0f4195c2017-06-27 16:07:28 -0700137 int32_t *dst_coeff = (int32_t *)coeff;
Lester Lu27319b62017-07-10 16:57:15 -0700138 av1_fwd_txfm2d_16x32_c(src_diff, dst_coeff, diff_stride, txfm_param->tx_type,
139 txfm_param->bd);
Yaowu Xuc27fc142016-08-22 16:08:15 -0700140}
141
142static void highbd_fwd_txfm_32x16(const int16_t *src_diff, tran_low_t *coeff,
Lester Lu27319b62017-07-10 16:57:15 -0700143 int diff_stride, TxfmParam *txfm_param) {
Yi Luo0f4195c2017-06-27 16:07:28 -0700144 int32_t *dst_coeff = (int32_t *)coeff;
Lester Lu27319b62017-07-10 16:57:15 -0700145 av1_fwd_txfm2d_32x16_c(src_diff, dst_coeff, diff_stride, txfm_param->tx_type,
146 txfm_param->bd);
Yaowu Xuc27fc142016-08-22 16:08:15 -0700147}
Yaowu Xuc27fc142016-08-22 16:08:15 -0700148
Debargha Mukherjee845057f2017-11-13 07:03:36 -0800149static void highbd_fwd_txfm_16x4(const int16_t *src_diff, tran_low_t *coeff,
150 int diff_stride, TxfmParam *txfm_param) {
Debargha Mukherjee69f914a2017-11-15 20:58:23 -0800151 int32_t *dst_coeff = (int32_t *)coeff;
152 av1_fwd_txfm2d_16x4_c(src_diff, dst_coeff, diff_stride, txfm_param->tx_type,
153 txfm_param->bd);
Debargha Mukherjee845057f2017-11-13 07:03:36 -0800154}
155
156static void highbd_fwd_txfm_4x16(const int16_t *src_diff, tran_low_t *coeff,
157 int diff_stride, TxfmParam *txfm_param) {
Debargha Mukherjee69f914a2017-11-15 20:58:23 -0800158 int32_t *dst_coeff = (int32_t *)coeff;
159 av1_fwd_txfm2d_4x16_c(src_diff, dst_coeff, diff_stride, txfm_param->tx_type,
160 txfm_param->bd);
Debargha Mukherjee845057f2017-11-13 07:03:36 -0800161}
162
163static void highbd_fwd_txfm_32x8(const int16_t *src_diff, tran_low_t *coeff,
164 int diff_stride, TxfmParam *txfm_param) {
Debargha Mukherjee69f914a2017-11-15 20:58:23 -0800165 int32_t *dst_coeff = (int32_t *)coeff;
166 av1_fwd_txfm2d_32x8_c(src_diff, dst_coeff, diff_stride, txfm_param->tx_type,
167 txfm_param->bd);
Debargha Mukherjee845057f2017-11-13 07:03:36 -0800168}
169
170static void highbd_fwd_txfm_8x32(const int16_t *src_diff, tran_low_t *coeff,
171 int diff_stride, TxfmParam *txfm_param) {
Debargha Mukherjee69f914a2017-11-15 20:58:23 -0800172 int32_t *dst_coeff = (int32_t *)coeff;
173 av1_fwd_txfm2d_8x32_c(src_diff, dst_coeff, diff_stride, txfm_param->tx_type,
174 txfm_param->bd);
Debargha Mukherjee845057f2017-11-13 07:03:36 -0800175}
Debargha Mukherjee845057f2017-11-13 07:03:36 -0800176
Yaowu Xuc27fc142016-08-22 16:08:15 -0700177static void highbd_fwd_txfm_8x8(const int16_t *src_diff, tran_low_t *coeff,
Lester Lu27319b62017-07-10 16:57:15 -0700178 int diff_stride, TxfmParam *txfm_param) {
Yi Luo0f4195c2017-06-27 16:07:28 -0700179 int32_t *dst_coeff = (int32_t *)coeff;
Urvang Joshi2283d372017-10-02 17:16:45 -0700180 const TX_TYPE tx_type = txfm_param->tx_type;
Lester Lu27319b62017-07-10 16:57:15 -0700181 const int bd = txfm_param->bd;
Yaowu Xuc27fc142016-08-22 16:08:15 -0700182 switch (tx_type) {
Sarah Parker31c66502017-05-19 16:51:07 -0700183 // use the c version for anything including identity for now
Yaowu Xuc27fc142016-08-22 16:08:15 -0700184 case V_DCT:
185 case H_DCT:
186 case V_ADST:
187 case H_ADST:
188 case V_FLIPADST:
189 case H_FLIPADST:
Sarah Parker31c66502017-05-19 16:51:07 -0700190 case IDTX:
Yi Luo0f4195c2017-06-27 16:07:28 -0700191 av1_fwd_txfm2d_8x8_c(src_diff, dst_coeff, diff_stride, tx_type, bd);
Yaowu Xuc27fc142016-08-22 16:08:15 -0700192 break;
Sebastien Alaiwan735e7502018-03-21 16:53:10 +0100193 default:
194 av1_fwd_txfm2d_8x8(src_diff, dst_coeff, diff_stride, tx_type, bd);
195 break;
Yaowu Xuc27fc142016-08-22 16:08:15 -0700196 }
197}
198
199static void highbd_fwd_txfm_16x16(const int16_t *src_diff, tran_low_t *coeff,
Lester Lu27319b62017-07-10 16:57:15 -0700200 int diff_stride, TxfmParam *txfm_param) {
Yi Luo0f4195c2017-06-27 16:07:28 -0700201 int32_t *dst_coeff = (int32_t *)coeff;
Urvang Joshi2283d372017-10-02 17:16:45 -0700202 const TX_TYPE tx_type = txfm_param->tx_type;
Lester Lu27319b62017-07-10 16:57:15 -0700203 const int bd = txfm_param->bd;
Yaowu Xuc27fc142016-08-22 16:08:15 -0700204 switch (tx_type) {
Sarah Parker31c66502017-05-19 16:51:07 -0700205 // use the c version for anything including identity for now
Yaowu Xuc27fc142016-08-22 16:08:15 -0700206 case V_DCT:
207 case H_DCT:
208 case V_ADST:
209 case H_ADST:
210 case V_FLIPADST:
211 case H_FLIPADST:
Sarah Parker31c66502017-05-19 16:51:07 -0700212 case IDTX:
Yi Luo0f4195c2017-06-27 16:07:28 -0700213 av1_fwd_txfm2d_16x16_c(src_diff, dst_coeff, diff_stride, tx_type, bd);
Yaowu Xuc27fc142016-08-22 16:08:15 -0700214 break;
Sebastien Alaiwan735e7502018-03-21 16:53:10 +0100215 default:
216 av1_fwd_txfm2d_16x16(src_diff, dst_coeff, diff_stride, tx_type, bd);
217 break;
Yaowu Xuc27fc142016-08-22 16:08:15 -0700218 }
219}
220
Angie Chiang8fd2d7a2017-01-03 15:50:15 -0800221static void highbd_fwd_txfm_32x32(const int16_t *src_diff, tran_low_t *coeff,
Lester Lu27319b62017-07-10 16:57:15 -0700222 int diff_stride, TxfmParam *txfm_param) {
Yi Luo0f4195c2017-06-27 16:07:28 -0700223 int32_t *dst_coeff = (int32_t *)coeff;
Urvang Joshi2283d372017-10-02 17:16:45 -0700224 const TX_TYPE tx_type = txfm_param->tx_type;
Lester Lu27319b62017-07-10 16:57:15 -0700225 const int bd = txfm_param->bd;
Yaowu Xuc27fc142016-08-22 16:08:15 -0700226 switch (tx_type) {
Sarah Parker31c66502017-05-19 16:51:07 -0700227 // use the c version for anything including identity for now
Yaowu Xuc27fc142016-08-22 16:08:15 -0700228 case V_DCT:
229 case H_DCT:
230 case V_ADST:
231 case H_ADST:
232 case V_FLIPADST:
233 case H_FLIPADST:
Sarah Parker31c66502017-05-19 16:51:07 -0700234 case IDTX:
Yi Luo0f4195c2017-06-27 16:07:28 -0700235 av1_fwd_txfm2d_32x32_c(src_diff, dst_coeff, diff_stride, tx_type, bd);
Yaowu Xuc27fc142016-08-22 16:08:15 -0700236 break;
Sebastien Alaiwan735e7502018-03-21 16:53:10 +0100237 default:
238 av1_fwd_txfm2d_32x32(src_diff, dst_coeff, diff_stride, tx_type, bd);
239 break;
Yaowu Xuc27fc142016-08-22 16:08:15 -0700240 }
241}
Debargha Mukherjee6a47cff2016-11-02 14:57:42 -0700242
Debargha Mukherjee2b435012017-09-28 08:30:35 -0700243static void highbd_fwd_txfm_32x64(const int16_t *src_diff, tran_low_t *coeff,
244 int diff_stride, TxfmParam *txfm_param) {
Hui Su98626d32018-04-13 12:08:48 -0700245 assert(txfm_param->tx_type == DCT_DCT);
Debargha Mukherjee2b435012017-09-28 08:30:35 -0700246 int32_t *dst_coeff = (int32_t *)coeff;
Debargha Mukherjee2b435012017-09-28 08:30:35 -0700247 const int bd = txfm_param->bd;
Hui Su98626d32018-04-13 12:08:48 -0700248 av1_fwd_txfm2d_32x64_c(src_diff, dst_coeff, diff_stride, DCT_DCT, bd);
Debargha Mukherjee2b435012017-09-28 08:30:35 -0700249}
250
251static void highbd_fwd_txfm_64x32(const int16_t *src_diff, tran_low_t *coeff,
252 int diff_stride, TxfmParam *txfm_param) {
Hui Su98626d32018-04-13 12:08:48 -0700253 assert(txfm_param->tx_type == DCT_DCT);
Debargha Mukherjee2b435012017-09-28 08:30:35 -0700254 int32_t *dst_coeff = (int32_t *)coeff;
Debargha Mukherjee2b435012017-09-28 08:30:35 -0700255 const int bd = txfm_param->bd;
Hui Su98626d32018-04-13 12:08:48 -0700256 av1_fwd_txfm2d_64x32_c(src_diff, dst_coeff, diff_stride, DCT_DCT, bd);
Debargha Mukherjee2b435012017-09-28 08:30:35 -0700257}
Debargha Mukherjee0254fee2017-12-02 09:08:52 -0800258
259static void highbd_fwd_txfm_16x64(const int16_t *src_diff, tran_low_t *coeff,
260 int diff_stride, TxfmParam *txfm_param) {
Hui Su98626d32018-04-13 12:08:48 -0700261 assert(txfm_param->tx_type == DCT_DCT);
Debargha Mukherjee0254fee2017-12-02 09:08:52 -0800262 int32_t *dst_coeff = (int32_t *)coeff;
Debargha Mukherjee0254fee2017-12-02 09:08:52 -0800263 const int bd = txfm_param->bd;
Hui Su98626d32018-04-13 12:08:48 -0700264 av1_fwd_txfm2d_16x64_c(src_diff, dst_coeff, diff_stride, DCT_DCT, bd);
Debargha Mukherjee0254fee2017-12-02 09:08:52 -0800265}
266
267static void highbd_fwd_txfm_64x16(const int16_t *src_diff, tran_low_t *coeff,
268 int diff_stride, TxfmParam *txfm_param) {
Hui Su98626d32018-04-13 12:08:48 -0700269 assert(txfm_param->tx_type == DCT_DCT);
Debargha Mukherjee0254fee2017-12-02 09:08:52 -0800270 int32_t *dst_coeff = (int32_t *)coeff;
Debargha Mukherjee0254fee2017-12-02 09:08:52 -0800271 const int bd = txfm_param->bd;
Hui Su98626d32018-04-13 12:08:48 -0700272 av1_fwd_txfm2d_64x16_c(src_diff, dst_coeff, diff_stride, DCT_DCT, bd);
Debargha Mukherjee0254fee2017-12-02 09:08:52 -0800273}
274
Debargha Mukherjee6a47cff2016-11-02 14:57:42 -0700275static void highbd_fwd_txfm_64x64(const int16_t *src_diff, tran_low_t *coeff,
Lester Lu27319b62017-07-10 16:57:15 -0700276 int diff_stride, TxfmParam *txfm_param) {
Hui Su98626d32018-04-13 12:08:48 -0700277 assert(txfm_param->tx_type == DCT_DCT);
Yi Luo0f4195c2017-06-27 16:07:28 -0700278 int32_t *dst_coeff = (int32_t *)coeff;
Lester Lu27319b62017-07-10 16:57:15 -0700279 const int bd = txfm_param->bd;
Hui Su98626d32018-04-13 12:08:48 -0700280 av1_fwd_txfm2d_64x64(src_diff, dst_coeff, diff_stride, DCT_DCT, bd);
Debargha Mukherjee6a47cff2016-11-02 14:57:42 -0700281}
Yaowu Xuc27fc142016-08-22 16:08:15 -0700282
hui suf11fb882017-03-27 14:56:33 -0700283void av1_fwd_txfm(const int16_t *src_diff, tran_low_t *coeff, int diff_stride,
Lester Lu27319b62017-07-10 16:57:15 -0700284 TxfmParam *txfm_param) {
Angie Chiang7d8b13e2018-02-07 22:55:45 -0800285 if (txfm_param->bd == 8)
286 av1_lowbd_fwd_txfm(src_diff, coeff, diff_stride, txfm_param);
287 else
288 av1_highbd_fwd_txfm(src_diff, coeff, diff_stride, txfm_param);
289}
290
291void av1_lowbd_fwd_txfm_c(const int16_t *src_diff, tran_low_t *coeff,
292 int diff_stride, TxfmParam *txfm_param) {
293 av1_highbd_fwd_txfm(src_diff, coeff, diff_stride, txfm_param);
Yaowu Xuc27fc142016-08-22 16:08:15 -0700294}
295
hui suf11fb882017-03-27 14:56:33 -0700296void av1_highbd_fwd_txfm(const int16_t *src_diff, tran_low_t *coeff,
Lester Lu27319b62017-07-10 16:57:15 -0700297 int diff_stride, TxfmParam *txfm_param) {
Sarah Parker90024e42017-10-06 16:50:47 -0700298 assert(av1_ext_tx_used[txfm_param->tx_set_type][txfm_param->tx_type]);
Lester Lu27319b62017-07-10 16:57:15 -0700299 const TX_SIZE tx_size = txfm_param->tx_size;
Yaowu Xuc27fc142016-08-22 16:08:15 -0700300 switch (tx_size) {
Debargha Mukherjee6a47cff2016-11-02 14:57:42 -0700301 case TX_64X64:
Lester Lu27319b62017-07-10 16:57:15 -0700302 highbd_fwd_txfm_64x64(src_diff, coeff, diff_stride, txfm_param);
Debargha Mukherjee6a47cff2016-11-02 14:57:42 -0700303 break;
Debargha Mukherjee2b435012017-09-28 08:30:35 -0700304 case TX_32X64:
305 highbd_fwd_txfm_32x64(src_diff, coeff, diff_stride, txfm_param);
306 break;
307 case TX_64X32:
308 highbd_fwd_txfm_64x32(src_diff, coeff, diff_stride, txfm_param);
309 break;
Debargha Mukherjee0254fee2017-12-02 09:08:52 -0800310 case TX_16X64:
311 highbd_fwd_txfm_16x64(src_diff, coeff, diff_stride, txfm_param);
312 break;
313 case TX_64X16:
314 highbd_fwd_txfm_64x16(src_diff, coeff, diff_stride, txfm_param);
315 break;
Yaowu Xuc27fc142016-08-22 16:08:15 -0700316 case TX_32X32:
Lester Lu27319b62017-07-10 16:57:15 -0700317 highbd_fwd_txfm_32x32(src_diff, coeff, diff_stride, txfm_param);
Yaowu Xuc27fc142016-08-22 16:08:15 -0700318 break;
319 case TX_16X16:
Lester Lu27319b62017-07-10 16:57:15 -0700320 highbd_fwd_txfm_16x16(src_diff, coeff, diff_stride, txfm_param);
Yaowu Xuc27fc142016-08-22 16:08:15 -0700321 break;
322 case TX_8X8:
Lester Lu27319b62017-07-10 16:57:15 -0700323 highbd_fwd_txfm_8x8(src_diff, coeff, diff_stride, txfm_param);
Yaowu Xuc27fc142016-08-22 16:08:15 -0700324 break;
Yaowu Xuc27fc142016-08-22 16:08:15 -0700325 case TX_4X8:
Lester Lu27319b62017-07-10 16:57:15 -0700326 highbd_fwd_txfm_4x8(src_diff, coeff, diff_stride, txfm_param);
Yaowu Xuc27fc142016-08-22 16:08:15 -0700327 break;
328 case TX_8X4:
Lester Lu27319b62017-07-10 16:57:15 -0700329 highbd_fwd_txfm_8x4(src_diff, coeff, diff_stride, txfm_param);
Yaowu Xuc27fc142016-08-22 16:08:15 -0700330 break;
331 case TX_8X16:
Lester Lu27319b62017-07-10 16:57:15 -0700332 highbd_fwd_txfm_8x16(src_diff, coeff, diff_stride, txfm_param);
Yaowu Xuc27fc142016-08-22 16:08:15 -0700333 break;
334 case TX_16X8:
Lester Lu27319b62017-07-10 16:57:15 -0700335 highbd_fwd_txfm_16x8(src_diff, coeff, diff_stride, txfm_param);
Yaowu Xuc27fc142016-08-22 16:08:15 -0700336 break;
337 case TX_16X32:
Lester Lu27319b62017-07-10 16:57:15 -0700338 highbd_fwd_txfm_16x32(src_diff, coeff, diff_stride, txfm_param);
Yaowu Xuc27fc142016-08-22 16:08:15 -0700339 break;
340 case TX_32X16:
Lester Lu27319b62017-07-10 16:57:15 -0700341 highbd_fwd_txfm_32x16(src_diff, coeff, diff_stride, txfm_param);
Yaowu Xuc27fc142016-08-22 16:08:15 -0700342 break;
Yaowu Xuc27fc142016-08-22 16:08:15 -0700343 case TX_4X4:
Lester Lu27319b62017-07-10 16:57:15 -0700344 highbd_fwd_txfm_4x4(src_diff, coeff, diff_stride, txfm_param);
Yaowu Xuc27fc142016-08-22 16:08:15 -0700345 break;
Debargha Mukherjee845057f2017-11-13 07:03:36 -0800346 case TX_4X16:
347 highbd_fwd_txfm_4x16(src_diff, coeff, diff_stride, txfm_param);
348 break;
349 case TX_16X4:
350 highbd_fwd_txfm_16x4(src_diff, coeff, diff_stride, txfm_param);
351 break;
352 case TX_8X32:
353 highbd_fwd_txfm_8x32(src_diff, coeff, diff_stride, txfm_param);
354 break;
355 case TX_32X8:
356 highbd_fwd_txfm_32x8(src_diff, coeff, diff_stride, txfm_param);
357 break;
Yaowu Xuc27fc142016-08-22 16:08:15 -0700358 default: assert(0); break;
359 }
360}