1*fb1b10abSAndroid Build Coastguard Worker /*
2*fb1b10abSAndroid Build Coastguard Worker * Copyright (c) 2015 The WebM project authors. All Rights Reserved.
3*fb1b10abSAndroid Build Coastguard Worker *
4*fb1b10abSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license
5*fb1b10abSAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source
6*fb1b10abSAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found
7*fb1b10abSAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may
8*fb1b10abSAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree.
9*fb1b10abSAndroid Build Coastguard Worker */
10*fb1b10abSAndroid Build Coastguard Worker
11*fb1b10abSAndroid Build Coastguard Worker #include <math.h>
12*fb1b10abSAndroid Build Coastguard Worker #include <stdlib.h>
13*fb1b10abSAndroid Build Coastguard Worker #include <string.h>
14*fb1b10abSAndroid Build Coastguard Worker
15*fb1b10abSAndroid Build Coastguard Worker #include "./vpx_dsp_rtcd.h"
16*fb1b10abSAndroid Build Coastguard Worker #include "vpx_dsp/inv_txfm.h"
17*fb1b10abSAndroid Build Coastguard Worker
vpx_iwht4x4_16_add_c(const tran_low_t * input,uint8_t * dest,int stride)18*fb1b10abSAndroid Build Coastguard Worker void vpx_iwht4x4_16_add_c(const tran_low_t *input, uint8_t *dest, int stride) {
19*fb1b10abSAndroid Build Coastguard Worker /* 4-point reversible, orthonormal inverse Walsh-Hadamard in 3.5 adds,
20*fb1b10abSAndroid Build Coastguard Worker 0.5 shifts per pixel. */
21*fb1b10abSAndroid Build Coastguard Worker int i;
22*fb1b10abSAndroid Build Coastguard Worker tran_low_t output[16];
23*fb1b10abSAndroid Build Coastguard Worker tran_high_t a1, b1, c1, d1, e1;
24*fb1b10abSAndroid Build Coastguard Worker const tran_low_t *ip = input;
25*fb1b10abSAndroid Build Coastguard Worker tran_low_t *op = output;
26*fb1b10abSAndroid Build Coastguard Worker
27*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 4; i++) {
28*fb1b10abSAndroid Build Coastguard Worker a1 = ip[0] >> UNIT_QUANT_SHIFT;
29*fb1b10abSAndroid Build Coastguard Worker c1 = ip[1] >> UNIT_QUANT_SHIFT;
30*fb1b10abSAndroid Build Coastguard Worker d1 = ip[2] >> UNIT_QUANT_SHIFT;
31*fb1b10abSAndroid Build Coastguard Worker b1 = ip[3] >> UNIT_QUANT_SHIFT;
32*fb1b10abSAndroid Build Coastguard Worker a1 += c1;
33*fb1b10abSAndroid Build Coastguard Worker d1 -= b1;
34*fb1b10abSAndroid Build Coastguard Worker e1 = (a1 - d1) >> 1;
35*fb1b10abSAndroid Build Coastguard Worker b1 = e1 - b1;
36*fb1b10abSAndroid Build Coastguard Worker c1 = e1 - c1;
37*fb1b10abSAndroid Build Coastguard Worker a1 -= b1;
38*fb1b10abSAndroid Build Coastguard Worker d1 += c1;
39*fb1b10abSAndroid Build Coastguard Worker op[0] = WRAPLOW(a1);
40*fb1b10abSAndroid Build Coastguard Worker op[1] = WRAPLOW(b1);
41*fb1b10abSAndroid Build Coastguard Worker op[2] = WRAPLOW(c1);
42*fb1b10abSAndroid Build Coastguard Worker op[3] = WRAPLOW(d1);
43*fb1b10abSAndroid Build Coastguard Worker ip += 4;
44*fb1b10abSAndroid Build Coastguard Worker op += 4;
45*fb1b10abSAndroid Build Coastguard Worker }
46*fb1b10abSAndroid Build Coastguard Worker
47*fb1b10abSAndroid Build Coastguard Worker ip = output;
48*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 4; i++) {
49*fb1b10abSAndroid Build Coastguard Worker a1 = ip[4 * 0];
50*fb1b10abSAndroid Build Coastguard Worker c1 = ip[4 * 1];
51*fb1b10abSAndroid Build Coastguard Worker d1 = ip[4 * 2];
52*fb1b10abSAndroid Build Coastguard Worker b1 = ip[4 * 3];
53*fb1b10abSAndroid Build Coastguard Worker a1 += c1;
54*fb1b10abSAndroid Build Coastguard Worker d1 -= b1;
55*fb1b10abSAndroid Build Coastguard Worker e1 = (a1 - d1) >> 1;
56*fb1b10abSAndroid Build Coastguard Worker b1 = e1 - b1;
57*fb1b10abSAndroid Build Coastguard Worker c1 = e1 - c1;
58*fb1b10abSAndroid Build Coastguard Worker a1 -= b1;
59*fb1b10abSAndroid Build Coastguard Worker d1 += c1;
60*fb1b10abSAndroid Build Coastguard Worker dest[stride * 0] = clip_pixel_add(dest[stride * 0], WRAPLOW(a1));
61*fb1b10abSAndroid Build Coastguard Worker dest[stride * 1] = clip_pixel_add(dest[stride * 1], WRAPLOW(b1));
62*fb1b10abSAndroid Build Coastguard Worker dest[stride * 2] = clip_pixel_add(dest[stride * 2], WRAPLOW(c1));
63*fb1b10abSAndroid Build Coastguard Worker dest[stride * 3] = clip_pixel_add(dest[stride * 3], WRAPLOW(d1));
64*fb1b10abSAndroid Build Coastguard Worker
65*fb1b10abSAndroid Build Coastguard Worker ip++;
66*fb1b10abSAndroid Build Coastguard Worker dest++;
67*fb1b10abSAndroid Build Coastguard Worker }
68*fb1b10abSAndroid Build Coastguard Worker }
69*fb1b10abSAndroid Build Coastguard Worker
vpx_iwht4x4_1_add_c(const tran_low_t * input,uint8_t * dest,int stride)70*fb1b10abSAndroid Build Coastguard Worker void vpx_iwht4x4_1_add_c(const tran_low_t *input, uint8_t *dest, int stride) {
71*fb1b10abSAndroid Build Coastguard Worker int i;
72*fb1b10abSAndroid Build Coastguard Worker tran_high_t a1, e1;
73*fb1b10abSAndroid Build Coastguard Worker tran_low_t tmp[4];
74*fb1b10abSAndroid Build Coastguard Worker const tran_low_t *ip = input;
75*fb1b10abSAndroid Build Coastguard Worker tran_low_t *op = tmp;
76*fb1b10abSAndroid Build Coastguard Worker
77*fb1b10abSAndroid Build Coastguard Worker a1 = ip[0] >> UNIT_QUANT_SHIFT;
78*fb1b10abSAndroid Build Coastguard Worker e1 = a1 >> 1;
79*fb1b10abSAndroid Build Coastguard Worker a1 -= e1;
80*fb1b10abSAndroid Build Coastguard Worker op[0] = WRAPLOW(a1);
81*fb1b10abSAndroid Build Coastguard Worker op[1] = op[2] = op[3] = WRAPLOW(e1);
82*fb1b10abSAndroid Build Coastguard Worker
83*fb1b10abSAndroid Build Coastguard Worker ip = tmp;
84*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 4; i++) {
85*fb1b10abSAndroid Build Coastguard Worker e1 = ip[0] >> 1;
86*fb1b10abSAndroid Build Coastguard Worker a1 = ip[0] - e1;
87*fb1b10abSAndroid Build Coastguard Worker dest[stride * 0] = clip_pixel_add(dest[stride * 0], a1);
88*fb1b10abSAndroid Build Coastguard Worker dest[stride * 1] = clip_pixel_add(dest[stride * 1], e1);
89*fb1b10abSAndroid Build Coastguard Worker dest[stride * 2] = clip_pixel_add(dest[stride * 2], e1);
90*fb1b10abSAndroid Build Coastguard Worker dest[stride * 3] = clip_pixel_add(dest[stride * 3], e1);
91*fb1b10abSAndroid Build Coastguard Worker ip++;
92*fb1b10abSAndroid Build Coastguard Worker dest++;
93*fb1b10abSAndroid Build Coastguard Worker }
94*fb1b10abSAndroid Build Coastguard Worker }
95*fb1b10abSAndroid Build Coastguard Worker
iadst4_c(const tran_low_t * input,tran_low_t * output)96*fb1b10abSAndroid Build Coastguard Worker void iadst4_c(const tran_low_t *input, tran_low_t *output) {
97*fb1b10abSAndroid Build Coastguard Worker tran_high_t s0, s1, s2, s3, s4, s5, s6, s7;
98*fb1b10abSAndroid Build Coastguard Worker tran_low_t x0 = input[0];
99*fb1b10abSAndroid Build Coastguard Worker tran_low_t x1 = input[1];
100*fb1b10abSAndroid Build Coastguard Worker tran_low_t x2 = input[2];
101*fb1b10abSAndroid Build Coastguard Worker tran_low_t x3 = input[3];
102*fb1b10abSAndroid Build Coastguard Worker
103*fb1b10abSAndroid Build Coastguard Worker if (!(x0 | x1 | x2 | x3)) {
104*fb1b10abSAndroid Build Coastguard Worker memset(output, 0, 4 * sizeof(*output));
105*fb1b10abSAndroid Build Coastguard Worker return;
106*fb1b10abSAndroid Build Coastguard Worker }
107*fb1b10abSAndroid Build Coastguard Worker
108*fb1b10abSAndroid Build Coastguard Worker // 32-bit result is enough for the following multiplications.
109*fb1b10abSAndroid Build Coastguard Worker s0 = sinpi_1_9 * x0;
110*fb1b10abSAndroid Build Coastguard Worker s1 = sinpi_2_9 * x0;
111*fb1b10abSAndroid Build Coastguard Worker s2 = sinpi_3_9 * x1;
112*fb1b10abSAndroid Build Coastguard Worker s3 = sinpi_4_9 * x2;
113*fb1b10abSAndroid Build Coastguard Worker s4 = sinpi_1_9 * x2;
114*fb1b10abSAndroid Build Coastguard Worker s5 = sinpi_2_9 * x3;
115*fb1b10abSAndroid Build Coastguard Worker s6 = sinpi_4_9 * x3;
116*fb1b10abSAndroid Build Coastguard Worker s7 = WRAPLOW(x0 - x2 + x3);
117*fb1b10abSAndroid Build Coastguard Worker
118*fb1b10abSAndroid Build Coastguard Worker s0 = s0 + s3 + s5;
119*fb1b10abSAndroid Build Coastguard Worker s1 = s1 - s4 - s6;
120*fb1b10abSAndroid Build Coastguard Worker s3 = s2;
121*fb1b10abSAndroid Build Coastguard Worker s2 = sinpi_3_9 * s7;
122*fb1b10abSAndroid Build Coastguard Worker
123*fb1b10abSAndroid Build Coastguard Worker // 1-D transform scaling factor is sqrt(2).
124*fb1b10abSAndroid Build Coastguard Worker // The overall dynamic range is 14b (input) + 14b (multiplication scaling)
125*fb1b10abSAndroid Build Coastguard Worker // + 1b (addition) = 29b.
126*fb1b10abSAndroid Build Coastguard Worker // Hence the output bit depth is 15b.
127*fb1b10abSAndroid Build Coastguard Worker output[0] = WRAPLOW(dct_const_round_shift(s0 + s3));
128*fb1b10abSAndroid Build Coastguard Worker output[1] = WRAPLOW(dct_const_round_shift(s1 + s3));
129*fb1b10abSAndroid Build Coastguard Worker output[2] = WRAPLOW(dct_const_round_shift(s2));
130*fb1b10abSAndroid Build Coastguard Worker output[3] = WRAPLOW(dct_const_round_shift(s0 + s1 - s3));
131*fb1b10abSAndroid Build Coastguard Worker }
132*fb1b10abSAndroid Build Coastguard Worker
idct4_c(const tran_low_t * input,tran_low_t * output)133*fb1b10abSAndroid Build Coastguard Worker void idct4_c(const tran_low_t *input, tran_low_t *output) {
134*fb1b10abSAndroid Build Coastguard Worker int16_t step[4];
135*fb1b10abSAndroid Build Coastguard Worker tran_high_t temp1, temp2;
136*fb1b10abSAndroid Build Coastguard Worker
137*fb1b10abSAndroid Build Coastguard Worker // stage 1
138*fb1b10abSAndroid Build Coastguard Worker temp1 = ((int16_t)input[0] + (int16_t)input[2]) * cospi_16_64;
139*fb1b10abSAndroid Build Coastguard Worker temp2 = ((int16_t)input[0] - (int16_t)input[2]) * cospi_16_64;
140*fb1b10abSAndroid Build Coastguard Worker step[0] = WRAPLOW(dct_const_round_shift(temp1));
141*fb1b10abSAndroid Build Coastguard Worker step[1] = WRAPLOW(dct_const_round_shift(temp2));
142*fb1b10abSAndroid Build Coastguard Worker temp1 = (int16_t)input[1] * cospi_24_64 - (int16_t)input[3] * cospi_8_64;
143*fb1b10abSAndroid Build Coastguard Worker temp2 = (int16_t)input[1] * cospi_8_64 + (int16_t)input[3] * cospi_24_64;
144*fb1b10abSAndroid Build Coastguard Worker step[2] = WRAPLOW(dct_const_round_shift(temp1));
145*fb1b10abSAndroid Build Coastguard Worker step[3] = WRAPLOW(dct_const_round_shift(temp2));
146*fb1b10abSAndroid Build Coastguard Worker
147*fb1b10abSAndroid Build Coastguard Worker // stage 2
148*fb1b10abSAndroid Build Coastguard Worker output[0] = WRAPLOW(step[0] + step[3]);
149*fb1b10abSAndroid Build Coastguard Worker output[1] = WRAPLOW(step[1] + step[2]);
150*fb1b10abSAndroid Build Coastguard Worker output[2] = WRAPLOW(step[1] - step[2]);
151*fb1b10abSAndroid Build Coastguard Worker output[3] = WRAPLOW(step[0] - step[3]);
152*fb1b10abSAndroid Build Coastguard Worker }
153*fb1b10abSAndroid Build Coastguard Worker
vpx_idct4x4_16_add_c(const tran_low_t * input,uint8_t * dest,int stride)154*fb1b10abSAndroid Build Coastguard Worker void vpx_idct4x4_16_add_c(const tran_low_t *input, uint8_t *dest, int stride) {
155*fb1b10abSAndroid Build Coastguard Worker int i, j;
156*fb1b10abSAndroid Build Coastguard Worker tran_low_t out[4 * 4];
157*fb1b10abSAndroid Build Coastguard Worker tran_low_t *outptr = out;
158*fb1b10abSAndroid Build Coastguard Worker tran_low_t temp_in[4], temp_out[4];
159*fb1b10abSAndroid Build Coastguard Worker
160*fb1b10abSAndroid Build Coastguard Worker // Rows
161*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 4; ++i) {
162*fb1b10abSAndroid Build Coastguard Worker idct4_c(input, outptr);
163*fb1b10abSAndroid Build Coastguard Worker input += 4;
164*fb1b10abSAndroid Build Coastguard Worker outptr += 4;
165*fb1b10abSAndroid Build Coastguard Worker }
166*fb1b10abSAndroid Build Coastguard Worker
167*fb1b10abSAndroid Build Coastguard Worker // Columns
168*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 4; ++i) {
169*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 4; ++j) temp_in[j] = out[j * 4 + i];
170*fb1b10abSAndroid Build Coastguard Worker idct4_c(temp_in, temp_out);
171*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 4; ++j) {
172*fb1b10abSAndroid Build Coastguard Worker dest[j * stride + i] = clip_pixel_add(dest[j * stride + i],
173*fb1b10abSAndroid Build Coastguard Worker ROUND_POWER_OF_TWO(temp_out[j], 4));
174*fb1b10abSAndroid Build Coastguard Worker }
175*fb1b10abSAndroid Build Coastguard Worker }
176*fb1b10abSAndroid Build Coastguard Worker }
177*fb1b10abSAndroid Build Coastguard Worker
vpx_idct4x4_1_add_c(const tran_low_t * input,uint8_t * dest,int stride)178*fb1b10abSAndroid Build Coastguard Worker void vpx_idct4x4_1_add_c(const tran_low_t *input, uint8_t *dest, int stride) {
179*fb1b10abSAndroid Build Coastguard Worker int i;
180*fb1b10abSAndroid Build Coastguard Worker tran_high_t a1;
181*fb1b10abSAndroid Build Coastguard Worker tran_low_t out =
182*fb1b10abSAndroid Build Coastguard Worker WRAPLOW(dct_const_round_shift((int16_t)input[0] * cospi_16_64));
183*fb1b10abSAndroid Build Coastguard Worker
184*fb1b10abSAndroid Build Coastguard Worker out = WRAPLOW(dct_const_round_shift(out * cospi_16_64));
185*fb1b10abSAndroid Build Coastguard Worker a1 = ROUND_POWER_OF_TWO(out, 4);
186*fb1b10abSAndroid Build Coastguard Worker
187*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 4; i++) {
188*fb1b10abSAndroid Build Coastguard Worker dest[0] = clip_pixel_add(dest[0], a1);
189*fb1b10abSAndroid Build Coastguard Worker dest[1] = clip_pixel_add(dest[1], a1);
190*fb1b10abSAndroid Build Coastguard Worker dest[2] = clip_pixel_add(dest[2], a1);
191*fb1b10abSAndroid Build Coastguard Worker dest[3] = clip_pixel_add(dest[3], a1);
192*fb1b10abSAndroid Build Coastguard Worker dest += stride;
193*fb1b10abSAndroid Build Coastguard Worker }
194*fb1b10abSAndroid Build Coastguard Worker }
195*fb1b10abSAndroid Build Coastguard Worker
iadst8_c(const tran_low_t * input,tran_low_t * output)196*fb1b10abSAndroid Build Coastguard Worker void iadst8_c(const tran_low_t *input, tran_low_t *output) {
197*fb1b10abSAndroid Build Coastguard Worker int s0, s1, s2, s3, s4, s5, s6, s7;
198*fb1b10abSAndroid Build Coastguard Worker tran_high_t x0 = input[7];
199*fb1b10abSAndroid Build Coastguard Worker tran_high_t x1 = input[0];
200*fb1b10abSAndroid Build Coastguard Worker tran_high_t x2 = input[5];
201*fb1b10abSAndroid Build Coastguard Worker tran_high_t x3 = input[2];
202*fb1b10abSAndroid Build Coastguard Worker tran_high_t x4 = input[3];
203*fb1b10abSAndroid Build Coastguard Worker tran_high_t x5 = input[4];
204*fb1b10abSAndroid Build Coastguard Worker tran_high_t x6 = input[1];
205*fb1b10abSAndroid Build Coastguard Worker tran_high_t x7 = input[6];
206*fb1b10abSAndroid Build Coastguard Worker
207*fb1b10abSAndroid Build Coastguard Worker if (!(x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7)) {
208*fb1b10abSAndroid Build Coastguard Worker memset(output, 0, 8 * sizeof(*output));
209*fb1b10abSAndroid Build Coastguard Worker return;
210*fb1b10abSAndroid Build Coastguard Worker }
211*fb1b10abSAndroid Build Coastguard Worker
212*fb1b10abSAndroid Build Coastguard Worker // stage 1
213*fb1b10abSAndroid Build Coastguard Worker s0 = (int)(cospi_2_64 * x0 + cospi_30_64 * x1);
214*fb1b10abSAndroid Build Coastguard Worker s1 = (int)(cospi_30_64 * x0 - cospi_2_64 * x1);
215*fb1b10abSAndroid Build Coastguard Worker s2 = (int)(cospi_10_64 * x2 + cospi_22_64 * x3);
216*fb1b10abSAndroid Build Coastguard Worker s3 = (int)(cospi_22_64 * x2 - cospi_10_64 * x3);
217*fb1b10abSAndroid Build Coastguard Worker s4 = (int)(cospi_18_64 * x4 + cospi_14_64 * x5);
218*fb1b10abSAndroid Build Coastguard Worker s5 = (int)(cospi_14_64 * x4 - cospi_18_64 * x5);
219*fb1b10abSAndroid Build Coastguard Worker s6 = (int)(cospi_26_64 * x6 + cospi_6_64 * x7);
220*fb1b10abSAndroid Build Coastguard Worker s7 = (int)(cospi_6_64 * x6 - cospi_26_64 * x7);
221*fb1b10abSAndroid Build Coastguard Worker
222*fb1b10abSAndroid Build Coastguard Worker x0 = WRAPLOW(dct_const_round_shift(s0 + s4));
223*fb1b10abSAndroid Build Coastguard Worker x1 = WRAPLOW(dct_const_round_shift(s1 + s5));
224*fb1b10abSAndroid Build Coastguard Worker x2 = WRAPLOW(dct_const_round_shift(s2 + s6));
225*fb1b10abSAndroid Build Coastguard Worker x3 = WRAPLOW(dct_const_round_shift(s3 + s7));
226*fb1b10abSAndroid Build Coastguard Worker x4 = WRAPLOW(dct_const_round_shift(s0 - s4));
227*fb1b10abSAndroid Build Coastguard Worker x5 = WRAPLOW(dct_const_round_shift(s1 - s5));
228*fb1b10abSAndroid Build Coastguard Worker x6 = WRAPLOW(dct_const_round_shift(s2 - s6));
229*fb1b10abSAndroid Build Coastguard Worker x7 = WRAPLOW(dct_const_round_shift(s3 - s7));
230*fb1b10abSAndroid Build Coastguard Worker
231*fb1b10abSAndroid Build Coastguard Worker // stage 2
232*fb1b10abSAndroid Build Coastguard Worker s0 = (int)x0;
233*fb1b10abSAndroid Build Coastguard Worker s1 = (int)x1;
234*fb1b10abSAndroid Build Coastguard Worker s2 = (int)x2;
235*fb1b10abSAndroid Build Coastguard Worker s3 = (int)x3;
236*fb1b10abSAndroid Build Coastguard Worker s4 = (int)(cospi_8_64 * x4 + cospi_24_64 * x5);
237*fb1b10abSAndroid Build Coastguard Worker s5 = (int)(cospi_24_64 * x4 - cospi_8_64 * x5);
238*fb1b10abSAndroid Build Coastguard Worker s6 = (int)(-cospi_24_64 * x6 + cospi_8_64 * x7);
239*fb1b10abSAndroid Build Coastguard Worker s7 = (int)(cospi_8_64 * x6 + cospi_24_64 * x7);
240*fb1b10abSAndroid Build Coastguard Worker
241*fb1b10abSAndroid Build Coastguard Worker x0 = WRAPLOW(s0 + s2);
242*fb1b10abSAndroid Build Coastguard Worker x1 = WRAPLOW(s1 + s3);
243*fb1b10abSAndroid Build Coastguard Worker x2 = WRAPLOW(s0 - s2);
244*fb1b10abSAndroid Build Coastguard Worker x3 = WRAPLOW(s1 - s3);
245*fb1b10abSAndroid Build Coastguard Worker x4 = WRAPLOW(dct_const_round_shift(s4 + s6));
246*fb1b10abSAndroid Build Coastguard Worker x5 = WRAPLOW(dct_const_round_shift(s5 + s7));
247*fb1b10abSAndroid Build Coastguard Worker x6 = WRAPLOW(dct_const_round_shift(s4 - s6));
248*fb1b10abSAndroid Build Coastguard Worker x7 = WRAPLOW(dct_const_round_shift(s5 - s7));
249*fb1b10abSAndroid Build Coastguard Worker
250*fb1b10abSAndroid Build Coastguard Worker // stage 3
251*fb1b10abSAndroid Build Coastguard Worker s2 = (int)(cospi_16_64 * (x2 + x3));
252*fb1b10abSAndroid Build Coastguard Worker s3 = (int)(cospi_16_64 * (x2 - x3));
253*fb1b10abSAndroid Build Coastguard Worker s6 = (int)(cospi_16_64 * (x6 + x7));
254*fb1b10abSAndroid Build Coastguard Worker s7 = (int)(cospi_16_64 * (x6 - x7));
255*fb1b10abSAndroid Build Coastguard Worker
256*fb1b10abSAndroid Build Coastguard Worker x2 = WRAPLOW(dct_const_round_shift(s2));
257*fb1b10abSAndroid Build Coastguard Worker x3 = WRAPLOW(dct_const_round_shift(s3));
258*fb1b10abSAndroid Build Coastguard Worker x6 = WRAPLOW(dct_const_round_shift(s6));
259*fb1b10abSAndroid Build Coastguard Worker x7 = WRAPLOW(dct_const_round_shift(s7));
260*fb1b10abSAndroid Build Coastguard Worker
261*fb1b10abSAndroid Build Coastguard Worker output[0] = WRAPLOW(x0);
262*fb1b10abSAndroid Build Coastguard Worker output[1] = WRAPLOW(-x4);
263*fb1b10abSAndroid Build Coastguard Worker output[2] = WRAPLOW(x6);
264*fb1b10abSAndroid Build Coastguard Worker output[3] = WRAPLOW(-x2);
265*fb1b10abSAndroid Build Coastguard Worker output[4] = WRAPLOW(x3);
266*fb1b10abSAndroid Build Coastguard Worker output[5] = WRAPLOW(-x7);
267*fb1b10abSAndroid Build Coastguard Worker output[6] = WRAPLOW(x5);
268*fb1b10abSAndroid Build Coastguard Worker output[7] = WRAPLOW(-x1);
269*fb1b10abSAndroid Build Coastguard Worker }
270*fb1b10abSAndroid Build Coastguard Worker
idct8_c(const tran_low_t * input,tran_low_t * output)271*fb1b10abSAndroid Build Coastguard Worker void idct8_c(const tran_low_t *input, tran_low_t *output) {
272*fb1b10abSAndroid Build Coastguard Worker int16_t step1[8], step2[8];
273*fb1b10abSAndroid Build Coastguard Worker tran_high_t temp1, temp2;
274*fb1b10abSAndroid Build Coastguard Worker
275*fb1b10abSAndroid Build Coastguard Worker // stage 1
276*fb1b10abSAndroid Build Coastguard Worker step1[0] = (int16_t)input[0];
277*fb1b10abSAndroid Build Coastguard Worker step1[2] = (int16_t)input[4];
278*fb1b10abSAndroid Build Coastguard Worker step1[1] = (int16_t)input[2];
279*fb1b10abSAndroid Build Coastguard Worker step1[3] = (int16_t)input[6];
280*fb1b10abSAndroid Build Coastguard Worker temp1 = (int16_t)input[1] * cospi_28_64 - (int16_t)input[7] * cospi_4_64;
281*fb1b10abSAndroid Build Coastguard Worker temp2 = (int16_t)input[1] * cospi_4_64 + (int16_t)input[7] * cospi_28_64;
282*fb1b10abSAndroid Build Coastguard Worker step1[4] = WRAPLOW(dct_const_round_shift(temp1));
283*fb1b10abSAndroid Build Coastguard Worker step1[7] = WRAPLOW(dct_const_round_shift(temp2));
284*fb1b10abSAndroid Build Coastguard Worker temp1 = (int16_t)input[5] * cospi_12_64 - (int16_t)input[3] * cospi_20_64;
285*fb1b10abSAndroid Build Coastguard Worker temp2 = (int16_t)input[5] * cospi_20_64 + (int16_t)input[3] * cospi_12_64;
286*fb1b10abSAndroid Build Coastguard Worker step1[5] = WRAPLOW(dct_const_round_shift(temp1));
287*fb1b10abSAndroid Build Coastguard Worker step1[6] = WRAPLOW(dct_const_round_shift(temp2));
288*fb1b10abSAndroid Build Coastguard Worker
289*fb1b10abSAndroid Build Coastguard Worker // stage 2
290*fb1b10abSAndroid Build Coastguard Worker temp1 = (step1[0] + step1[2]) * cospi_16_64;
291*fb1b10abSAndroid Build Coastguard Worker temp2 = (step1[0] - step1[2]) * cospi_16_64;
292*fb1b10abSAndroid Build Coastguard Worker step2[0] = WRAPLOW(dct_const_round_shift(temp1));
293*fb1b10abSAndroid Build Coastguard Worker step2[1] = WRAPLOW(dct_const_round_shift(temp2));
294*fb1b10abSAndroid Build Coastguard Worker temp1 = step1[1] * cospi_24_64 - step1[3] * cospi_8_64;
295*fb1b10abSAndroid Build Coastguard Worker temp2 = step1[1] * cospi_8_64 + step1[3] * cospi_24_64;
296*fb1b10abSAndroid Build Coastguard Worker step2[2] = WRAPLOW(dct_const_round_shift(temp1));
297*fb1b10abSAndroid Build Coastguard Worker step2[3] = WRAPLOW(dct_const_round_shift(temp2));
298*fb1b10abSAndroid Build Coastguard Worker step2[4] = WRAPLOW(step1[4] + step1[5]);
299*fb1b10abSAndroid Build Coastguard Worker step2[5] = WRAPLOW(step1[4] - step1[5]);
300*fb1b10abSAndroid Build Coastguard Worker step2[6] = WRAPLOW(-step1[6] + step1[7]);
301*fb1b10abSAndroid Build Coastguard Worker step2[7] = WRAPLOW(step1[6] + step1[7]);
302*fb1b10abSAndroid Build Coastguard Worker
303*fb1b10abSAndroid Build Coastguard Worker // stage 3
304*fb1b10abSAndroid Build Coastguard Worker step1[0] = WRAPLOW(step2[0] + step2[3]);
305*fb1b10abSAndroid Build Coastguard Worker step1[1] = WRAPLOW(step2[1] + step2[2]);
306*fb1b10abSAndroid Build Coastguard Worker step1[2] = WRAPLOW(step2[1] - step2[2]);
307*fb1b10abSAndroid Build Coastguard Worker step1[3] = WRAPLOW(step2[0] - step2[3]);
308*fb1b10abSAndroid Build Coastguard Worker step1[4] = step2[4];
309*fb1b10abSAndroid Build Coastguard Worker temp1 = (step2[6] - step2[5]) * cospi_16_64;
310*fb1b10abSAndroid Build Coastguard Worker temp2 = (step2[5] + step2[6]) * cospi_16_64;
311*fb1b10abSAndroid Build Coastguard Worker step1[5] = WRAPLOW(dct_const_round_shift(temp1));
312*fb1b10abSAndroid Build Coastguard Worker step1[6] = WRAPLOW(dct_const_round_shift(temp2));
313*fb1b10abSAndroid Build Coastguard Worker step1[7] = step2[7];
314*fb1b10abSAndroid Build Coastguard Worker
315*fb1b10abSAndroid Build Coastguard Worker // stage 4
316*fb1b10abSAndroid Build Coastguard Worker output[0] = WRAPLOW(step1[0] + step1[7]);
317*fb1b10abSAndroid Build Coastguard Worker output[1] = WRAPLOW(step1[1] + step1[6]);
318*fb1b10abSAndroid Build Coastguard Worker output[2] = WRAPLOW(step1[2] + step1[5]);
319*fb1b10abSAndroid Build Coastguard Worker output[3] = WRAPLOW(step1[3] + step1[4]);
320*fb1b10abSAndroid Build Coastguard Worker output[4] = WRAPLOW(step1[3] - step1[4]);
321*fb1b10abSAndroid Build Coastguard Worker output[5] = WRAPLOW(step1[2] - step1[5]);
322*fb1b10abSAndroid Build Coastguard Worker output[6] = WRAPLOW(step1[1] - step1[6]);
323*fb1b10abSAndroid Build Coastguard Worker output[7] = WRAPLOW(step1[0] - step1[7]);
324*fb1b10abSAndroid Build Coastguard Worker }
325*fb1b10abSAndroid Build Coastguard Worker
vpx_idct8x8_64_add_c(const tran_low_t * input,uint8_t * dest,int stride)326*fb1b10abSAndroid Build Coastguard Worker void vpx_idct8x8_64_add_c(const tran_low_t *input, uint8_t *dest, int stride) {
327*fb1b10abSAndroid Build Coastguard Worker int i, j;
328*fb1b10abSAndroid Build Coastguard Worker tran_low_t out[8 * 8];
329*fb1b10abSAndroid Build Coastguard Worker tran_low_t *outptr = out;
330*fb1b10abSAndroid Build Coastguard Worker tran_low_t temp_in[8], temp_out[8];
331*fb1b10abSAndroid Build Coastguard Worker
332*fb1b10abSAndroid Build Coastguard Worker // First transform rows
333*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 8; ++i) {
334*fb1b10abSAndroid Build Coastguard Worker idct8_c(input, outptr);
335*fb1b10abSAndroid Build Coastguard Worker input += 8;
336*fb1b10abSAndroid Build Coastguard Worker outptr += 8;
337*fb1b10abSAndroid Build Coastguard Worker }
338*fb1b10abSAndroid Build Coastguard Worker
339*fb1b10abSAndroid Build Coastguard Worker // Then transform columns
340*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 8; ++i) {
341*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 8; ++j) temp_in[j] = out[j * 8 + i];
342*fb1b10abSAndroid Build Coastguard Worker idct8_c(temp_in, temp_out);
343*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 8; ++j) {
344*fb1b10abSAndroid Build Coastguard Worker dest[j * stride + i] = clip_pixel_add(dest[j * stride + i],
345*fb1b10abSAndroid Build Coastguard Worker ROUND_POWER_OF_TWO(temp_out[j], 5));
346*fb1b10abSAndroid Build Coastguard Worker }
347*fb1b10abSAndroid Build Coastguard Worker }
348*fb1b10abSAndroid Build Coastguard Worker }
349*fb1b10abSAndroid Build Coastguard Worker
vpx_idct8x8_12_add_c(const tran_low_t * input,uint8_t * dest,int stride)350*fb1b10abSAndroid Build Coastguard Worker void vpx_idct8x8_12_add_c(const tran_low_t *input, uint8_t *dest, int stride) {
351*fb1b10abSAndroid Build Coastguard Worker int i, j;
352*fb1b10abSAndroid Build Coastguard Worker tran_low_t out[8 * 8] = { 0 };
353*fb1b10abSAndroid Build Coastguard Worker tran_low_t *outptr = out;
354*fb1b10abSAndroid Build Coastguard Worker tran_low_t temp_in[8], temp_out[8];
355*fb1b10abSAndroid Build Coastguard Worker
356*fb1b10abSAndroid Build Coastguard Worker // First transform rows
357*fb1b10abSAndroid Build Coastguard Worker // Only first 4 row has non-zero coefs
358*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 4; ++i) {
359*fb1b10abSAndroid Build Coastguard Worker idct8_c(input, outptr);
360*fb1b10abSAndroid Build Coastguard Worker input += 8;
361*fb1b10abSAndroid Build Coastguard Worker outptr += 8;
362*fb1b10abSAndroid Build Coastguard Worker }
363*fb1b10abSAndroid Build Coastguard Worker
364*fb1b10abSAndroid Build Coastguard Worker // Then transform columns
365*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 8; ++i) {
366*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 8; ++j) temp_in[j] = out[j * 8 + i];
367*fb1b10abSAndroid Build Coastguard Worker idct8_c(temp_in, temp_out);
368*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 8; ++j) {
369*fb1b10abSAndroid Build Coastguard Worker dest[j * stride + i] = clip_pixel_add(dest[j * stride + i],
370*fb1b10abSAndroid Build Coastguard Worker ROUND_POWER_OF_TWO(temp_out[j], 5));
371*fb1b10abSAndroid Build Coastguard Worker }
372*fb1b10abSAndroid Build Coastguard Worker }
373*fb1b10abSAndroid Build Coastguard Worker }
374*fb1b10abSAndroid Build Coastguard Worker
vpx_idct8x8_1_add_c(const tran_low_t * input,uint8_t * dest,int stride)375*fb1b10abSAndroid Build Coastguard Worker void vpx_idct8x8_1_add_c(const tran_low_t *input, uint8_t *dest, int stride) {
376*fb1b10abSAndroid Build Coastguard Worker int i, j;
377*fb1b10abSAndroid Build Coastguard Worker tran_high_t a1;
378*fb1b10abSAndroid Build Coastguard Worker tran_low_t out =
379*fb1b10abSAndroid Build Coastguard Worker WRAPLOW(dct_const_round_shift((int16_t)input[0] * cospi_16_64));
380*fb1b10abSAndroid Build Coastguard Worker
381*fb1b10abSAndroid Build Coastguard Worker out = WRAPLOW(dct_const_round_shift(out * cospi_16_64));
382*fb1b10abSAndroid Build Coastguard Worker a1 = ROUND_POWER_OF_TWO(out, 5);
383*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 8; ++j) {
384*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 8; ++i) dest[i] = clip_pixel_add(dest[i], a1);
385*fb1b10abSAndroid Build Coastguard Worker dest += stride;
386*fb1b10abSAndroid Build Coastguard Worker }
387*fb1b10abSAndroid Build Coastguard Worker }
388*fb1b10abSAndroid Build Coastguard Worker
iadst16_c(const tran_low_t * input,tran_low_t * output)389*fb1b10abSAndroid Build Coastguard Worker void iadst16_c(const tran_low_t *input, tran_low_t *output) {
390*fb1b10abSAndroid Build Coastguard Worker tran_high_t s0, s1, s2, s3, s4, s5, s6, s7, s8;
391*fb1b10abSAndroid Build Coastguard Worker tran_high_t s9, s10, s11, s12, s13, s14, s15;
392*fb1b10abSAndroid Build Coastguard Worker tran_high_t x0 = input[15];
393*fb1b10abSAndroid Build Coastguard Worker tran_high_t x1 = input[0];
394*fb1b10abSAndroid Build Coastguard Worker tran_high_t x2 = input[13];
395*fb1b10abSAndroid Build Coastguard Worker tran_high_t x3 = input[2];
396*fb1b10abSAndroid Build Coastguard Worker tran_high_t x4 = input[11];
397*fb1b10abSAndroid Build Coastguard Worker tran_high_t x5 = input[4];
398*fb1b10abSAndroid Build Coastguard Worker tran_high_t x6 = input[9];
399*fb1b10abSAndroid Build Coastguard Worker tran_high_t x7 = input[6];
400*fb1b10abSAndroid Build Coastguard Worker tran_high_t x8 = input[7];
401*fb1b10abSAndroid Build Coastguard Worker tran_high_t x9 = input[8];
402*fb1b10abSAndroid Build Coastguard Worker tran_high_t x10 = input[5];
403*fb1b10abSAndroid Build Coastguard Worker tran_high_t x11 = input[10];
404*fb1b10abSAndroid Build Coastguard Worker tran_high_t x12 = input[3];
405*fb1b10abSAndroid Build Coastguard Worker tran_high_t x13 = input[12];
406*fb1b10abSAndroid Build Coastguard Worker tran_high_t x14 = input[1];
407*fb1b10abSAndroid Build Coastguard Worker tran_high_t x15 = input[14];
408*fb1b10abSAndroid Build Coastguard Worker
409*fb1b10abSAndroid Build Coastguard Worker if (!(x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | x10 | x11 | x12 |
410*fb1b10abSAndroid Build Coastguard Worker x13 | x14 | x15)) {
411*fb1b10abSAndroid Build Coastguard Worker memset(output, 0, 16 * sizeof(*output));
412*fb1b10abSAndroid Build Coastguard Worker return;
413*fb1b10abSAndroid Build Coastguard Worker }
414*fb1b10abSAndroid Build Coastguard Worker
415*fb1b10abSAndroid Build Coastguard Worker // stage 1
416*fb1b10abSAndroid Build Coastguard Worker s0 = x0 * cospi_1_64 + x1 * cospi_31_64;
417*fb1b10abSAndroid Build Coastguard Worker s1 = x0 * cospi_31_64 - x1 * cospi_1_64;
418*fb1b10abSAndroid Build Coastguard Worker s2 = x2 * cospi_5_64 + x3 * cospi_27_64;
419*fb1b10abSAndroid Build Coastguard Worker s3 = x2 * cospi_27_64 - x3 * cospi_5_64;
420*fb1b10abSAndroid Build Coastguard Worker s4 = x4 * cospi_9_64 + x5 * cospi_23_64;
421*fb1b10abSAndroid Build Coastguard Worker s5 = x4 * cospi_23_64 - x5 * cospi_9_64;
422*fb1b10abSAndroid Build Coastguard Worker s6 = x6 * cospi_13_64 + x7 * cospi_19_64;
423*fb1b10abSAndroid Build Coastguard Worker s7 = x6 * cospi_19_64 - x7 * cospi_13_64;
424*fb1b10abSAndroid Build Coastguard Worker s8 = x8 * cospi_17_64 + x9 * cospi_15_64;
425*fb1b10abSAndroid Build Coastguard Worker s9 = x8 * cospi_15_64 - x9 * cospi_17_64;
426*fb1b10abSAndroid Build Coastguard Worker s10 = x10 * cospi_21_64 + x11 * cospi_11_64;
427*fb1b10abSAndroid Build Coastguard Worker s11 = x10 * cospi_11_64 - x11 * cospi_21_64;
428*fb1b10abSAndroid Build Coastguard Worker s12 = x12 * cospi_25_64 + x13 * cospi_7_64;
429*fb1b10abSAndroid Build Coastguard Worker s13 = x12 * cospi_7_64 - x13 * cospi_25_64;
430*fb1b10abSAndroid Build Coastguard Worker s14 = x14 * cospi_29_64 + x15 * cospi_3_64;
431*fb1b10abSAndroid Build Coastguard Worker s15 = x14 * cospi_3_64 - x15 * cospi_29_64;
432*fb1b10abSAndroid Build Coastguard Worker
433*fb1b10abSAndroid Build Coastguard Worker x0 = WRAPLOW(dct_const_round_shift(s0 + s8));
434*fb1b10abSAndroid Build Coastguard Worker x1 = WRAPLOW(dct_const_round_shift(s1 + s9));
435*fb1b10abSAndroid Build Coastguard Worker x2 = WRAPLOW(dct_const_round_shift(s2 + s10));
436*fb1b10abSAndroid Build Coastguard Worker x3 = WRAPLOW(dct_const_round_shift(s3 + s11));
437*fb1b10abSAndroid Build Coastguard Worker x4 = WRAPLOW(dct_const_round_shift(s4 + s12));
438*fb1b10abSAndroid Build Coastguard Worker x5 = WRAPLOW(dct_const_round_shift(s5 + s13));
439*fb1b10abSAndroid Build Coastguard Worker x6 = WRAPLOW(dct_const_round_shift(s6 + s14));
440*fb1b10abSAndroid Build Coastguard Worker x7 = WRAPLOW(dct_const_round_shift(s7 + s15));
441*fb1b10abSAndroid Build Coastguard Worker x8 = WRAPLOW(dct_const_round_shift(s0 - s8));
442*fb1b10abSAndroid Build Coastguard Worker x9 = WRAPLOW(dct_const_round_shift(s1 - s9));
443*fb1b10abSAndroid Build Coastguard Worker x10 = WRAPLOW(dct_const_round_shift(s2 - s10));
444*fb1b10abSAndroid Build Coastguard Worker x11 = WRAPLOW(dct_const_round_shift(s3 - s11));
445*fb1b10abSAndroid Build Coastguard Worker x12 = WRAPLOW(dct_const_round_shift(s4 - s12));
446*fb1b10abSAndroid Build Coastguard Worker x13 = WRAPLOW(dct_const_round_shift(s5 - s13));
447*fb1b10abSAndroid Build Coastguard Worker x14 = WRAPLOW(dct_const_round_shift(s6 - s14));
448*fb1b10abSAndroid Build Coastguard Worker x15 = WRAPLOW(dct_const_round_shift(s7 - s15));
449*fb1b10abSAndroid Build Coastguard Worker
450*fb1b10abSAndroid Build Coastguard Worker // stage 2
451*fb1b10abSAndroid Build Coastguard Worker s0 = x0;
452*fb1b10abSAndroid Build Coastguard Worker s1 = x1;
453*fb1b10abSAndroid Build Coastguard Worker s2 = x2;
454*fb1b10abSAndroid Build Coastguard Worker s3 = x3;
455*fb1b10abSAndroid Build Coastguard Worker s4 = x4;
456*fb1b10abSAndroid Build Coastguard Worker s5 = x5;
457*fb1b10abSAndroid Build Coastguard Worker s6 = x6;
458*fb1b10abSAndroid Build Coastguard Worker s7 = x7;
459*fb1b10abSAndroid Build Coastguard Worker s8 = x8 * cospi_4_64 + x9 * cospi_28_64;
460*fb1b10abSAndroid Build Coastguard Worker s9 = x8 * cospi_28_64 - x9 * cospi_4_64;
461*fb1b10abSAndroid Build Coastguard Worker s10 = x10 * cospi_20_64 + x11 * cospi_12_64;
462*fb1b10abSAndroid Build Coastguard Worker s11 = x10 * cospi_12_64 - x11 * cospi_20_64;
463*fb1b10abSAndroid Build Coastguard Worker s12 = -x12 * cospi_28_64 + x13 * cospi_4_64;
464*fb1b10abSAndroid Build Coastguard Worker s13 = x12 * cospi_4_64 + x13 * cospi_28_64;
465*fb1b10abSAndroid Build Coastguard Worker s14 = -x14 * cospi_12_64 + x15 * cospi_20_64;
466*fb1b10abSAndroid Build Coastguard Worker s15 = x14 * cospi_20_64 + x15 * cospi_12_64;
467*fb1b10abSAndroid Build Coastguard Worker
468*fb1b10abSAndroid Build Coastguard Worker x0 = WRAPLOW(s0 + s4);
469*fb1b10abSAndroid Build Coastguard Worker x1 = WRAPLOW(s1 + s5);
470*fb1b10abSAndroid Build Coastguard Worker x2 = WRAPLOW(s2 + s6);
471*fb1b10abSAndroid Build Coastguard Worker x3 = WRAPLOW(s3 + s7);
472*fb1b10abSAndroid Build Coastguard Worker x4 = WRAPLOW(s0 - s4);
473*fb1b10abSAndroid Build Coastguard Worker x5 = WRAPLOW(s1 - s5);
474*fb1b10abSAndroid Build Coastguard Worker x6 = WRAPLOW(s2 - s6);
475*fb1b10abSAndroid Build Coastguard Worker x7 = WRAPLOW(s3 - s7);
476*fb1b10abSAndroid Build Coastguard Worker x8 = WRAPLOW(dct_const_round_shift(s8 + s12));
477*fb1b10abSAndroid Build Coastguard Worker x9 = WRAPLOW(dct_const_round_shift(s9 + s13));
478*fb1b10abSAndroid Build Coastguard Worker x10 = WRAPLOW(dct_const_round_shift(s10 + s14));
479*fb1b10abSAndroid Build Coastguard Worker x11 = WRAPLOW(dct_const_round_shift(s11 + s15));
480*fb1b10abSAndroid Build Coastguard Worker x12 = WRAPLOW(dct_const_round_shift(s8 - s12));
481*fb1b10abSAndroid Build Coastguard Worker x13 = WRAPLOW(dct_const_round_shift(s9 - s13));
482*fb1b10abSAndroid Build Coastguard Worker x14 = WRAPLOW(dct_const_round_shift(s10 - s14));
483*fb1b10abSAndroid Build Coastguard Worker x15 = WRAPLOW(dct_const_round_shift(s11 - s15));
484*fb1b10abSAndroid Build Coastguard Worker
485*fb1b10abSAndroid Build Coastguard Worker // stage 3
486*fb1b10abSAndroid Build Coastguard Worker s0 = x0;
487*fb1b10abSAndroid Build Coastguard Worker s1 = x1;
488*fb1b10abSAndroid Build Coastguard Worker s2 = x2;
489*fb1b10abSAndroid Build Coastguard Worker s3 = x3;
490*fb1b10abSAndroid Build Coastguard Worker s4 = x4 * cospi_8_64 + x5 * cospi_24_64;
491*fb1b10abSAndroid Build Coastguard Worker s5 = x4 * cospi_24_64 - x5 * cospi_8_64;
492*fb1b10abSAndroid Build Coastguard Worker s6 = -x6 * cospi_24_64 + x7 * cospi_8_64;
493*fb1b10abSAndroid Build Coastguard Worker s7 = x6 * cospi_8_64 + x7 * cospi_24_64;
494*fb1b10abSAndroid Build Coastguard Worker s8 = x8;
495*fb1b10abSAndroid Build Coastguard Worker s9 = x9;
496*fb1b10abSAndroid Build Coastguard Worker s10 = x10;
497*fb1b10abSAndroid Build Coastguard Worker s11 = x11;
498*fb1b10abSAndroid Build Coastguard Worker s12 = x12 * cospi_8_64 + x13 * cospi_24_64;
499*fb1b10abSAndroid Build Coastguard Worker s13 = x12 * cospi_24_64 - x13 * cospi_8_64;
500*fb1b10abSAndroid Build Coastguard Worker s14 = -x14 * cospi_24_64 + x15 * cospi_8_64;
501*fb1b10abSAndroid Build Coastguard Worker s15 = x14 * cospi_8_64 + x15 * cospi_24_64;
502*fb1b10abSAndroid Build Coastguard Worker
503*fb1b10abSAndroid Build Coastguard Worker x0 = WRAPLOW(s0 + s2);
504*fb1b10abSAndroid Build Coastguard Worker x1 = WRAPLOW(s1 + s3);
505*fb1b10abSAndroid Build Coastguard Worker x2 = WRAPLOW(s0 - s2);
506*fb1b10abSAndroid Build Coastguard Worker x3 = WRAPLOW(s1 - s3);
507*fb1b10abSAndroid Build Coastguard Worker x4 = WRAPLOW(dct_const_round_shift(s4 + s6));
508*fb1b10abSAndroid Build Coastguard Worker x5 = WRAPLOW(dct_const_round_shift(s5 + s7));
509*fb1b10abSAndroid Build Coastguard Worker x6 = WRAPLOW(dct_const_round_shift(s4 - s6));
510*fb1b10abSAndroid Build Coastguard Worker x7 = WRAPLOW(dct_const_round_shift(s5 - s7));
511*fb1b10abSAndroid Build Coastguard Worker x8 = WRAPLOW(s8 + s10);
512*fb1b10abSAndroid Build Coastguard Worker x9 = WRAPLOW(s9 + s11);
513*fb1b10abSAndroid Build Coastguard Worker x10 = WRAPLOW(s8 - s10);
514*fb1b10abSAndroid Build Coastguard Worker x11 = WRAPLOW(s9 - s11);
515*fb1b10abSAndroid Build Coastguard Worker x12 = WRAPLOW(dct_const_round_shift(s12 + s14));
516*fb1b10abSAndroid Build Coastguard Worker x13 = WRAPLOW(dct_const_round_shift(s13 + s15));
517*fb1b10abSAndroid Build Coastguard Worker x14 = WRAPLOW(dct_const_round_shift(s12 - s14));
518*fb1b10abSAndroid Build Coastguard Worker x15 = WRAPLOW(dct_const_round_shift(s13 - s15));
519*fb1b10abSAndroid Build Coastguard Worker
520*fb1b10abSAndroid Build Coastguard Worker // stage 4
521*fb1b10abSAndroid Build Coastguard Worker s2 = (-cospi_16_64) * (x2 + x3);
522*fb1b10abSAndroid Build Coastguard Worker s3 = cospi_16_64 * (x2 - x3);
523*fb1b10abSAndroid Build Coastguard Worker s6 = cospi_16_64 * (x6 + x7);
524*fb1b10abSAndroid Build Coastguard Worker s7 = cospi_16_64 * (-x6 + x7);
525*fb1b10abSAndroid Build Coastguard Worker s10 = cospi_16_64 * (x10 + x11);
526*fb1b10abSAndroid Build Coastguard Worker s11 = cospi_16_64 * (-x10 + x11);
527*fb1b10abSAndroid Build Coastguard Worker s14 = (-cospi_16_64) * (x14 + x15);
528*fb1b10abSAndroid Build Coastguard Worker s15 = cospi_16_64 * (x14 - x15);
529*fb1b10abSAndroid Build Coastguard Worker
530*fb1b10abSAndroid Build Coastguard Worker x2 = WRAPLOW(dct_const_round_shift(s2));
531*fb1b10abSAndroid Build Coastguard Worker x3 = WRAPLOW(dct_const_round_shift(s3));
532*fb1b10abSAndroid Build Coastguard Worker x6 = WRAPLOW(dct_const_round_shift(s6));
533*fb1b10abSAndroid Build Coastguard Worker x7 = WRAPLOW(dct_const_round_shift(s7));
534*fb1b10abSAndroid Build Coastguard Worker x10 = WRAPLOW(dct_const_round_shift(s10));
535*fb1b10abSAndroid Build Coastguard Worker x11 = WRAPLOW(dct_const_round_shift(s11));
536*fb1b10abSAndroid Build Coastguard Worker x14 = WRAPLOW(dct_const_round_shift(s14));
537*fb1b10abSAndroid Build Coastguard Worker x15 = WRAPLOW(dct_const_round_shift(s15));
538*fb1b10abSAndroid Build Coastguard Worker
539*fb1b10abSAndroid Build Coastguard Worker output[0] = WRAPLOW(x0);
540*fb1b10abSAndroid Build Coastguard Worker output[1] = WRAPLOW(-x8);
541*fb1b10abSAndroid Build Coastguard Worker output[2] = WRAPLOW(x12);
542*fb1b10abSAndroid Build Coastguard Worker output[3] = WRAPLOW(-x4);
543*fb1b10abSAndroid Build Coastguard Worker output[4] = WRAPLOW(x6);
544*fb1b10abSAndroid Build Coastguard Worker output[5] = WRAPLOW(x14);
545*fb1b10abSAndroid Build Coastguard Worker output[6] = WRAPLOW(x10);
546*fb1b10abSAndroid Build Coastguard Worker output[7] = WRAPLOW(x2);
547*fb1b10abSAndroid Build Coastguard Worker output[8] = WRAPLOW(x3);
548*fb1b10abSAndroid Build Coastguard Worker output[9] = WRAPLOW(x11);
549*fb1b10abSAndroid Build Coastguard Worker output[10] = WRAPLOW(x15);
550*fb1b10abSAndroid Build Coastguard Worker output[11] = WRAPLOW(x7);
551*fb1b10abSAndroid Build Coastguard Worker output[12] = WRAPLOW(x5);
552*fb1b10abSAndroid Build Coastguard Worker output[13] = WRAPLOW(-x13);
553*fb1b10abSAndroid Build Coastguard Worker output[14] = WRAPLOW(x9);
554*fb1b10abSAndroid Build Coastguard Worker output[15] = WRAPLOW(-x1);
555*fb1b10abSAndroid Build Coastguard Worker }
556*fb1b10abSAndroid Build Coastguard Worker
idct16_c(const tran_low_t * input,tran_low_t * output)557*fb1b10abSAndroid Build Coastguard Worker void idct16_c(const tran_low_t *input, tran_low_t *output) {
558*fb1b10abSAndroid Build Coastguard Worker int16_t step1[16], step2[16];
559*fb1b10abSAndroid Build Coastguard Worker tran_high_t temp1, temp2;
560*fb1b10abSAndroid Build Coastguard Worker
561*fb1b10abSAndroid Build Coastguard Worker // stage 1
562*fb1b10abSAndroid Build Coastguard Worker step1[0] = (int16_t)input[0 / 2];
563*fb1b10abSAndroid Build Coastguard Worker step1[1] = (int16_t)input[16 / 2];
564*fb1b10abSAndroid Build Coastguard Worker step1[2] = (int16_t)input[8 / 2];
565*fb1b10abSAndroid Build Coastguard Worker step1[3] = (int16_t)input[24 / 2];
566*fb1b10abSAndroid Build Coastguard Worker step1[4] = (int16_t)input[4 / 2];
567*fb1b10abSAndroid Build Coastguard Worker step1[5] = (int16_t)input[20 / 2];
568*fb1b10abSAndroid Build Coastguard Worker step1[6] = (int16_t)input[12 / 2];
569*fb1b10abSAndroid Build Coastguard Worker step1[7] = (int16_t)input[28 / 2];
570*fb1b10abSAndroid Build Coastguard Worker step1[8] = (int16_t)input[2 / 2];
571*fb1b10abSAndroid Build Coastguard Worker step1[9] = (int16_t)input[18 / 2];
572*fb1b10abSAndroid Build Coastguard Worker step1[10] = (int16_t)input[10 / 2];
573*fb1b10abSAndroid Build Coastguard Worker step1[11] = (int16_t)input[26 / 2];
574*fb1b10abSAndroid Build Coastguard Worker step1[12] = (int16_t)input[6 / 2];
575*fb1b10abSAndroid Build Coastguard Worker step1[13] = (int16_t)input[22 / 2];
576*fb1b10abSAndroid Build Coastguard Worker step1[14] = (int16_t)input[14 / 2];
577*fb1b10abSAndroid Build Coastguard Worker step1[15] = (int16_t)input[30 / 2];
578*fb1b10abSAndroid Build Coastguard Worker
579*fb1b10abSAndroid Build Coastguard Worker // stage 2
580*fb1b10abSAndroid Build Coastguard Worker step2[0] = step1[0];
581*fb1b10abSAndroid Build Coastguard Worker step2[1] = step1[1];
582*fb1b10abSAndroid Build Coastguard Worker step2[2] = step1[2];
583*fb1b10abSAndroid Build Coastguard Worker step2[3] = step1[3];
584*fb1b10abSAndroid Build Coastguard Worker step2[4] = step1[4];
585*fb1b10abSAndroid Build Coastguard Worker step2[5] = step1[5];
586*fb1b10abSAndroid Build Coastguard Worker step2[6] = step1[6];
587*fb1b10abSAndroid Build Coastguard Worker step2[7] = step1[7];
588*fb1b10abSAndroid Build Coastguard Worker
589*fb1b10abSAndroid Build Coastguard Worker temp1 = step1[8] * cospi_30_64 - step1[15] * cospi_2_64;
590*fb1b10abSAndroid Build Coastguard Worker temp2 = step1[8] * cospi_2_64 + step1[15] * cospi_30_64;
591*fb1b10abSAndroid Build Coastguard Worker step2[8] = WRAPLOW(dct_const_round_shift(temp1));
592*fb1b10abSAndroid Build Coastguard Worker step2[15] = WRAPLOW(dct_const_round_shift(temp2));
593*fb1b10abSAndroid Build Coastguard Worker
594*fb1b10abSAndroid Build Coastguard Worker temp1 = step1[9] * cospi_14_64 - step1[14] * cospi_18_64;
595*fb1b10abSAndroid Build Coastguard Worker temp2 = step1[9] * cospi_18_64 + step1[14] * cospi_14_64;
596*fb1b10abSAndroid Build Coastguard Worker step2[9] = WRAPLOW(dct_const_round_shift(temp1));
597*fb1b10abSAndroid Build Coastguard Worker step2[14] = WRAPLOW(dct_const_round_shift(temp2));
598*fb1b10abSAndroid Build Coastguard Worker
599*fb1b10abSAndroid Build Coastguard Worker temp1 = step1[10] * cospi_22_64 - step1[13] * cospi_10_64;
600*fb1b10abSAndroid Build Coastguard Worker temp2 = step1[10] * cospi_10_64 + step1[13] * cospi_22_64;
601*fb1b10abSAndroid Build Coastguard Worker step2[10] = WRAPLOW(dct_const_round_shift(temp1));
602*fb1b10abSAndroid Build Coastguard Worker step2[13] = WRAPLOW(dct_const_round_shift(temp2));
603*fb1b10abSAndroid Build Coastguard Worker
604*fb1b10abSAndroid Build Coastguard Worker temp1 = step1[11] * cospi_6_64 - step1[12] * cospi_26_64;
605*fb1b10abSAndroid Build Coastguard Worker temp2 = step1[11] * cospi_26_64 + step1[12] * cospi_6_64;
606*fb1b10abSAndroid Build Coastguard Worker step2[11] = WRAPLOW(dct_const_round_shift(temp1));
607*fb1b10abSAndroid Build Coastguard Worker step2[12] = WRAPLOW(dct_const_round_shift(temp2));
608*fb1b10abSAndroid Build Coastguard Worker
609*fb1b10abSAndroid Build Coastguard Worker // stage 3
610*fb1b10abSAndroid Build Coastguard Worker step1[0] = step2[0];
611*fb1b10abSAndroid Build Coastguard Worker step1[1] = step2[1];
612*fb1b10abSAndroid Build Coastguard Worker step1[2] = step2[2];
613*fb1b10abSAndroid Build Coastguard Worker step1[3] = step2[3];
614*fb1b10abSAndroid Build Coastguard Worker
615*fb1b10abSAndroid Build Coastguard Worker temp1 = step2[4] * cospi_28_64 - step2[7] * cospi_4_64;
616*fb1b10abSAndroid Build Coastguard Worker temp2 = step2[4] * cospi_4_64 + step2[7] * cospi_28_64;
617*fb1b10abSAndroid Build Coastguard Worker step1[4] = WRAPLOW(dct_const_round_shift(temp1));
618*fb1b10abSAndroid Build Coastguard Worker step1[7] = WRAPLOW(dct_const_round_shift(temp2));
619*fb1b10abSAndroid Build Coastguard Worker temp1 = step2[5] * cospi_12_64 - step2[6] * cospi_20_64;
620*fb1b10abSAndroid Build Coastguard Worker temp2 = step2[5] * cospi_20_64 + step2[6] * cospi_12_64;
621*fb1b10abSAndroid Build Coastguard Worker step1[5] = WRAPLOW(dct_const_round_shift(temp1));
622*fb1b10abSAndroid Build Coastguard Worker step1[6] = WRAPLOW(dct_const_round_shift(temp2));
623*fb1b10abSAndroid Build Coastguard Worker
624*fb1b10abSAndroid Build Coastguard Worker step1[8] = WRAPLOW(step2[8] + step2[9]);
625*fb1b10abSAndroid Build Coastguard Worker step1[9] = WRAPLOW(step2[8] - step2[9]);
626*fb1b10abSAndroid Build Coastguard Worker step1[10] = WRAPLOW(-step2[10] + step2[11]);
627*fb1b10abSAndroid Build Coastguard Worker step1[11] = WRAPLOW(step2[10] + step2[11]);
628*fb1b10abSAndroid Build Coastguard Worker step1[12] = WRAPLOW(step2[12] + step2[13]);
629*fb1b10abSAndroid Build Coastguard Worker step1[13] = WRAPLOW(step2[12] - step2[13]);
630*fb1b10abSAndroid Build Coastguard Worker step1[14] = WRAPLOW(-step2[14] + step2[15]);
631*fb1b10abSAndroid Build Coastguard Worker step1[15] = WRAPLOW(step2[14] + step2[15]);
632*fb1b10abSAndroid Build Coastguard Worker
633*fb1b10abSAndroid Build Coastguard Worker // stage 4
634*fb1b10abSAndroid Build Coastguard Worker temp1 = (step1[0] + step1[1]) * cospi_16_64;
635*fb1b10abSAndroid Build Coastguard Worker temp2 = (step1[0] - step1[1]) * cospi_16_64;
636*fb1b10abSAndroid Build Coastguard Worker step2[0] = WRAPLOW(dct_const_round_shift(temp1));
637*fb1b10abSAndroid Build Coastguard Worker step2[1] = WRAPLOW(dct_const_round_shift(temp2));
638*fb1b10abSAndroid Build Coastguard Worker temp1 = step1[2] * cospi_24_64 - step1[3] * cospi_8_64;
639*fb1b10abSAndroid Build Coastguard Worker temp2 = step1[2] * cospi_8_64 + step1[3] * cospi_24_64;
640*fb1b10abSAndroid Build Coastguard Worker step2[2] = WRAPLOW(dct_const_round_shift(temp1));
641*fb1b10abSAndroid Build Coastguard Worker step2[3] = WRAPLOW(dct_const_round_shift(temp2));
642*fb1b10abSAndroid Build Coastguard Worker step2[4] = WRAPLOW(step1[4] + step1[5]);
643*fb1b10abSAndroid Build Coastguard Worker step2[5] = WRAPLOW(step1[4] - step1[5]);
644*fb1b10abSAndroid Build Coastguard Worker step2[6] = WRAPLOW(-step1[6] + step1[7]);
645*fb1b10abSAndroid Build Coastguard Worker step2[7] = WRAPLOW(step1[6] + step1[7]);
646*fb1b10abSAndroid Build Coastguard Worker
647*fb1b10abSAndroid Build Coastguard Worker step2[8] = step1[8];
648*fb1b10abSAndroid Build Coastguard Worker step2[15] = step1[15];
649*fb1b10abSAndroid Build Coastguard Worker temp1 = -step1[9] * cospi_8_64 + step1[14] * cospi_24_64;
650*fb1b10abSAndroid Build Coastguard Worker temp2 = step1[9] * cospi_24_64 + step1[14] * cospi_8_64;
651*fb1b10abSAndroid Build Coastguard Worker step2[9] = WRAPLOW(dct_const_round_shift(temp1));
652*fb1b10abSAndroid Build Coastguard Worker step2[14] = WRAPLOW(dct_const_round_shift(temp2));
653*fb1b10abSAndroid Build Coastguard Worker temp1 = -step1[10] * cospi_24_64 - step1[13] * cospi_8_64;
654*fb1b10abSAndroid Build Coastguard Worker temp2 = -step1[10] * cospi_8_64 + step1[13] * cospi_24_64;
655*fb1b10abSAndroid Build Coastguard Worker step2[10] = WRAPLOW(dct_const_round_shift(temp1));
656*fb1b10abSAndroid Build Coastguard Worker step2[13] = WRAPLOW(dct_const_round_shift(temp2));
657*fb1b10abSAndroid Build Coastguard Worker step2[11] = step1[11];
658*fb1b10abSAndroid Build Coastguard Worker step2[12] = step1[12];
659*fb1b10abSAndroid Build Coastguard Worker
660*fb1b10abSAndroid Build Coastguard Worker // stage 5
661*fb1b10abSAndroid Build Coastguard Worker step1[0] = WRAPLOW(step2[0] + step2[3]);
662*fb1b10abSAndroid Build Coastguard Worker step1[1] = WRAPLOW(step2[1] + step2[2]);
663*fb1b10abSAndroid Build Coastguard Worker step1[2] = WRAPLOW(step2[1] - step2[2]);
664*fb1b10abSAndroid Build Coastguard Worker step1[3] = WRAPLOW(step2[0] - step2[3]);
665*fb1b10abSAndroid Build Coastguard Worker step1[4] = step2[4];
666*fb1b10abSAndroid Build Coastguard Worker temp1 = (step2[6] - step2[5]) * cospi_16_64;
667*fb1b10abSAndroid Build Coastguard Worker temp2 = (step2[5] + step2[6]) * cospi_16_64;
668*fb1b10abSAndroid Build Coastguard Worker step1[5] = WRAPLOW(dct_const_round_shift(temp1));
669*fb1b10abSAndroid Build Coastguard Worker step1[6] = WRAPLOW(dct_const_round_shift(temp2));
670*fb1b10abSAndroid Build Coastguard Worker step1[7] = step2[7];
671*fb1b10abSAndroid Build Coastguard Worker
672*fb1b10abSAndroid Build Coastguard Worker step1[8] = WRAPLOW(step2[8] + step2[11]);
673*fb1b10abSAndroid Build Coastguard Worker step1[9] = WRAPLOW(step2[9] + step2[10]);
674*fb1b10abSAndroid Build Coastguard Worker step1[10] = WRAPLOW(step2[9] - step2[10]);
675*fb1b10abSAndroid Build Coastguard Worker step1[11] = WRAPLOW(step2[8] - step2[11]);
676*fb1b10abSAndroid Build Coastguard Worker step1[12] = WRAPLOW(-step2[12] + step2[15]);
677*fb1b10abSAndroid Build Coastguard Worker step1[13] = WRAPLOW(-step2[13] + step2[14]);
678*fb1b10abSAndroid Build Coastguard Worker step1[14] = WRAPLOW(step2[13] + step2[14]);
679*fb1b10abSAndroid Build Coastguard Worker step1[15] = WRAPLOW(step2[12] + step2[15]);
680*fb1b10abSAndroid Build Coastguard Worker
681*fb1b10abSAndroid Build Coastguard Worker // stage 6
682*fb1b10abSAndroid Build Coastguard Worker step2[0] = WRAPLOW(step1[0] + step1[7]);
683*fb1b10abSAndroid Build Coastguard Worker step2[1] = WRAPLOW(step1[1] + step1[6]);
684*fb1b10abSAndroid Build Coastguard Worker step2[2] = WRAPLOW(step1[2] + step1[5]);
685*fb1b10abSAndroid Build Coastguard Worker step2[3] = WRAPLOW(step1[3] + step1[4]);
686*fb1b10abSAndroid Build Coastguard Worker step2[4] = WRAPLOW(step1[3] - step1[4]);
687*fb1b10abSAndroid Build Coastguard Worker step2[5] = WRAPLOW(step1[2] - step1[5]);
688*fb1b10abSAndroid Build Coastguard Worker step2[6] = WRAPLOW(step1[1] - step1[6]);
689*fb1b10abSAndroid Build Coastguard Worker step2[7] = WRAPLOW(step1[0] - step1[7]);
690*fb1b10abSAndroid Build Coastguard Worker step2[8] = step1[8];
691*fb1b10abSAndroid Build Coastguard Worker step2[9] = step1[9];
692*fb1b10abSAndroid Build Coastguard Worker temp1 = (-step1[10] + step1[13]) * cospi_16_64;
693*fb1b10abSAndroid Build Coastguard Worker temp2 = (step1[10] + step1[13]) * cospi_16_64;
694*fb1b10abSAndroid Build Coastguard Worker step2[10] = WRAPLOW(dct_const_round_shift(temp1));
695*fb1b10abSAndroid Build Coastguard Worker step2[13] = WRAPLOW(dct_const_round_shift(temp2));
696*fb1b10abSAndroid Build Coastguard Worker temp1 = (-step1[11] + step1[12]) * cospi_16_64;
697*fb1b10abSAndroid Build Coastguard Worker temp2 = (step1[11] + step1[12]) * cospi_16_64;
698*fb1b10abSAndroid Build Coastguard Worker step2[11] = WRAPLOW(dct_const_round_shift(temp1));
699*fb1b10abSAndroid Build Coastguard Worker step2[12] = WRAPLOW(dct_const_round_shift(temp2));
700*fb1b10abSAndroid Build Coastguard Worker step2[14] = step1[14];
701*fb1b10abSAndroid Build Coastguard Worker step2[15] = step1[15];
702*fb1b10abSAndroid Build Coastguard Worker
703*fb1b10abSAndroid Build Coastguard Worker // stage 7
704*fb1b10abSAndroid Build Coastguard Worker output[0] = (tran_low_t)WRAPLOW(step2[0] + step2[15]);
705*fb1b10abSAndroid Build Coastguard Worker output[1] = (tran_low_t)WRAPLOW(step2[1] + step2[14]);
706*fb1b10abSAndroid Build Coastguard Worker output[2] = (tran_low_t)WRAPLOW(step2[2] + step2[13]);
707*fb1b10abSAndroid Build Coastguard Worker output[3] = (tran_low_t)WRAPLOW(step2[3] + step2[12]);
708*fb1b10abSAndroid Build Coastguard Worker output[4] = (tran_low_t)WRAPLOW(step2[4] + step2[11]);
709*fb1b10abSAndroid Build Coastguard Worker output[5] = (tran_low_t)WRAPLOW(step2[5] + step2[10]);
710*fb1b10abSAndroid Build Coastguard Worker output[6] = (tran_low_t)WRAPLOW(step2[6] + step2[9]);
711*fb1b10abSAndroid Build Coastguard Worker output[7] = (tran_low_t)WRAPLOW(step2[7] + step2[8]);
712*fb1b10abSAndroid Build Coastguard Worker output[8] = (tran_low_t)WRAPLOW(step2[7] - step2[8]);
713*fb1b10abSAndroid Build Coastguard Worker output[9] = (tran_low_t)WRAPLOW(step2[6] - step2[9]);
714*fb1b10abSAndroid Build Coastguard Worker output[10] = (tran_low_t)WRAPLOW(step2[5] - step2[10]);
715*fb1b10abSAndroid Build Coastguard Worker output[11] = (tran_low_t)WRAPLOW(step2[4] - step2[11]);
716*fb1b10abSAndroid Build Coastguard Worker output[12] = (tran_low_t)WRAPLOW(step2[3] - step2[12]);
717*fb1b10abSAndroid Build Coastguard Worker output[13] = (tran_low_t)WRAPLOW(step2[2] - step2[13]);
718*fb1b10abSAndroid Build Coastguard Worker output[14] = (tran_low_t)WRAPLOW(step2[1] - step2[14]);
719*fb1b10abSAndroid Build Coastguard Worker output[15] = (tran_low_t)WRAPLOW(step2[0] - step2[15]);
720*fb1b10abSAndroid Build Coastguard Worker }
721*fb1b10abSAndroid Build Coastguard Worker
vpx_idct16x16_256_add_c(const tran_low_t * input,uint8_t * dest,int stride)722*fb1b10abSAndroid Build Coastguard Worker void vpx_idct16x16_256_add_c(const tran_low_t *input, uint8_t *dest,
723*fb1b10abSAndroid Build Coastguard Worker int stride) {
724*fb1b10abSAndroid Build Coastguard Worker int i, j;
725*fb1b10abSAndroid Build Coastguard Worker tran_low_t out[16 * 16];
726*fb1b10abSAndroid Build Coastguard Worker tran_low_t *outptr = out;
727*fb1b10abSAndroid Build Coastguard Worker tran_low_t temp_in[16], temp_out[16];
728*fb1b10abSAndroid Build Coastguard Worker
729*fb1b10abSAndroid Build Coastguard Worker // First transform rows
730*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 16; ++i) {
731*fb1b10abSAndroid Build Coastguard Worker idct16_c(input, outptr);
732*fb1b10abSAndroid Build Coastguard Worker input += 16;
733*fb1b10abSAndroid Build Coastguard Worker outptr += 16;
734*fb1b10abSAndroid Build Coastguard Worker }
735*fb1b10abSAndroid Build Coastguard Worker
736*fb1b10abSAndroid Build Coastguard Worker // Then transform columns
737*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 16; ++i) {
738*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 16; ++j) temp_in[j] = out[j * 16 + i];
739*fb1b10abSAndroid Build Coastguard Worker idct16_c(temp_in, temp_out);
740*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 16; ++j) {
741*fb1b10abSAndroid Build Coastguard Worker dest[j * stride + i] = clip_pixel_add(dest[j * stride + i],
742*fb1b10abSAndroid Build Coastguard Worker ROUND_POWER_OF_TWO(temp_out[j], 6));
743*fb1b10abSAndroid Build Coastguard Worker }
744*fb1b10abSAndroid Build Coastguard Worker }
745*fb1b10abSAndroid Build Coastguard Worker }
746*fb1b10abSAndroid Build Coastguard Worker
vpx_idct16x16_38_add_c(const tran_low_t * input,uint8_t * dest,int stride)747*fb1b10abSAndroid Build Coastguard Worker void vpx_idct16x16_38_add_c(const tran_low_t *input, uint8_t *dest,
748*fb1b10abSAndroid Build Coastguard Worker int stride) {
749*fb1b10abSAndroid Build Coastguard Worker int i, j;
750*fb1b10abSAndroid Build Coastguard Worker tran_low_t out[16 * 16] = { 0 };
751*fb1b10abSAndroid Build Coastguard Worker tran_low_t *outptr = out;
752*fb1b10abSAndroid Build Coastguard Worker tran_low_t temp_in[16], temp_out[16];
753*fb1b10abSAndroid Build Coastguard Worker
754*fb1b10abSAndroid Build Coastguard Worker // First transform rows. Since all non-zero dct coefficients are in
755*fb1b10abSAndroid Build Coastguard Worker // upper-left 8x8 area, we only need to calculate first 8 rows here.
756*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 8; ++i) {
757*fb1b10abSAndroid Build Coastguard Worker idct16_c(input, outptr);
758*fb1b10abSAndroid Build Coastguard Worker input += 16;
759*fb1b10abSAndroid Build Coastguard Worker outptr += 16;
760*fb1b10abSAndroid Build Coastguard Worker }
761*fb1b10abSAndroid Build Coastguard Worker
762*fb1b10abSAndroid Build Coastguard Worker // Then transform columns
763*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 16; ++i) {
764*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 16; ++j) temp_in[j] = out[j * 16 + i];
765*fb1b10abSAndroid Build Coastguard Worker idct16_c(temp_in, temp_out);
766*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 16; ++j) {
767*fb1b10abSAndroid Build Coastguard Worker dest[j * stride + i] = clip_pixel_add(dest[j * stride + i],
768*fb1b10abSAndroid Build Coastguard Worker ROUND_POWER_OF_TWO(temp_out[j], 6));
769*fb1b10abSAndroid Build Coastguard Worker }
770*fb1b10abSAndroid Build Coastguard Worker }
771*fb1b10abSAndroid Build Coastguard Worker }
772*fb1b10abSAndroid Build Coastguard Worker
vpx_idct16x16_10_add_c(const tran_low_t * input,uint8_t * dest,int stride)773*fb1b10abSAndroid Build Coastguard Worker void vpx_idct16x16_10_add_c(const tran_low_t *input, uint8_t *dest,
774*fb1b10abSAndroid Build Coastguard Worker int stride) {
775*fb1b10abSAndroid Build Coastguard Worker int i, j;
776*fb1b10abSAndroid Build Coastguard Worker tran_low_t out[16 * 16] = { 0 };
777*fb1b10abSAndroid Build Coastguard Worker tran_low_t *outptr = out;
778*fb1b10abSAndroid Build Coastguard Worker tran_low_t temp_in[16], temp_out[16];
779*fb1b10abSAndroid Build Coastguard Worker
780*fb1b10abSAndroid Build Coastguard Worker // First transform rows. Since all non-zero dct coefficients are in
781*fb1b10abSAndroid Build Coastguard Worker // upper-left 4x4 area, we only need to calculate first 4 rows here.
782*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 4; ++i) {
783*fb1b10abSAndroid Build Coastguard Worker idct16_c(input, outptr);
784*fb1b10abSAndroid Build Coastguard Worker input += 16;
785*fb1b10abSAndroid Build Coastguard Worker outptr += 16;
786*fb1b10abSAndroid Build Coastguard Worker }
787*fb1b10abSAndroid Build Coastguard Worker
788*fb1b10abSAndroid Build Coastguard Worker // Then transform columns
789*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 16; ++i) {
790*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 16; ++j) temp_in[j] = out[j * 16 + i];
791*fb1b10abSAndroid Build Coastguard Worker idct16_c(temp_in, temp_out);
792*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 16; ++j) {
793*fb1b10abSAndroid Build Coastguard Worker dest[j * stride + i] = clip_pixel_add(dest[j * stride + i],
794*fb1b10abSAndroid Build Coastguard Worker ROUND_POWER_OF_TWO(temp_out[j], 6));
795*fb1b10abSAndroid Build Coastguard Worker }
796*fb1b10abSAndroid Build Coastguard Worker }
797*fb1b10abSAndroid Build Coastguard Worker }
798*fb1b10abSAndroid Build Coastguard Worker
vpx_idct16x16_1_add_c(const tran_low_t * input,uint8_t * dest,int stride)799*fb1b10abSAndroid Build Coastguard Worker void vpx_idct16x16_1_add_c(const tran_low_t *input, uint8_t *dest, int stride) {
800*fb1b10abSAndroid Build Coastguard Worker int i, j;
801*fb1b10abSAndroid Build Coastguard Worker tran_high_t a1;
802*fb1b10abSAndroid Build Coastguard Worker tran_low_t out =
803*fb1b10abSAndroid Build Coastguard Worker WRAPLOW(dct_const_round_shift((int16_t)input[0] * cospi_16_64));
804*fb1b10abSAndroid Build Coastguard Worker
805*fb1b10abSAndroid Build Coastguard Worker out = WRAPLOW(dct_const_round_shift(out * cospi_16_64));
806*fb1b10abSAndroid Build Coastguard Worker a1 = ROUND_POWER_OF_TWO(out, 6);
807*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 16; ++j) {
808*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 16; ++i) dest[i] = clip_pixel_add(dest[i], a1);
809*fb1b10abSAndroid Build Coastguard Worker dest += stride;
810*fb1b10abSAndroid Build Coastguard Worker }
811*fb1b10abSAndroid Build Coastguard Worker }
812*fb1b10abSAndroid Build Coastguard Worker
idct32_c(const tran_low_t * input,tran_low_t * output)813*fb1b10abSAndroid Build Coastguard Worker void idct32_c(const tran_low_t *input, tran_low_t *output) {
814*fb1b10abSAndroid Build Coastguard Worker int16_t step1[32], step2[32];
815*fb1b10abSAndroid Build Coastguard Worker tran_high_t temp1, temp2;
816*fb1b10abSAndroid Build Coastguard Worker
817*fb1b10abSAndroid Build Coastguard Worker // stage 1
818*fb1b10abSAndroid Build Coastguard Worker step1[0] = (int16_t)input[0];
819*fb1b10abSAndroid Build Coastguard Worker step1[1] = (int16_t)input[16];
820*fb1b10abSAndroid Build Coastguard Worker step1[2] = (int16_t)input[8];
821*fb1b10abSAndroid Build Coastguard Worker step1[3] = (int16_t)input[24];
822*fb1b10abSAndroid Build Coastguard Worker step1[4] = (int16_t)input[4];
823*fb1b10abSAndroid Build Coastguard Worker step1[5] = (int16_t)input[20];
824*fb1b10abSAndroid Build Coastguard Worker step1[6] = (int16_t)input[12];
825*fb1b10abSAndroid Build Coastguard Worker step1[7] = (int16_t)input[28];
826*fb1b10abSAndroid Build Coastguard Worker step1[8] = (int16_t)input[2];
827*fb1b10abSAndroid Build Coastguard Worker step1[9] = (int16_t)input[18];
828*fb1b10abSAndroid Build Coastguard Worker step1[10] = (int16_t)input[10];
829*fb1b10abSAndroid Build Coastguard Worker step1[11] = (int16_t)input[26];
830*fb1b10abSAndroid Build Coastguard Worker step1[12] = (int16_t)input[6];
831*fb1b10abSAndroid Build Coastguard Worker step1[13] = (int16_t)input[22];
832*fb1b10abSAndroid Build Coastguard Worker step1[14] = (int16_t)input[14];
833*fb1b10abSAndroid Build Coastguard Worker step1[15] = (int16_t)input[30];
834*fb1b10abSAndroid Build Coastguard Worker
835*fb1b10abSAndroid Build Coastguard Worker temp1 = (int16_t)input[1] * cospi_31_64 - (int16_t)input[31] * cospi_1_64;
836*fb1b10abSAndroid Build Coastguard Worker temp2 = (int16_t)input[1] * cospi_1_64 + (int16_t)input[31] * cospi_31_64;
837*fb1b10abSAndroid Build Coastguard Worker step1[16] = WRAPLOW(dct_const_round_shift(temp1));
838*fb1b10abSAndroid Build Coastguard Worker step1[31] = WRAPLOW(dct_const_round_shift(temp2));
839*fb1b10abSAndroid Build Coastguard Worker
840*fb1b10abSAndroid Build Coastguard Worker temp1 = (int16_t)input[17] * cospi_15_64 - (int16_t)input[15] * cospi_17_64;
841*fb1b10abSAndroid Build Coastguard Worker temp2 = (int16_t)input[17] * cospi_17_64 + (int16_t)input[15] * cospi_15_64;
842*fb1b10abSAndroid Build Coastguard Worker step1[17] = WRAPLOW(dct_const_round_shift(temp1));
843*fb1b10abSAndroid Build Coastguard Worker step1[30] = WRAPLOW(dct_const_round_shift(temp2));
844*fb1b10abSAndroid Build Coastguard Worker
845*fb1b10abSAndroid Build Coastguard Worker temp1 = (int16_t)input[9] * cospi_23_64 - (int16_t)input[23] * cospi_9_64;
846*fb1b10abSAndroid Build Coastguard Worker temp2 = (int16_t)input[9] * cospi_9_64 + (int16_t)input[23] * cospi_23_64;
847*fb1b10abSAndroid Build Coastguard Worker step1[18] = WRAPLOW(dct_const_round_shift(temp1));
848*fb1b10abSAndroid Build Coastguard Worker step1[29] = WRAPLOW(dct_const_round_shift(temp2));
849*fb1b10abSAndroid Build Coastguard Worker
850*fb1b10abSAndroid Build Coastguard Worker temp1 = (int16_t)input[25] * cospi_7_64 - (int16_t)input[7] * cospi_25_64;
851*fb1b10abSAndroid Build Coastguard Worker temp2 = (int16_t)input[25] * cospi_25_64 + (int16_t)input[7] * cospi_7_64;
852*fb1b10abSAndroid Build Coastguard Worker step1[19] = WRAPLOW(dct_const_round_shift(temp1));
853*fb1b10abSAndroid Build Coastguard Worker step1[28] = WRAPLOW(dct_const_round_shift(temp2));
854*fb1b10abSAndroid Build Coastguard Worker
855*fb1b10abSAndroid Build Coastguard Worker temp1 = (int16_t)input[5] * cospi_27_64 - (int16_t)input[27] * cospi_5_64;
856*fb1b10abSAndroid Build Coastguard Worker temp2 = (int16_t)input[5] * cospi_5_64 + (int16_t)input[27] * cospi_27_64;
857*fb1b10abSAndroid Build Coastguard Worker step1[20] = WRAPLOW(dct_const_round_shift(temp1));
858*fb1b10abSAndroid Build Coastguard Worker step1[27] = WRAPLOW(dct_const_round_shift(temp2));
859*fb1b10abSAndroid Build Coastguard Worker
860*fb1b10abSAndroid Build Coastguard Worker temp1 = (int16_t)input[21] * cospi_11_64 - (int16_t)input[11] * cospi_21_64;
861*fb1b10abSAndroid Build Coastguard Worker temp2 = (int16_t)input[21] * cospi_21_64 + (int16_t)input[11] * cospi_11_64;
862*fb1b10abSAndroid Build Coastguard Worker step1[21] = WRAPLOW(dct_const_round_shift(temp1));
863*fb1b10abSAndroid Build Coastguard Worker step1[26] = WRAPLOW(dct_const_round_shift(temp2));
864*fb1b10abSAndroid Build Coastguard Worker
865*fb1b10abSAndroid Build Coastguard Worker temp1 = (int16_t)input[13] * cospi_19_64 - (int16_t)input[19] * cospi_13_64;
866*fb1b10abSAndroid Build Coastguard Worker temp2 = (int16_t)input[13] * cospi_13_64 + (int16_t)input[19] * cospi_19_64;
867*fb1b10abSAndroid Build Coastguard Worker step1[22] = WRAPLOW(dct_const_round_shift(temp1));
868*fb1b10abSAndroid Build Coastguard Worker step1[25] = WRAPLOW(dct_const_round_shift(temp2));
869*fb1b10abSAndroid Build Coastguard Worker
870*fb1b10abSAndroid Build Coastguard Worker temp1 = (int16_t)input[29] * cospi_3_64 - (int16_t)input[3] * cospi_29_64;
871*fb1b10abSAndroid Build Coastguard Worker temp2 = (int16_t)input[29] * cospi_29_64 + (int16_t)input[3] * cospi_3_64;
872*fb1b10abSAndroid Build Coastguard Worker step1[23] = WRAPLOW(dct_const_round_shift(temp1));
873*fb1b10abSAndroid Build Coastguard Worker step1[24] = WRAPLOW(dct_const_round_shift(temp2));
874*fb1b10abSAndroid Build Coastguard Worker
875*fb1b10abSAndroid Build Coastguard Worker // stage 2
876*fb1b10abSAndroid Build Coastguard Worker step2[0] = step1[0];
877*fb1b10abSAndroid Build Coastguard Worker step2[1] = step1[1];
878*fb1b10abSAndroid Build Coastguard Worker step2[2] = step1[2];
879*fb1b10abSAndroid Build Coastguard Worker step2[3] = step1[3];
880*fb1b10abSAndroid Build Coastguard Worker step2[4] = step1[4];
881*fb1b10abSAndroid Build Coastguard Worker step2[5] = step1[5];
882*fb1b10abSAndroid Build Coastguard Worker step2[6] = step1[6];
883*fb1b10abSAndroid Build Coastguard Worker step2[7] = step1[7];
884*fb1b10abSAndroid Build Coastguard Worker
885*fb1b10abSAndroid Build Coastguard Worker temp1 = step1[8] * cospi_30_64 - step1[15] * cospi_2_64;
886*fb1b10abSAndroid Build Coastguard Worker temp2 = step1[8] * cospi_2_64 + step1[15] * cospi_30_64;
887*fb1b10abSAndroid Build Coastguard Worker step2[8] = WRAPLOW(dct_const_round_shift(temp1));
888*fb1b10abSAndroid Build Coastguard Worker step2[15] = WRAPLOW(dct_const_round_shift(temp2));
889*fb1b10abSAndroid Build Coastguard Worker
890*fb1b10abSAndroid Build Coastguard Worker temp1 = step1[9] * cospi_14_64 - step1[14] * cospi_18_64;
891*fb1b10abSAndroid Build Coastguard Worker temp2 = step1[9] * cospi_18_64 + step1[14] * cospi_14_64;
892*fb1b10abSAndroid Build Coastguard Worker step2[9] = WRAPLOW(dct_const_round_shift(temp1));
893*fb1b10abSAndroid Build Coastguard Worker step2[14] = WRAPLOW(dct_const_round_shift(temp2));
894*fb1b10abSAndroid Build Coastguard Worker
895*fb1b10abSAndroid Build Coastguard Worker temp1 = step1[10] * cospi_22_64 - step1[13] * cospi_10_64;
896*fb1b10abSAndroid Build Coastguard Worker temp2 = step1[10] * cospi_10_64 + step1[13] * cospi_22_64;
897*fb1b10abSAndroid Build Coastguard Worker step2[10] = WRAPLOW(dct_const_round_shift(temp1));
898*fb1b10abSAndroid Build Coastguard Worker step2[13] = WRAPLOW(dct_const_round_shift(temp2));
899*fb1b10abSAndroid Build Coastguard Worker
900*fb1b10abSAndroid Build Coastguard Worker temp1 = step1[11] * cospi_6_64 - step1[12] * cospi_26_64;
901*fb1b10abSAndroid Build Coastguard Worker temp2 = step1[11] * cospi_26_64 + step1[12] * cospi_6_64;
902*fb1b10abSAndroid Build Coastguard Worker step2[11] = WRAPLOW(dct_const_round_shift(temp1));
903*fb1b10abSAndroid Build Coastguard Worker step2[12] = WRAPLOW(dct_const_round_shift(temp2));
904*fb1b10abSAndroid Build Coastguard Worker
905*fb1b10abSAndroid Build Coastguard Worker step2[16] = WRAPLOW(step1[16] + step1[17]);
906*fb1b10abSAndroid Build Coastguard Worker step2[17] = WRAPLOW(step1[16] - step1[17]);
907*fb1b10abSAndroid Build Coastguard Worker step2[18] = WRAPLOW(-step1[18] + step1[19]);
908*fb1b10abSAndroid Build Coastguard Worker step2[19] = WRAPLOW(step1[18] + step1[19]);
909*fb1b10abSAndroid Build Coastguard Worker step2[20] = WRAPLOW(step1[20] + step1[21]);
910*fb1b10abSAndroid Build Coastguard Worker step2[21] = WRAPLOW(step1[20] - step1[21]);
911*fb1b10abSAndroid Build Coastguard Worker step2[22] = WRAPLOW(-step1[22] + step1[23]);
912*fb1b10abSAndroid Build Coastguard Worker step2[23] = WRAPLOW(step1[22] + step1[23]);
913*fb1b10abSAndroid Build Coastguard Worker step2[24] = WRAPLOW(step1[24] + step1[25]);
914*fb1b10abSAndroid Build Coastguard Worker step2[25] = WRAPLOW(step1[24] - step1[25]);
915*fb1b10abSAndroid Build Coastguard Worker step2[26] = WRAPLOW(-step1[26] + step1[27]);
916*fb1b10abSAndroid Build Coastguard Worker step2[27] = WRAPLOW(step1[26] + step1[27]);
917*fb1b10abSAndroid Build Coastguard Worker step2[28] = WRAPLOW(step1[28] + step1[29]);
918*fb1b10abSAndroid Build Coastguard Worker step2[29] = WRAPLOW(step1[28] - step1[29]);
919*fb1b10abSAndroid Build Coastguard Worker step2[30] = WRAPLOW(-step1[30] + step1[31]);
920*fb1b10abSAndroid Build Coastguard Worker step2[31] = WRAPLOW(step1[30] + step1[31]);
921*fb1b10abSAndroid Build Coastguard Worker
922*fb1b10abSAndroid Build Coastguard Worker // stage 3
923*fb1b10abSAndroid Build Coastguard Worker step1[0] = step2[0];
924*fb1b10abSAndroid Build Coastguard Worker step1[1] = step2[1];
925*fb1b10abSAndroid Build Coastguard Worker step1[2] = step2[2];
926*fb1b10abSAndroid Build Coastguard Worker step1[3] = step2[3];
927*fb1b10abSAndroid Build Coastguard Worker
928*fb1b10abSAndroid Build Coastguard Worker temp1 = step2[4] * cospi_28_64 - step2[7] * cospi_4_64;
929*fb1b10abSAndroid Build Coastguard Worker temp2 = step2[4] * cospi_4_64 + step2[7] * cospi_28_64;
930*fb1b10abSAndroid Build Coastguard Worker step1[4] = WRAPLOW(dct_const_round_shift(temp1));
931*fb1b10abSAndroid Build Coastguard Worker step1[7] = WRAPLOW(dct_const_round_shift(temp2));
932*fb1b10abSAndroid Build Coastguard Worker temp1 = step2[5] * cospi_12_64 - step2[6] * cospi_20_64;
933*fb1b10abSAndroid Build Coastguard Worker temp2 = step2[5] * cospi_20_64 + step2[6] * cospi_12_64;
934*fb1b10abSAndroid Build Coastguard Worker step1[5] = WRAPLOW(dct_const_round_shift(temp1));
935*fb1b10abSAndroid Build Coastguard Worker step1[6] = WRAPLOW(dct_const_round_shift(temp2));
936*fb1b10abSAndroid Build Coastguard Worker
937*fb1b10abSAndroid Build Coastguard Worker step1[8] = WRAPLOW(step2[8] + step2[9]);
938*fb1b10abSAndroid Build Coastguard Worker step1[9] = WRAPLOW(step2[8] - step2[9]);
939*fb1b10abSAndroid Build Coastguard Worker step1[10] = WRAPLOW(-step2[10] + step2[11]);
940*fb1b10abSAndroid Build Coastguard Worker step1[11] = WRAPLOW(step2[10] + step2[11]);
941*fb1b10abSAndroid Build Coastguard Worker step1[12] = WRAPLOW(step2[12] + step2[13]);
942*fb1b10abSAndroid Build Coastguard Worker step1[13] = WRAPLOW(step2[12] - step2[13]);
943*fb1b10abSAndroid Build Coastguard Worker step1[14] = WRAPLOW(-step2[14] + step2[15]);
944*fb1b10abSAndroid Build Coastguard Worker step1[15] = WRAPLOW(step2[14] + step2[15]);
945*fb1b10abSAndroid Build Coastguard Worker
946*fb1b10abSAndroid Build Coastguard Worker step1[16] = step2[16];
947*fb1b10abSAndroid Build Coastguard Worker step1[31] = step2[31];
948*fb1b10abSAndroid Build Coastguard Worker temp1 = -step2[17] * cospi_4_64 + step2[30] * cospi_28_64;
949*fb1b10abSAndroid Build Coastguard Worker temp2 = step2[17] * cospi_28_64 + step2[30] * cospi_4_64;
950*fb1b10abSAndroid Build Coastguard Worker step1[17] = WRAPLOW(dct_const_round_shift(temp1));
951*fb1b10abSAndroid Build Coastguard Worker step1[30] = WRAPLOW(dct_const_round_shift(temp2));
952*fb1b10abSAndroid Build Coastguard Worker temp1 = -step2[18] * cospi_28_64 - step2[29] * cospi_4_64;
953*fb1b10abSAndroid Build Coastguard Worker temp2 = -step2[18] * cospi_4_64 + step2[29] * cospi_28_64;
954*fb1b10abSAndroid Build Coastguard Worker step1[18] = WRAPLOW(dct_const_round_shift(temp1));
955*fb1b10abSAndroid Build Coastguard Worker step1[29] = WRAPLOW(dct_const_round_shift(temp2));
956*fb1b10abSAndroid Build Coastguard Worker step1[19] = step2[19];
957*fb1b10abSAndroid Build Coastguard Worker step1[20] = step2[20];
958*fb1b10abSAndroid Build Coastguard Worker temp1 = -step2[21] * cospi_20_64 + step2[26] * cospi_12_64;
959*fb1b10abSAndroid Build Coastguard Worker temp2 = step2[21] * cospi_12_64 + step2[26] * cospi_20_64;
960*fb1b10abSAndroid Build Coastguard Worker step1[21] = WRAPLOW(dct_const_round_shift(temp1));
961*fb1b10abSAndroid Build Coastguard Worker step1[26] = WRAPLOW(dct_const_round_shift(temp2));
962*fb1b10abSAndroid Build Coastguard Worker temp1 = -step2[22] * cospi_12_64 - step2[25] * cospi_20_64;
963*fb1b10abSAndroid Build Coastguard Worker temp2 = -step2[22] * cospi_20_64 + step2[25] * cospi_12_64;
964*fb1b10abSAndroid Build Coastguard Worker step1[22] = WRAPLOW(dct_const_round_shift(temp1));
965*fb1b10abSAndroid Build Coastguard Worker step1[25] = WRAPLOW(dct_const_round_shift(temp2));
966*fb1b10abSAndroid Build Coastguard Worker step1[23] = step2[23];
967*fb1b10abSAndroid Build Coastguard Worker step1[24] = step2[24];
968*fb1b10abSAndroid Build Coastguard Worker step1[27] = step2[27];
969*fb1b10abSAndroid Build Coastguard Worker step1[28] = step2[28];
970*fb1b10abSAndroid Build Coastguard Worker
971*fb1b10abSAndroid Build Coastguard Worker // stage 4
972*fb1b10abSAndroid Build Coastguard Worker temp1 = (step1[0] + step1[1]) * cospi_16_64;
973*fb1b10abSAndroid Build Coastguard Worker temp2 = (step1[0] - step1[1]) * cospi_16_64;
974*fb1b10abSAndroid Build Coastguard Worker step2[0] = WRAPLOW(dct_const_round_shift(temp1));
975*fb1b10abSAndroid Build Coastguard Worker step2[1] = WRAPLOW(dct_const_round_shift(temp2));
976*fb1b10abSAndroid Build Coastguard Worker temp1 = step1[2] * cospi_24_64 - step1[3] * cospi_8_64;
977*fb1b10abSAndroid Build Coastguard Worker temp2 = step1[2] * cospi_8_64 + step1[3] * cospi_24_64;
978*fb1b10abSAndroid Build Coastguard Worker step2[2] = WRAPLOW(dct_const_round_shift(temp1));
979*fb1b10abSAndroid Build Coastguard Worker step2[3] = WRAPLOW(dct_const_round_shift(temp2));
980*fb1b10abSAndroid Build Coastguard Worker step2[4] = WRAPLOW(step1[4] + step1[5]);
981*fb1b10abSAndroid Build Coastguard Worker step2[5] = WRAPLOW(step1[4] - step1[5]);
982*fb1b10abSAndroid Build Coastguard Worker step2[6] = WRAPLOW(-step1[6] + step1[7]);
983*fb1b10abSAndroid Build Coastguard Worker step2[7] = WRAPLOW(step1[6] + step1[7]);
984*fb1b10abSAndroid Build Coastguard Worker
985*fb1b10abSAndroid Build Coastguard Worker step2[8] = step1[8];
986*fb1b10abSAndroid Build Coastguard Worker step2[15] = step1[15];
987*fb1b10abSAndroid Build Coastguard Worker temp1 = -step1[9] * cospi_8_64 + step1[14] * cospi_24_64;
988*fb1b10abSAndroid Build Coastguard Worker temp2 = step1[9] * cospi_24_64 + step1[14] * cospi_8_64;
989*fb1b10abSAndroid Build Coastguard Worker step2[9] = WRAPLOW(dct_const_round_shift(temp1));
990*fb1b10abSAndroid Build Coastguard Worker step2[14] = WRAPLOW(dct_const_round_shift(temp2));
991*fb1b10abSAndroid Build Coastguard Worker temp1 = -step1[10] * cospi_24_64 - step1[13] * cospi_8_64;
992*fb1b10abSAndroid Build Coastguard Worker temp2 = -step1[10] * cospi_8_64 + step1[13] * cospi_24_64;
993*fb1b10abSAndroid Build Coastguard Worker step2[10] = WRAPLOW(dct_const_round_shift(temp1));
994*fb1b10abSAndroid Build Coastguard Worker step2[13] = WRAPLOW(dct_const_round_shift(temp2));
995*fb1b10abSAndroid Build Coastguard Worker step2[11] = step1[11];
996*fb1b10abSAndroid Build Coastguard Worker step2[12] = step1[12];
997*fb1b10abSAndroid Build Coastguard Worker
998*fb1b10abSAndroid Build Coastguard Worker step2[16] = WRAPLOW(step1[16] + step1[19]);
999*fb1b10abSAndroid Build Coastguard Worker step2[17] = WRAPLOW(step1[17] + step1[18]);
1000*fb1b10abSAndroid Build Coastguard Worker step2[18] = WRAPLOW(step1[17] - step1[18]);
1001*fb1b10abSAndroid Build Coastguard Worker step2[19] = WRAPLOW(step1[16] - step1[19]);
1002*fb1b10abSAndroid Build Coastguard Worker step2[20] = WRAPLOW(-step1[20] + step1[23]);
1003*fb1b10abSAndroid Build Coastguard Worker step2[21] = WRAPLOW(-step1[21] + step1[22]);
1004*fb1b10abSAndroid Build Coastguard Worker step2[22] = WRAPLOW(step1[21] + step1[22]);
1005*fb1b10abSAndroid Build Coastguard Worker step2[23] = WRAPLOW(step1[20] + step1[23]);
1006*fb1b10abSAndroid Build Coastguard Worker
1007*fb1b10abSAndroid Build Coastguard Worker step2[24] = WRAPLOW(step1[24] + step1[27]);
1008*fb1b10abSAndroid Build Coastguard Worker step2[25] = WRAPLOW(step1[25] + step1[26]);
1009*fb1b10abSAndroid Build Coastguard Worker step2[26] = WRAPLOW(step1[25] - step1[26]);
1010*fb1b10abSAndroid Build Coastguard Worker step2[27] = WRAPLOW(step1[24] - step1[27]);
1011*fb1b10abSAndroid Build Coastguard Worker step2[28] = WRAPLOW(-step1[28] + step1[31]);
1012*fb1b10abSAndroid Build Coastguard Worker step2[29] = WRAPLOW(-step1[29] + step1[30]);
1013*fb1b10abSAndroid Build Coastguard Worker step2[30] = WRAPLOW(step1[29] + step1[30]);
1014*fb1b10abSAndroid Build Coastguard Worker step2[31] = WRAPLOW(step1[28] + step1[31]);
1015*fb1b10abSAndroid Build Coastguard Worker
1016*fb1b10abSAndroid Build Coastguard Worker // stage 5
1017*fb1b10abSAndroid Build Coastguard Worker step1[0] = WRAPLOW(step2[0] + step2[3]);
1018*fb1b10abSAndroid Build Coastguard Worker step1[1] = WRAPLOW(step2[1] + step2[2]);
1019*fb1b10abSAndroid Build Coastguard Worker step1[2] = WRAPLOW(step2[1] - step2[2]);
1020*fb1b10abSAndroid Build Coastguard Worker step1[3] = WRAPLOW(step2[0] - step2[3]);
1021*fb1b10abSAndroid Build Coastguard Worker step1[4] = step2[4];
1022*fb1b10abSAndroid Build Coastguard Worker temp1 = (step2[6] - step2[5]) * cospi_16_64;
1023*fb1b10abSAndroid Build Coastguard Worker temp2 = (step2[5] + step2[6]) * cospi_16_64;
1024*fb1b10abSAndroid Build Coastguard Worker step1[5] = WRAPLOW(dct_const_round_shift(temp1));
1025*fb1b10abSAndroid Build Coastguard Worker step1[6] = WRAPLOW(dct_const_round_shift(temp2));
1026*fb1b10abSAndroid Build Coastguard Worker step1[7] = step2[7];
1027*fb1b10abSAndroid Build Coastguard Worker
1028*fb1b10abSAndroid Build Coastguard Worker step1[8] = WRAPLOW(step2[8] + step2[11]);
1029*fb1b10abSAndroid Build Coastguard Worker step1[9] = WRAPLOW(step2[9] + step2[10]);
1030*fb1b10abSAndroid Build Coastguard Worker step1[10] = WRAPLOW(step2[9] - step2[10]);
1031*fb1b10abSAndroid Build Coastguard Worker step1[11] = WRAPLOW(step2[8] - step2[11]);
1032*fb1b10abSAndroid Build Coastguard Worker step1[12] = WRAPLOW(-step2[12] + step2[15]);
1033*fb1b10abSAndroid Build Coastguard Worker step1[13] = WRAPLOW(-step2[13] + step2[14]);
1034*fb1b10abSAndroid Build Coastguard Worker step1[14] = WRAPLOW(step2[13] + step2[14]);
1035*fb1b10abSAndroid Build Coastguard Worker step1[15] = WRAPLOW(step2[12] + step2[15]);
1036*fb1b10abSAndroid Build Coastguard Worker
1037*fb1b10abSAndroid Build Coastguard Worker step1[16] = step2[16];
1038*fb1b10abSAndroid Build Coastguard Worker step1[17] = step2[17];
1039*fb1b10abSAndroid Build Coastguard Worker temp1 = -step2[18] * cospi_8_64 + step2[29] * cospi_24_64;
1040*fb1b10abSAndroid Build Coastguard Worker temp2 = step2[18] * cospi_24_64 + step2[29] * cospi_8_64;
1041*fb1b10abSAndroid Build Coastguard Worker step1[18] = WRAPLOW(dct_const_round_shift(temp1));
1042*fb1b10abSAndroid Build Coastguard Worker step1[29] = WRAPLOW(dct_const_round_shift(temp2));
1043*fb1b10abSAndroid Build Coastguard Worker temp1 = -step2[19] * cospi_8_64 + step2[28] * cospi_24_64;
1044*fb1b10abSAndroid Build Coastguard Worker temp2 = step2[19] * cospi_24_64 + step2[28] * cospi_8_64;
1045*fb1b10abSAndroid Build Coastguard Worker step1[19] = WRAPLOW(dct_const_round_shift(temp1));
1046*fb1b10abSAndroid Build Coastguard Worker step1[28] = WRAPLOW(dct_const_round_shift(temp2));
1047*fb1b10abSAndroid Build Coastguard Worker temp1 = -step2[20] * cospi_24_64 - step2[27] * cospi_8_64;
1048*fb1b10abSAndroid Build Coastguard Worker temp2 = -step2[20] * cospi_8_64 + step2[27] * cospi_24_64;
1049*fb1b10abSAndroid Build Coastguard Worker step1[20] = WRAPLOW(dct_const_round_shift(temp1));
1050*fb1b10abSAndroid Build Coastguard Worker step1[27] = WRAPLOW(dct_const_round_shift(temp2));
1051*fb1b10abSAndroid Build Coastguard Worker temp1 = -step2[21] * cospi_24_64 - step2[26] * cospi_8_64;
1052*fb1b10abSAndroid Build Coastguard Worker temp2 = -step2[21] * cospi_8_64 + step2[26] * cospi_24_64;
1053*fb1b10abSAndroid Build Coastguard Worker step1[21] = WRAPLOW(dct_const_round_shift(temp1));
1054*fb1b10abSAndroid Build Coastguard Worker step1[26] = WRAPLOW(dct_const_round_shift(temp2));
1055*fb1b10abSAndroid Build Coastguard Worker step1[22] = step2[22];
1056*fb1b10abSAndroid Build Coastguard Worker step1[23] = step2[23];
1057*fb1b10abSAndroid Build Coastguard Worker step1[24] = step2[24];
1058*fb1b10abSAndroid Build Coastguard Worker step1[25] = step2[25];
1059*fb1b10abSAndroid Build Coastguard Worker step1[30] = step2[30];
1060*fb1b10abSAndroid Build Coastguard Worker step1[31] = step2[31];
1061*fb1b10abSAndroid Build Coastguard Worker
1062*fb1b10abSAndroid Build Coastguard Worker // stage 6
1063*fb1b10abSAndroid Build Coastguard Worker step2[0] = WRAPLOW(step1[0] + step1[7]);
1064*fb1b10abSAndroid Build Coastguard Worker step2[1] = WRAPLOW(step1[1] + step1[6]);
1065*fb1b10abSAndroid Build Coastguard Worker step2[2] = WRAPLOW(step1[2] + step1[5]);
1066*fb1b10abSAndroid Build Coastguard Worker step2[3] = WRAPLOW(step1[3] + step1[4]);
1067*fb1b10abSAndroid Build Coastguard Worker step2[4] = WRAPLOW(step1[3] - step1[4]);
1068*fb1b10abSAndroid Build Coastguard Worker step2[5] = WRAPLOW(step1[2] - step1[5]);
1069*fb1b10abSAndroid Build Coastguard Worker step2[6] = WRAPLOW(step1[1] - step1[6]);
1070*fb1b10abSAndroid Build Coastguard Worker step2[7] = WRAPLOW(step1[0] - step1[7]);
1071*fb1b10abSAndroid Build Coastguard Worker step2[8] = step1[8];
1072*fb1b10abSAndroid Build Coastguard Worker step2[9] = step1[9];
1073*fb1b10abSAndroid Build Coastguard Worker temp1 = (-step1[10] + step1[13]) * cospi_16_64;
1074*fb1b10abSAndroid Build Coastguard Worker temp2 = (step1[10] + step1[13]) * cospi_16_64;
1075*fb1b10abSAndroid Build Coastguard Worker step2[10] = WRAPLOW(dct_const_round_shift(temp1));
1076*fb1b10abSAndroid Build Coastguard Worker step2[13] = WRAPLOW(dct_const_round_shift(temp2));
1077*fb1b10abSAndroid Build Coastguard Worker temp1 = (-step1[11] + step1[12]) * cospi_16_64;
1078*fb1b10abSAndroid Build Coastguard Worker temp2 = (step1[11] + step1[12]) * cospi_16_64;
1079*fb1b10abSAndroid Build Coastguard Worker step2[11] = WRAPLOW(dct_const_round_shift(temp1));
1080*fb1b10abSAndroid Build Coastguard Worker step2[12] = WRAPLOW(dct_const_round_shift(temp2));
1081*fb1b10abSAndroid Build Coastguard Worker step2[14] = step1[14];
1082*fb1b10abSAndroid Build Coastguard Worker step2[15] = step1[15];
1083*fb1b10abSAndroid Build Coastguard Worker
1084*fb1b10abSAndroid Build Coastguard Worker step2[16] = WRAPLOW(step1[16] + step1[23]);
1085*fb1b10abSAndroid Build Coastguard Worker step2[17] = WRAPLOW(step1[17] + step1[22]);
1086*fb1b10abSAndroid Build Coastguard Worker step2[18] = WRAPLOW(step1[18] + step1[21]);
1087*fb1b10abSAndroid Build Coastguard Worker step2[19] = WRAPLOW(step1[19] + step1[20]);
1088*fb1b10abSAndroid Build Coastguard Worker step2[20] = WRAPLOW(step1[19] - step1[20]);
1089*fb1b10abSAndroid Build Coastguard Worker step2[21] = WRAPLOW(step1[18] - step1[21]);
1090*fb1b10abSAndroid Build Coastguard Worker step2[22] = WRAPLOW(step1[17] - step1[22]);
1091*fb1b10abSAndroid Build Coastguard Worker step2[23] = WRAPLOW(step1[16] - step1[23]);
1092*fb1b10abSAndroid Build Coastguard Worker
1093*fb1b10abSAndroid Build Coastguard Worker step2[24] = WRAPLOW(-step1[24] + step1[31]);
1094*fb1b10abSAndroid Build Coastguard Worker step2[25] = WRAPLOW(-step1[25] + step1[30]);
1095*fb1b10abSAndroid Build Coastguard Worker step2[26] = WRAPLOW(-step1[26] + step1[29]);
1096*fb1b10abSAndroid Build Coastguard Worker step2[27] = WRAPLOW(-step1[27] + step1[28]);
1097*fb1b10abSAndroid Build Coastguard Worker step2[28] = WRAPLOW(step1[27] + step1[28]);
1098*fb1b10abSAndroid Build Coastguard Worker step2[29] = WRAPLOW(step1[26] + step1[29]);
1099*fb1b10abSAndroid Build Coastguard Worker step2[30] = WRAPLOW(step1[25] + step1[30]);
1100*fb1b10abSAndroid Build Coastguard Worker step2[31] = WRAPLOW(step1[24] + step1[31]);
1101*fb1b10abSAndroid Build Coastguard Worker
1102*fb1b10abSAndroid Build Coastguard Worker // stage 7
1103*fb1b10abSAndroid Build Coastguard Worker step1[0] = WRAPLOW(step2[0] + step2[15]);
1104*fb1b10abSAndroid Build Coastguard Worker step1[1] = WRAPLOW(step2[1] + step2[14]);
1105*fb1b10abSAndroid Build Coastguard Worker step1[2] = WRAPLOW(step2[2] + step2[13]);
1106*fb1b10abSAndroid Build Coastguard Worker step1[3] = WRAPLOW(step2[3] + step2[12]);
1107*fb1b10abSAndroid Build Coastguard Worker step1[4] = WRAPLOW(step2[4] + step2[11]);
1108*fb1b10abSAndroid Build Coastguard Worker step1[5] = WRAPLOW(step2[5] + step2[10]);
1109*fb1b10abSAndroid Build Coastguard Worker step1[6] = WRAPLOW(step2[6] + step2[9]);
1110*fb1b10abSAndroid Build Coastguard Worker step1[7] = WRAPLOW(step2[7] + step2[8]);
1111*fb1b10abSAndroid Build Coastguard Worker step1[8] = WRAPLOW(step2[7] - step2[8]);
1112*fb1b10abSAndroid Build Coastguard Worker step1[9] = WRAPLOW(step2[6] - step2[9]);
1113*fb1b10abSAndroid Build Coastguard Worker step1[10] = WRAPLOW(step2[5] - step2[10]);
1114*fb1b10abSAndroid Build Coastguard Worker step1[11] = WRAPLOW(step2[4] - step2[11]);
1115*fb1b10abSAndroid Build Coastguard Worker step1[12] = WRAPLOW(step2[3] - step2[12]);
1116*fb1b10abSAndroid Build Coastguard Worker step1[13] = WRAPLOW(step2[2] - step2[13]);
1117*fb1b10abSAndroid Build Coastguard Worker step1[14] = WRAPLOW(step2[1] - step2[14]);
1118*fb1b10abSAndroid Build Coastguard Worker step1[15] = WRAPLOW(step2[0] - step2[15]);
1119*fb1b10abSAndroid Build Coastguard Worker
1120*fb1b10abSAndroid Build Coastguard Worker step1[16] = step2[16];
1121*fb1b10abSAndroid Build Coastguard Worker step1[17] = step2[17];
1122*fb1b10abSAndroid Build Coastguard Worker step1[18] = step2[18];
1123*fb1b10abSAndroid Build Coastguard Worker step1[19] = step2[19];
1124*fb1b10abSAndroid Build Coastguard Worker temp1 = (-step2[20] + step2[27]) * cospi_16_64;
1125*fb1b10abSAndroid Build Coastguard Worker temp2 = (step2[20] + step2[27]) * cospi_16_64;
1126*fb1b10abSAndroid Build Coastguard Worker step1[20] = WRAPLOW(dct_const_round_shift(temp1));
1127*fb1b10abSAndroid Build Coastguard Worker step1[27] = WRAPLOW(dct_const_round_shift(temp2));
1128*fb1b10abSAndroid Build Coastguard Worker temp1 = (-step2[21] + step2[26]) * cospi_16_64;
1129*fb1b10abSAndroid Build Coastguard Worker temp2 = (step2[21] + step2[26]) * cospi_16_64;
1130*fb1b10abSAndroid Build Coastguard Worker step1[21] = WRAPLOW(dct_const_round_shift(temp1));
1131*fb1b10abSAndroid Build Coastguard Worker step1[26] = WRAPLOW(dct_const_round_shift(temp2));
1132*fb1b10abSAndroid Build Coastguard Worker temp1 = (-step2[22] + step2[25]) * cospi_16_64;
1133*fb1b10abSAndroid Build Coastguard Worker temp2 = (step2[22] + step2[25]) * cospi_16_64;
1134*fb1b10abSAndroid Build Coastguard Worker step1[22] = WRAPLOW(dct_const_round_shift(temp1));
1135*fb1b10abSAndroid Build Coastguard Worker step1[25] = WRAPLOW(dct_const_round_shift(temp2));
1136*fb1b10abSAndroid Build Coastguard Worker temp1 = (-step2[23] + step2[24]) * cospi_16_64;
1137*fb1b10abSAndroid Build Coastguard Worker temp2 = (step2[23] + step2[24]) * cospi_16_64;
1138*fb1b10abSAndroid Build Coastguard Worker step1[23] = WRAPLOW(dct_const_round_shift(temp1));
1139*fb1b10abSAndroid Build Coastguard Worker step1[24] = WRAPLOW(dct_const_round_shift(temp2));
1140*fb1b10abSAndroid Build Coastguard Worker step1[28] = step2[28];
1141*fb1b10abSAndroid Build Coastguard Worker step1[29] = step2[29];
1142*fb1b10abSAndroid Build Coastguard Worker step1[30] = step2[30];
1143*fb1b10abSAndroid Build Coastguard Worker step1[31] = step2[31];
1144*fb1b10abSAndroid Build Coastguard Worker
1145*fb1b10abSAndroid Build Coastguard Worker // final stage
1146*fb1b10abSAndroid Build Coastguard Worker output[0] = WRAPLOW(step1[0] + step1[31]);
1147*fb1b10abSAndroid Build Coastguard Worker output[1] = WRAPLOW(step1[1] + step1[30]);
1148*fb1b10abSAndroid Build Coastguard Worker output[2] = WRAPLOW(step1[2] + step1[29]);
1149*fb1b10abSAndroid Build Coastguard Worker output[3] = WRAPLOW(step1[3] + step1[28]);
1150*fb1b10abSAndroid Build Coastguard Worker output[4] = WRAPLOW(step1[4] + step1[27]);
1151*fb1b10abSAndroid Build Coastguard Worker output[5] = WRAPLOW(step1[5] + step1[26]);
1152*fb1b10abSAndroid Build Coastguard Worker output[6] = WRAPLOW(step1[6] + step1[25]);
1153*fb1b10abSAndroid Build Coastguard Worker output[7] = WRAPLOW(step1[7] + step1[24]);
1154*fb1b10abSAndroid Build Coastguard Worker output[8] = WRAPLOW(step1[8] + step1[23]);
1155*fb1b10abSAndroid Build Coastguard Worker output[9] = WRAPLOW(step1[9] + step1[22]);
1156*fb1b10abSAndroid Build Coastguard Worker output[10] = WRAPLOW(step1[10] + step1[21]);
1157*fb1b10abSAndroid Build Coastguard Worker output[11] = WRAPLOW(step1[11] + step1[20]);
1158*fb1b10abSAndroid Build Coastguard Worker output[12] = WRAPLOW(step1[12] + step1[19]);
1159*fb1b10abSAndroid Build Coastguard Worker output[13] = WRAPLOW(step1[13] + step1[18]);
1160*fb1b10abSAndroid Build Coastguard Worker output[14] = WRAPLOW(step1[14] + step1[17]);
1161*fb1b10abSAndroid Build Coastguard Worker output[15] = WRAPLOW(step1[15] + step1[16]);
1162*fb1b10abSAndroid Build Coastguard Worker output[16] = WRAPLOW(step1[15] - step1[16]);
1163*fb1b10abSAndroid Build Coastguard Worker output[17] = WRAPLOW(step1[14] - step1[17]);
1164*fb1b10abSAndroid Build Coastguard Worker output[18] = WRAPLOW(step1[13] - step1[18]);
1165*fb1b10abSAndroid Build Coastguard Worker output[19] = WRAPLOW(step1[12] - step1[19]);
1166*fb1b10abSAndroid Build Coastguard Worker output[20] = WRAPLOW(step1[11] - step1[20]);
1167*fb1b10abSAndroid Build Coastguard Worker output[21] = WRAPLOW(step1[10] - step1[21]);
1168*fb1b10abSAndroid Build Coastguard Worker output[22] = WRAPLOW(step1[9] - step1[22]);
1169*fb1b10abSAndroid Build Coastguard Worker output[23] = WRAPLOW(step1[8] - step1[23]);
1170*fb1b10abSAndroid Build Coastguard Worker output[24] = WRAPLOW(step1[7] - step1[24]);
1171*fb1b10abSAndroid Build Coastguard Worker output[25] = WRAPLOW(step1[6] - step1[25]);
1172*fb1b10abSAndroid Build Coastguard Worker output[26] = WRAPLOW(step1[5] - step1[26]);
1173*fb1b10abSAndroid Build Coastguard Worker output[27] = WRAPLOW(step1[4] - step1[27]);
1174*fb1b10abSAndroid Build Coastguard Worker output[28] = WRAPLOW(step1[3] - step1[28]);
1175*fb1b10abSAndroid Build Coastguard Worker output[29] = WRAPLOW(step1[2] - step1[29]);
1176*fb1b10abSAndroid Build Coastguard Worker output[30] = WRAPLOW(step1[1] - step1[30]);
1177*fb1b10abSAndroid Build Coastguard Worker output[31] = WRAPLOW(step1[0] - step1[31]);
1178*fb1b10abSAndroid Build Coastguard Worker }
1179*fb1b10abSAndroid Build Coastguard Worker
vpx_idct32x32_1024_add_c(const tran_low_t * input,uint8_t * dest,int stride)1180*fb1b10abSAndroid Build Coastguard Worker void vpx_idct32x32_1024_add_c(const tran_low_t *input, uint8_t *dest,
1181*fb1b10abSAndroid Build Coastguard Worker int stride) {
1182*fb1b10abSAndroid Build Coastguard Worker int i, j;
1183*fb1b10abSAndroid Build Coastguard Worker tran_low_t out[32 * 32];
1184*fb1b10abSAndroid Build Coastguard Worker tran_low_t *outptr = out;
1185*fb1b10abSAndroid Build Coastguard Worker tran_low_t temp_in[32], temp_out[32];
1186*fb1b10abSAndroid Build Coastguard Worker
1187*fb1b10abSAndroid Build Coastguard Worker // Rows
1188*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 32; ++i) {
1189*fb1b10abSAndroid Build Coastguard Worker int16_t zero_coeff = 0;
1190*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 32; ++j) zero_coeff |= input[j];
1191*fb1b10abSAndroid Build Coastguard Worker
1192*fb1b10abSAndroid Build Coastguard Worker if (zero_coeff)
1193*fb1b10abSAndroid Build Coastguard Worker idct32_c(input, outptr);
1194*fb1b10abSAndroid Build Coastguard Worker else
1195*fb1b10abSAndroid Build Coastguard Worker memset(outptr, 0, sizeof(tran_low_t) * 32);
1196*fb1b10abSAndroid Build Coastguard Worker input += 32;
1197*fb1b10abSAndroid Build Coastguard Worker outptr += 32;
1198*fb1b10abSAndroid Build Coastguard Worker }
1199*fb1b10abSAndroid Build Coastguard Worker
1200*fb1b10abSAndroid Build Coastguard Worker // Columns
1201*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 32; ++i) {
1202*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 32; ++j) temp_in[j] = out[j * 32 + i];
1203*fb1b10abSAndroid Build Coastguard Worker idct32_c(temp_in, temp_out);
1204*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 32; ++j) {
1205*fb1b10abSAndroid Build Coastguard Worker dest[j * stride + i] = clip_pixel_add(dest[j * stride + i],
1206*fb1b10abSAndroid Build Coastguard Worker ROUND_POWER_OF_TWO(temp_out[j], 6));
1207*fb1b10abSAndroid Build Coastguard Worker }
1208*fb1b10abSAndroid Build Coastguard Worker }
1209*fb1b10abSAndroid Build Coastguard Worker }
1210*fb1b10abSAndroid Build Coastguard Worker
vpx_idct32x32_135_add_c(const tran_low_t * input,uint8_t * dest,int stride)1211*fb1b10abSAndroid Build Coastguard Worker void vpx_idct32x32_135_add_c(const tran_low_t *input, uint8_t *dest,
1212*fb1b10abSAndroid Build Coastguard Worker int stride) {
1213*fb1b10abSAndroid Build Coastguard Worker int i, j;
1214*fb1b10abSAndroid Build Coastguard Worker tran_low_t out[32 * 32] = { 0 };
1215*fb1b10abSAndroid Build Coastguard Worker tran_low_t *outptr = out;
1216*fb1b10abSAndroid Build Coastguard Worker tran_low_t temp_in[32], temp_out[32];
1217*fb1b10abSAndroid Build Coastguard Worker
1218*fb1b10abSAndroid Build Coastguard Worker // Rows
1219*fb1b10abSAndroid Build Coastguard Worker // Only upper-left 16x16 has non-zero coeff
1220*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 16; ++i) {
1221*fb1b10abSAndroid Build Coastguard Worker idct32_c(input, outptr);
1222*fb1b10abSAndroid Build Coastguard Worker input += 32;
1223*fb1b10abSAndroid Build Coastguard Worker outptr += 32;
1224*fb1b10abSAndroid Build Coastguard Worker }
1225*fb1b10abSAndroid Build Coastguard Worker
1226*fb1b10abSAndroid Build Coastguard Worker // Columns
1227*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 32; ++i) {
1228*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 32; ++j) temp_in[j] = out[j * 32 + i];
1229*fb1b10abSAndroid Build Coastguard Worker idct32_c(temp_in, temp_out);
1230*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 32; ++j) {
1231*fb1b10abSAndroid Build Coastguard Worker dest[j * stride + i] = clip_pixel_add(dest[j * stride + i],
1232*fb1b10abSAndroid Build Coastguard Worker ROUND_POWER_OF_TWO(temp_out[j], 6));
1233*fb1b10abSAndroid Build Coastguard Worker }
1234*fb1b10abSAndroid Build Coastguard Worker }
1235*fb1b10abSAndroid Build Coastguard Worker }
1236*fb1b10abSAndroid Build Coastguard Worker
vpx_idct32x32_34_add_c(const tran_low_t * input,uint8_t * dest,int stride)1237*fb1b10abSAndroid Build Coastguard Worker void vpx_idct32x32_34_add_c(const tran_low_t *input, uint8_t *dest,
1238*fb1b10abSAndroid Build Coastguard Worker int stride) {
1239*fb1b10abSAndroid Build Coastguard Worker int i, j;
1240*fb1b10abSAndroid Build Coastguard Worker tran_low_t out[32 * 32] = { 0 };
1241*fb1b10abSAndroid Build Coastguard Worker tran_low_t *outptr = out;
1242*fb1b10abSAndroid Build Coastguard Worker tran_low_t temp_in[32], temp_out[32];
1243*fb1b10abSAndroid Build Coastguard Worker
1244*fb1b10abSAndroid Build Coastguard Worker // Rows
1245*fb1b10abSAndroid Build Coastguard Worker // Only upper-left 8x8 has non-zero coeff
1246*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 8; ++i) {
1247*fb1b10abSAndroid Build Coastguard Worker idct32_c(input, outptr);
1248*fb1b10abSAndroid Build Coastguard Worker input += 32;
1249*fb1b10abSAndroid Build Coastguard Worker outptr += 32;
1250*fb1b10abSAndroid Build Coastguard Worker }
1251*fb1b10abSAndroid Build Coastguard Worker
1252*fb1b10abSAndroid Build Coastguard Worker // Columns
1253*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 32; ++i) {
1254*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 32; ++j) temp_in[j] = out[j * 32 + i];
1255*fb1b10abSAndroid Build Coastguard Worker idct32_c(temp_in, temp_out);
1256*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 32; ++j) {
1257*fb1b10abSAndroid Build Coastguard Worker dest[j * stride + i] = clip_pixel_add(dest[j * stride + i],
1258*fb1b10abSAndroid Build Coastguard Worker ROUND_POWER_OF_TWO(temp_out[j], 6));
1259*fb1b10abSAndroid Build Coastguard Worker }
1260*fb1b10abSAndroid Build Coastguard Worker }
1261*fb1b10abSAndroid Build Coastguard Worker }
1262*fb1b10abSAndroid Build Coastguard Worker
vpx_idct32x32_1_add_c(const tran_low_t * input,uint8_t * dest,int stride)1263*fb1b10abSAndroid Build Coastguard Worker void vpx_idct32x32_1_add_c(const tran_low_t *input, uint8_t *dest, int stride) {
1264*fb1b10abSAndroid Build Coastguard Worker int i, j;
1265*fb1b10abSAndroid Build Coastguard Worker tran_high_t a1;
1266*fb1b10abSAndroid Build Coastguard Worker tran_low_t out =
1267*fb1b10abSAndroid Build Coastguard Worker WRAPLOW(dct_const_round_shift((int16_t)input[0] * cospi_16_64));
1268*fb1b10abSAndroid Build Coastguard Worker
1269*fb1b10abSAndroid Build Coastguard Worker out = WRAPLOW(dct_const_round_shift(out * cospi_16_64));
1270*fb1b10abSAndroid Build Coastguard Worker a1 = ROUND_POWER_OF_TWO(out, 6);
1271*fb1b10abSAndroid Build Coastguard Worker
1272*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 32; ++j) {
1273*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 32; ++i) dest[i] = clip_pixel_add(dest[i], a1);
1274*fb1b10abSAndroid Build Coastguard Worker dest += stride;
1275*fb1b10abSAndroid Build Coastguard Worker }
1276*fb1b10abSAndroid Build Coastguard Worker }
1277*fb1b10abSAndroid Build Coastguard Worker
1278*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_HIGHBITDEPTH
1279*fb1b10abSAndroid Build Coastguard Worker
1280*fb1b10abSAndroid Build Coastguard Worker // 12 signal input bits + 7 2D forward transform amplify bits + 5 1D inverse
1281*fb1b10abSAndroid Build Coastguard Worker // transform amplify bits + 1 bit for contingency in rounding and quantizing
1282*fb1b10abSAndroid Build Coastguard Worker #define HIGHBD_VALID_TXFM_MAGNITUDE_RANGE (1 << 25)
1283*fb1b10abSAndroid Build Coastguard Worker
detect_invalid_highbd_input(const tran_low_t * input,int size)1284*fb1b10abSAndroid Build Coastguard Worker static INLINE int detect_invalid_highbd_input(const tran_low_t *input,
1285*fb1b10abSAndroid Build Coastguard Worker int size) {
1286*fb1b10abSAndroid Build Coastguard Worker int i;
1287*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < size; ++i)
1288*fb1b10abSAndroid Build Coastguard Worker if (abs(input[i]) >= HIGHBD_VALID_TXFM_MAGNITUDE_RANGE) return 1;
1289*fb1b10abSAndroid Build Coastguard Worker return 0;
1290*fb1b10abSAndroid Build Coastguard Worker }
1291*fb1b10abSAndroid Build Coastguard Worker
vpx_highbd_iwht4x4_16_add_c(const tran_low_t * input,uint16_t * dest,int stride,int bd)1292*fb1b10abSAndroid Build Coastguard Worker void vpx_highbd_iwht4x4_16_add_c(const tran_low_t *input, uint16_t *dest,
1293*fb1b10abSAndroid Build Coastguard Worker int stride, int bd) {
1294*fb1b10abSAndroid Build Coastguard Worker /* 4-point reversible, orthonormal inverse Walsh-Hadamard in 3.5 adds,
1295*fb1b10abSAndroid Build Coastguard Worker 0.5 shifts per pixel. */
1296*fb1b10abSAndroid Build Coastguard Worker int i;
1297*fb1b10abSAndroid Build Coastguard Worker tran_low_t output[16];
1298*fb1b10abSAndroid Build Coastguard Worker tran_high_t a1, b1, c1, d1, e1;
1299*fb1b10abSAndroid Build Coastguard Worker const tran_low_t *ip = input;
1300*fb1b10abSAndroid Build Coastguard Worker tran_low_t *op = output;
1301*fb1b10abSAndroid Build Coastguard Worker
1302*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 4; i++) {
1303*fb1b10abSAndroid Build Coastguard Worker a1 = ip[0] >> UNIT_QUANT_SHIFT;
1304*fb1b10abSAndroid Build Coastguard Worker c1 = ip[1] >> UNIT_QUANT_SHIFT;
1305*fb1b10abSAndroid Build Coastguard Worker d1 = ip[2] >> UNIT_QUANT_SHIFT;
1306*fb1b10abSAndroid Build Coastguard Worker b1 = ip[3] >> UNIT_QUANT_SHIFT;
1307*fb1b10abSAndroid Build Coastguard Worker a1 += c1;
1308*fb1b10abSAndroid Build Coastguard Worker d1 -= b1;
1309*fb1b10abSAndroid Build Coastguard Worker e1 = (a1 - d1) >> 1;
1310*fb1b10abSAndroid Build Coastguard Worker b1 = e1 - b1;
1311*fb1b10abSAndroid Build Coastguard Worker c1 = e1 - c1;
1312*fb1b10abSAndroid Build Coastguard Worker a1 -= b1;
1313*fb1b10abSAndroid Build Coastguard Worker d1 += c1;
1314*fb1b10abSAndroid Build Coastguard Worker op[0] = HIGHBD_WRAPLOW(a1, bd);
1315*fb1b10abSAndroid Build Coastguard Worker op[1] = HIGHBD_WRAPLOW(b1, bd);
1316*fb1b10abSAndroid Build Coastguard Worker op[2] = HIGHBD_WRAPLOW(c1, bd);
1317*fb1b10abSAndroid Build Coastguard Worker op[3] = HIGHBD_WRAPLOW(d1, bd);
1318*fb1b10abSAndroid Build Coastguard Worker ip += 4;
1319*fb1b10abSAndroid Build Coastguard Worker op += 4;
1320*fb1b10abSAndroid Build Coastguard Worker }
1321*fb1b10abSAndroid Build Coastguard Worker
1322*fb1b10abSAndroid Build Coastguard Worker ip = output;
1323*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 4; i++) {
1324*fb1b10abSAndroid Build Coastguard Worker a1 = ip[4 * 0];
1325*fb1b10abSAndroid Build Coastguard Worker c1 = ip[4 * 1];
1326*fb1b10abSAndroid Build Coastguard Worker d1 = ip[4 * 2];
1327*fb1b10abSAndroid Build Coastguard Worker b1 = ip[4 * 3];
1328*fb1b10abSAndroid Build Coastguard Worker a1 += c1;
1329*fb1b10abSAndroid Build Coastguard Worker d1 -= b1;
1330*fb1b10abSAndroid Build Coastguard Worker e1 = (a1 - d1) >> 1;
1331*fb1b10abSAndroid Build Coastguard Worker b1 = e1 - b1;
1332*fb1b10abSAndroid Build Coastguard Worker c1 = e1 - c1;
1333*fb1b10abSAndroid Build Coastguard Worker a1 -= b1;
1334*fb1b10abSAndroid Build Coastguard Worker d1 += c1;
1335*fb1b10abSAndroid Build Coastguard Worker dest[stride * 0] =
1336*fb1b10abSAndroid Build Coastguard Worker highbd_clip_pixel_add(dest[stride * 0], HIGHBD_WRAPLOW(a1, bd), bd);
1337*fb1b10abSAndroid Build Coastguard Worker dest[stride * 1] =
1338*fb1b10abSAndroid Build Coastguard Worker highbd_clip_pixel_add(dest[stride * 1], HIGHBD_WRAPLOW(b1, bd), bd);
1339*fb1b10abSAndroid Build Coastguard Worker dest[stride * 2] =
1340*fb1b10abSAndroid Build Coastguard Worker highbd_clip_pixel_add(dest[stride * 2], HIGHBD_WRAPLOW(c1, bd), bd);
1341*fb1b10abSAndroid Build Coastguard Worker dest[stride * 3] =
1342*fb1b10abSAndroid Build Coastguard Worker highbd_clip_pixel_add(dest[stride * 3], HIGHBD_WRAPLOW(d1, bd), bd);
1343*fb1b10abSAndroid Build Coastguard Worker
1344*fb1b10abSAndroid Build Coastguard Worker ip++;
1345*fb1b10abSAndroid Build Coastguard Worker dest++;
1346*fb1b10abSAndroid Build Coastguard Worker }
1347*fb1b10abSAndroid Build Coastguard Worker }
1348*fb1b10abSAndroid Build Coastguard Worker
vpx_highbd_iwht4x4_1_add_c(const tran_low_t * input,uint16_t * dest,int stride,int bd)1349*fb1b10abSAndroid Build Coastguard Worker void vpx_highbd_iwht4x4_1_add_c(const tran_low_t *input, uint16_t *dest,
1350*fb1b10abSAndroid Build Coastguard Worker int stride, int bd) {
1351*fb1b10abSAndroid Build Coastguard Worker int i;
1352*fb1b10abSAndroid Build Coastguard Worker tran_high_t a1, e1;
1353*fb1b10abSAndroid Build Coastguard Worker tran_low_t tmp[4];
1354*fb1b10abSAndroid Build Coastguard Worker const tran_low_t *ip = input;
1355*fb1b10abSAndroid Build Coastguard Worker tran_low_t *op = tmp;
1356*fb1b10abSAndroid Build Coastguard Worker (void)bd;
1357*fb1b10abSAndroid Build Coastguard Worker
1358*fb1b10abSAndroid Build Coastguard Worker a1 = ip[0] >> UNIT_QUANT_SHIFT;
1359*fb1b10abSAndroid Build Coastguard Worker e1 = a1 >> 1;
1360*fb1b10abSAndroid Build Coastguard Worker a1 -= e1;
1361*fb1b10abSAndroid Build Coastguard Worker op[0] = HIGHBD_WRAPLOW(a1, bd);
1362*fb1b10abSAndroid Build Coastguard Worker op[1] = op[2] = op[3] = HIGHBD_WRAPLOW(e1, bd);
1363*fb1b10abSAndroid Build Coastguard Worker
1364*fb1b10abSAndroid Build Coastguard Worker ip = tmp;
1365*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 4; i++) {
1366*fb1b10abSAndroid Build Coastguard Worker e1 = ip[0] >> 1;
1367*fb1b10abSAndroid Build Coastguard Worker a1 = ip[0] - e1;
1368*fb1b10abSAndroid Build Coastguard Worker dest[stride * 0] = highbd_clip_pixel_add(dest[stride * 0], a1, bd);
1369*fb1b10abSAndroid Build Coastguard Worker dest[stride * 1] = highbd_clip_pixel_add(dest[stride * 1], e1, bd);
1370*fb1b10abSAndroid Build Coastguard Worker dest[stride * 2] = highbd_clip_pixel_add(dest[stride * 2], e1, bd);
1371*fb1b10abSAndroid Build Coastguard Worker dest[stride * 3] = highbd_clip_pixel_add(dest[stride * 3], e1, bd);
1372*fb1b10abSAndroid Build Coastguard Worker ip++;
1373*fb1b10abSAndroid Build Coastguard Worker dest++;
1374*fb1b10abSAndroid Build Coastguard Worker }
1375*fb1b10abSAndroid Build Coastguard Worker }
1376*fb1b10abSAndroid Build Coastguard Worker
vpx_highbd_iadst4_c(const tran_low_t * input,tran_low_t * output,int bd)1377*fb1b10abSAndroid Build Coastguard Worker void vpx_highbd_iadst4_c(const tran_low_t *input, tran_low_t *output, int bd) {
1378*fb1b10abSAndroid Build Coastguard Worker tran_high_t s0, s1, s2, s3, s4, s5, s6, s7;
1379*fb1b10abSAndroid Build Coastguard Worker tran_low_t x0 = input[0];
1380*fb1b10abSAndroid Build Coastguard Worker tran_low_t x1 = input[1];
1381*fb1b10abSAndroid Build Coastguard Worker tran_low_t x2 = input[2];
1382*fb1b10abSAndroid Build Coastguard Worker tran_low_t x3 = input[3];
1383*fb1b10abSAndroid Build Coastguard Worker (void)bd;
1384*fb1b10abSAndroid Build Coastguard Worker
1385*fb1b10abSAndroid Build Coastguard Worker if (detect_invalid_highbd_input(input, 4)) {
1386*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_COEFFICIENT_RANGE_CHECKING
1387*fb1b10abSAndroid Build Coastguard Worker assert(0 && "invalid highbd txfm input");
1388*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_COEFFICIENT_RANGE_CHECKING
1389*fb1b10abSAndroid Build Coastguard Worker memset(output, 0, sizeof(*output) * 4);
1390*fb1b10abSAndroid Build Coastguard Worker return;
1391*fb1b10abSAndroid Build Coastguard Worker }
1392*fb1b10abSAndroid Build Coastguard Worker
1393*fb1b10abSAndroid Build Coastguard Worker if (!(x0 | x1 | x2 | x3)) {
1394*fb1b10abSAndroid Build Coastguard Worker memset(output, 0, 4 * sizeof(*output));
1395*fb1b10abSAndroid Build Coastguard Worker return;
1396*fb1b10abSAndroid Build Coastguard Worker }
1397*fb1b10abSAndroid Build Coastguard Worker
1398*fb1b10abSAndroid Build Coastguard Worker s0 = (tran_high_t)sinpi_1_9 * x0;
1399*fb1b10abSAndroid Build Coastguard Worker s1 = (tran_high_t)sinpi_2_9 * x0;
1400*fb1b10abSAndroid Build Coastguard Worker s2 = (tran_high_t)sinpi_3_9 * x1;
1401*fb1b10abSAndroid Build Coastguard Worker s3 = (tran_high_t)sinpi_4_9 * x2;
1402*fb1b10abSAndroid Build Coastguard Worker s4 = (tran_high_t)sinpi_1_9 * x2;
1403*fb1b10abSAndroid Build Coastguard Worker s5 = (tran_high_t)sinpi_2_9 * x3;
1404*fb1b10abSAndroid Build Coastguard Worker s6 = (tran_high_t)sinpi_4_9 * x3;
1405*fb1b10abSAndroid Build Coastguard Worker s7 = (tran_high_t)HIGHBD_WRAPLOW(x0 - x2 + x3, bd);
1406*fb1b10abSAndroid Build Coastguard Worker
1407*fb1b10abSAndroid Build Coastguard Worker s0 = s0 + s3 + s5;
1408*fb1b10abSAndroid Build Coastguard Worker s1 = s1 - s4 - s6;
1409*fb1b10abSAndroid Build Coastguard Worker s3 = s2;
1410*fb1b10abSAndroid Build Coastguard Worker s2 = sinpi_3_9 * s7;
1411*fb1b10abSAndroid Build Coastguard Worker
1412*fb1b10abSAndroid Build Coastguard Worker // 1-D transform scaling factor is sqrt(2).
1413*fb1b10abSAndroid Build Coastguard Worker // The overall dynamic range is 14b (input) + 14b (multiplication scaling)
1414*fb1b10abSAndroid Build Coastguard Worker // + 1b (addition) = 29b.
1415*fb1b10abSAndroid Build Coastguard Worker // Hence the output bit depth is 15b.
1416*fb1b10abSAndroid Build Coastguard Worker output[0] = HIGHBD_WRAPLOW(dct_const_round_shift(s0 + s3), bd);
1417*fb1b10abSAndroid Build Coastguard Worker output[1] = HIGHBD_WRAPLOW(dct_const_round_shift(s1 + s3), bd);
1418*fb1b10abSAndroid Build Coastguard Worker output[2] = HIGHBD_WRAPLOW(dct_const_round_shift(s2), bd);
1419*fb1b10abSAndroid Build Coastguard Worker output[3] = HIGHBD_WRAPLOW(dct_const_round_shift(s0 + s1 - s3), bd);
1420*fb1b10abSAndroid Build Coastguard Worker }
1421*fb1b10abSAndroid Build Coastguard Worker
vpx_highbd_idct4_c(const tran_low_t * input,tran_low_t * output,int bd)1422*fb1b10abSAndroid Build Coastguard Worker void vpx_highbd_idct4_c(const tran_low_t *input, tran_low_t *output, int bd) {
1423*fb1b10abSAndroid Build Coastguard Worker tran_low_t step[4];
1424*fb1b10abSAndroid Build Coastguard Worker tran_high_t temp1, temp2;
1425*fb1b10abSAndroid Build Coastguard Worker (void)bd;
1426*fb1b10abSAndroid Build Coastguard Worker
1427*fb1b10abSAndroid Build Coastguard Worker if (detect_invalid_highbd_input(input, 4)) {
1428*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_COEFFICIENT_RANGE_CHECKING
1429*fb1b10abSAndroid Build Coastguard Worker assert(0 && "invalid highbd txfm input");
1430*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_COEFFICIENT_RANGE_CHECKING
1431*fb1b10abSAndroid Build Coastguard Worker memset(output, 0, sizeof(*output) * 4);
1432*fb1b10abSAndroid Build Coastguard Worker return;
1433*fb1b10abSAndroid Build Coastguard Worker }
1434*fb1b10abSAndroid Build Coastguard Worker
1435*fb1b10abSAndroid Build Coastguard Worker // stage 1
1436*fb1b10abSAndroid Build Coastguard Worker temp1 = (input[0] + input[2]) * (tran_high_t)cospi_16_64;
1437*fb1b10abSAndroid Build Coastguard Worker temp2 = (input[0] - input[2]) * (tran_high_t)cospi_16_64;
1438*fb1b10abSAndroid Build Coastguard Worker step[0] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
1439*fb1b10abSAndroid Build Coastguard Worker step[1] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
1440*fb1b10abSAndroid Build Coastguard Worker temp1 =
1441*fb1b10abSAndroid Build Coastguard Worker input[1] * (tran_high_t)cospi_24_64 - input[3] * (tran_high_t)cospi_8_64;
1442*fb1b10abSAndroid Build Coastguard Worker temp2 =
1443*fb1b10abSAndroid Build Coastguard Worker input[1] * (tran_high_t)cospi_8_64 + input[3] * (tran_high_t)cospi_24_64;
1444*fb1b10abSAndroid Build Coastguard Worker step[2] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
1445*fb1b10abSAndroid Build Coastguard Worker step[3] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
1446*fb1b10abSAndroid Build Coastguard Worker
1447*fb1b10abSAndroid Build Coastguard Worker // stage 2
1448*fb1b10abSAndroid Build Coastguard Worker output[0] = HIGHBD_WRAPLOW(step[0] + step[3], bd);
1449*fb1b10abSAndroid Build Coastguard Worker output[1] = HIGHBD_WRAPLOW(step[1] + step[2], bd);
1450*fb1b10abSAndroid Build Coastguard Worker output[2] = HIGHBD_WRAPLOW(step[1] - step[2], bd);
1451*fb1b10abSAndroid Build Coastguard Worker output[3] = HIGHBD_WRAPLOW(step[0] - step[3], bd);
1452*fb1b10abSAndroid Build Coastguard Worker }
1453*fb1b10abSAndroid Build Coastguard Worker
vpx_highbd_idct4x4_16_add_c(const tran_low_t * input,uint16_t * dest,int stride,int bd)1454*fb1b10abSAndroid Build Coastguard Worker void vpx_highbd_idct4x4_16_add_c(const tran_low_t *input, uint16_t *dest,
1455*fb1b10abSAndroid Build Coastguard Worker int stride, int bd) {
1456*fb1b10abSAndroid Build Coastguard Worker int i, j;
1457*fb1b10abSAndroid Build Coastguard Worker tran_low_t out[4 * 4];
1458*fb1b10abSAndroid Build Coastguard Worker tran_low_t *outptr = out;
1459*fb1b10abSAndroid Build Coastguard Worker tran_low_t temp_in[4], temp_out[4];
1460*fb1b10abSAndroid Build Coastguard Worker
1461*fb1b10abSAndroid Build Coastguard Worker // Rows
1462*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 4; ++i) {
1463*fb1b10abSAndroid Build Coastguard Worker vpx_highbd_idct4_c(input, outptr, bd);
1464*fb1b10abSAndroid Build Coastguard Worker input += 4;
1465*fb1b10abSAndroid Build Coastguard Worker outptr += 4;
1466*fb1b10abSAndroid Build Coastguard Worker }
1467*fb1b10abSAndroid Build Coastguard Worker
1468*fb1b10abSAndroid Build Coastguard Worker // Columns
1469*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 4; ++i) {
1470*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 4; ++j) temp_in[j] = out[j * 4 + i];
1471*fb1b10abSAndroid Build Coastguard Worker vpx_highbd_idct4_c(temp_in, temp_out, bd);
1472*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 4; ++j) {
1473*fb1b10abSAndroid Build Coastguard Worker dest[j * stride + i] = highbd_clip_pixel_add(
1474*fb1b10abSAndroid Build Coastguard Worker dest[j * stride + i], ROUND_POWER_OF_TWO(temp_out[j], 4), bd);
1475*fb1b10abSAndroid Build Coastguard Worker }
1476*fb1b10abSAndroid Build Coastguard Worker }
1477*fb1b10abSAndroid Build Coastguard Worker }
1478*fb1b10abSAndroid Build Coastguard Worker
vpx_highbd_idct4x4_1_add_c(const tran_low_t * input,uint16_t * dest,int stride,int bd)1479*fb1b10abSAndroid Build Coastguard Worker void vpx_highbd_idct4x4_1_add_c(const tran_low_t *input, uint16_t *dest,
1480*fb1b10abSAndroid Build Coastguard Worker int stride, int bd) {
1481*fb1b10abSAndroid Build Coastguard Worker int i;
1482*fb1b10abSAndroid Build Coastguard Worker tran_high_t a1;
1483*fb1b10abSAndroid Build Coastguard Worker tran_low_t out = HIGHBD_WRAPLOW(
1484*fb1b10abSAndroid Build Coastguard Worker dct_const_round_shift(input[0] * (tran_high_t)cospi_16_64), bd);
1485*fb1b10abSAndroid Build Coastguard Worker
1486*fb1b10abSAndroid Build Coastguard Worker out =
1487*fb1b10abSAndroid Build Coastguard Worker HIGHBD_WRAPLOW(dct_const_round_shift(out * (tran_high_t)cospi_16_64), bd);
1488*fb1b10abSAndroid Build Coastguard Worker a1 = ROUND_POWER_OF_TWO(out, 4);
1489*fb1b10abSAndroid Build Coastguard Worker
1490*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 4; i++) {
1491*fb1b10abSAndroid Build Coastguard Worker dest[0] = highbd_clip_pixel_add(dest[0], a1, bd);
1492*fb1b10abSAndroid Build Coastguard Worker dest[1] = highbd_clip_pixel_add(dest[1], a1, bd);
1493*fb1b10abSAndroid Build Coastguard Worker dest[2] = highbd_clip_pixel_add(dest[2], a1, bd);
1494*fb1b10abSAndroid Build Coastguard Worker dest[3] = highbd_clip_pixel_add(dest[3], a1, bd);
1495*fb1b10abSAndroid Build Coastguard Worker dest += stride;
1496*fb1b10abSAndroid Build Coastguard Worker }
1497*fb1b10abSAndroid Build Coastguard Worker }
1498*fb1b10abSAndroid Build Coastguard Worker
vpx_highbd_iadst8_c(const tran_low_t * input,tran_low_t * output,int bd)1499*fb1b10abSAndroid Build Coastguard Worker void vpx_highbd_iadst8_c(const tran_low_t *input, tran_low_t *output, int bd) {
1500*fb1b10abSAndroid Build Coastguard Worker tran_high_t s0, s1, s2, s3, s4, s5, s6, s7;
1501*fb1b10abSAndroid Build Coastguard Worker tran_low_t x0 = input[7];
1502*fb1b10abSAndroid Build Coastguard Worker tran_low_t x1 = input[0];
1503*fb1b10abSAndroid Build Coastguard Worker tran_low_t x2 = input[5];
1504*fb1b10abSAndroid Build Coastguard Worker tran_low_t x3 = input[2];
1505*fb1b10abSAndroid Build Coastguard Worker tran_low_t x4 = input[3];
1506*fb1b10abSAndroid Build Coastguard Worker tran_low_t x5 = input[4];
1507*fb1b10abSAndroid Build Coastguard Worker tran_low_t x6 = input[1];
1508*fb1b10abSAndroid Build Coastguard Worker tran_low_t x7 = input[6];
1509*fb1b10abSAndroid Build Coastguard Worker (void)bd;
1510*fb1b10abSAndroid Build Coastguard Worker
1511*fb1b10abSAndroid Build Coastguard Worker if (detect_invalid_highbd_input(input, 8)) {
1512*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_COEFFICIENT_RANGE_CHECKING
1513*fb1b10abSAndroid Build Coastguard Worker assert(0 && "invalid highbd txfm input");
1514*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_COEFFICIENT_RANGE_CHECKING
1515*fb1b10abSAndroid Build Coastguard Worker memset(output, 0, sizeof(*output) * 8);
1516*fb1b10abSAndroid Build Coastguard Worker return;
1517*fb1b10abSAndroid Build Coastguard Worker }
1518*fb1b10abSAndroid Build Coastguard Worker
1519*fb1b10abSAndroid Build Coastguard Worker if (!(x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7)) {
1520*fb1b10abSAndroid Build Coastguard Worker memset(output, 0, 8 * sizeof(*output));
1521*fb1b10abSAndroid Build Coastguard Worker return;
1522*fb1b10abSAndroid Build Coastguard Worker }
1523*fb1b10abSAndroid Build Coastguard Worker
1524*fb1b10abSAndroid Build Coastguard Worker // stage 1
1525*fb1b10abSAndroid Build Coastguard Worker s0 = (tran_high_t)cospi_2_64 * x0 + (tran_high_t)cospi_30_64 * x1;
1526*fb1b10abSAndroid Build Coastguard Worker s1 = (tran_high_t)cospi_30_64 * x0 - (tran_high_t)cospi_2_64 * x1;
1527*fb1b10abSAndroid Build Coastguard Worker s2 = (tran_high_t)cospi_10_64 * x2 + (tran_high_t)cospi_22_64 * x3;
1528*fb1b10abSAndroid Build Coastguard Worker s3 = (tran_high_t)cospi_22_64 * x2 - (tran_high_t)cospi_10_64 * x3;
1529*fb1b10abSAndroid Build Coastguard Worker s4 = (tran_high_t)cospi_18_64 * x4 + (tran_high_t)cospi_14_64 * x5;
1530*fb1b10abSAndroid Build Coastguard Worker s5 = (tran_high_t)cospi_14_64 * x4 - (tran_high_t)cospi_18_64 * x5;
1531*fb1b10abSAndroid Build Coastguard Worker s6 = (tran_high_t)cospi_26_64 * x6 + (tran_high_t)cospi_6_64 * x7;
1532*fb1b10abSAndroid Build Coastguard Worker s7 = (tran_high_t)cospi_6_64 * x6 - (tran_high_t)cospi_26_64 * x7;
1533*fb1b10abSAndroid Build Coastguard Worker
1534*fb1b10abSAndroid Build Coastguard Worker x0 = HIGHBD_WRAPLOW(dct_const_round_shift(s0 + s4), bd);
1535*fb1b10abSAndroid Build Coastguard Worker x1 = HIGHBD_WRAPLOW(dct_const_round_shift(s1 + s5), bd);
1536*fb1b10abSAndroid Build Coastguard Worker x2 = HIGHBD_WRAPLOW(dct_const_round_shift(s2 + s6), bd);
1537*fb1b10abSAndroid Build Coastguard Worker x3 = HIGHBD_WRAPLOW(dct_const_round_shift(s3 + s7), bd);
1538*fb1b10abSAndroid Build Coastguard Worker x4 = HIGHBD_WRAPLOW(dct_const_round_shift(s0 - s4), bd);
1539*fb1b10abSAndroid Build Coastguard Worker x5 = HIGHBD_WRAPLOW(dct_const_round_shift(s1 - s5), bd);
1540*fb1b10abSAndroid Build Coastguard Worker x6 = HIGHBD_WRAPLOW(dct_const_round_shift(s2 - s6), bd);
1541*fb1b10abSAndroid Build Coastguard Worker x7 = HIGHBD_WRAPLOW(dct_const_round_shift(s3 - s7), bd);
1542*fb1b10abSAndroid Build Coastguard Worker
1543*fb1b10abSAndroid Build Coastguard Worker // stage 2
1544*fb1b10abSAndroid Build Coastguard Worker s0 = x0;
1545*fb1b10abSAndroid Build Coastguard Worker s1 = x1;
1546*fb1b10abSAndroid Build Coastguard Worker s2 = x2;
1547*fb1b10abSAndroid Build Coastguard Worker s3 = x3;
1548*fb1b10abSAndroid Build Coastguard Worker s4 = (tran_high_t)cospi_8_64 * x4 + (tran_high_t)cospi_24_64 * x5;
1549*fb1b10abSAndroid Build Coastguard Worker s5 = (tran_high_t)cospi_24_64 * x4 - (tran_high_t)cospi_8_64 * x5;
1550*fb1b10abSAndroid Build Coastguard Worker s6 = (tran_high_t)(-cospi_24_64) * x6 + (tran_high_t)cospi_8_64 * x7;
1551*fb1b10abSAndroid Build Coastguard Worker s7 = (tran_high_t)cospi_8_64 * x6 + (tran_high_t)cospi_24_64 * x7;
1552*fb1b10abSAndroid Build Coastguard Worker
1553*fb1b10abSAndroid Build Coastguard Worker x0 = HIGHBD_WRAPLOW(s0 + s2, bd);
1554*fb1b10abSAndroid Build Coastguard Worker x1 = HIGHBD_WRAPLOW(s1 + s3, bd);
1555*fb1b10abSAndroid Build Coastguard Worker x2 = HIGHBD_WRAPLOW(s0 - s2, bd);
1556*fb1b10abSAndroid Build Coastguard Worker x3 = HIGHBD_WRAPLOW(s1 - s3, bd);
1557*fb1b10abSAndroid Build Coastguard Worker x4 = HIGHBD_WRAPLOW(dct_const_round_shift(s4 + s6), bd);
1558*fb1b10abSAndroid Build Coastguard Worker x5 = HIGHBD_WRAPLOW(dct_const_round_shift(s5 + s7), bd);
1559*fb1b10abSAndroid Build Coastguard Worker x6 = HIGHBD_WRAPLOW(dct_const_round_shift(s4 - s6), bd);
1560*fb1b10abSAndroid Build Coastguard Worker x7 = HIGHBD_WRAPLOW(dct_const_round_shift(s5 - s7), bd);
1561*fb1b10abSAndroid Build Coastguard Worker
1562*fb1b10abSAndroid Build Coastguard Worker // stage 3
1563*fb1b10abSAndroid Build Coastguard Worker s2 = (tran_high_t)cospi_16_64 * (x2 + x3);
1564*fb1b10abSAndroid Build Coastguard Worker s3 = (tran_high_t)cospi_16_64 * (x2 - x3);
1565*fb1b10abSAndroid Build Coastguard Worker s6 = (tran_high_t)cospi_16_64 * (x6 + x7);
1566*fb1b10abSAndroid Build Coastguard Worker s7 = (tran_high_t)cospi_16_64 * (x6 - x7);
1567*fb1b10abSAndroid Build Coastguard Worker
1568*fb1b10abSAndroid Build Coastguard Worker x2 = HIGHBD_WRAPLOW(dct_const_round_shift(s2), bd);
1569*fb1b10abSAndroid Build Coastguard Worker x3 = HIGHBD_WRAPLOW(dct_const_round_shift(s3), bd);
1570*fb1b10abSAndroid Build Coastguard Worker x6 = HIGHBD_WRAPLOW(dct_const_round_shift(s6), bd);
1571*fb1b10abSAndroid Build Coastguard Worker x7 = HIGHBD_WRAPLOW(dct_const_round_shift(s7), bd);
1572*fb1b10abSAndroid Build Coastguard Worker
1573*fb1b10abSAndroid Build Coastguard Worker output[0] = HIGHBD_WRAPLOW(x0, bd);
1574*fb1b10abSAndroid Build Coastguard Worker output[1] = HIGHBD_WRAPLOW(-x4, bd);
1575*fb1b10abSAndroid Build Coastguard Worker output[2] = HIGHBD_WRAPLOW(x6, bd);
1576*fb1b10abSAndroid Build Coastguard Worker output[3] = HIGHBD_WRAPLOW(-x2, bd);
1577*fb1b10abSAndroid Build Coastguard Worker output[4] = HIGHBD_WRAPLOW(x3, bd);
1578*fb1b10abSAndroid Build Coastguard Worker output[5] = HIGHBD_WRAPLOW(-x7, bd);
1579*fb1b10abSAndroid Build Coastguard Worker output[6] = HIGHBD_WRAPLOW(x5, bd);
1580*fb1b10abSAndroid Build Coastguard Worker output[7] = HIGHBD_WRAPLOW(-x1, bd);
1581*fb1b10abSAndroid Build Coastguard Worker }
1582*fb1b10abSAndroid Build Coastguard Worker
vpx_highbd_idct8_c(const tran_low_t * input,tran_low_t * output,int bd)1583*fb1b10abSAndroid Build Coastguard Worker void vpx_highbd_idct8_c(const tran_low_t *input, tran_low_t *output, int bd) {
1584*fb1b10abSAndroid Build Coastguard Worker tran_low_t step1[8], step2[8];
1585*fb1b10abSAndroid Build Coastguard Worker tran_high_t temp1, temp2;
1586*fb1b10abSAndroid Build Coastguard Worker
1587*fb1b10abSAndroid Build Coastguard Worker if (detect_invalid_highbd_input(input, 8)) {
1588*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_COEFFICIENT_RANGE_CHECKING
1589*fb1b10abSAndroid Build Coastguard Worker assert(0 && "invalid highbd txfm input");
1590*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_COEFFICIENT_RANGE_CHECKING
1591*fb1b10abSAndroid Build Coastguard Worker memset(output, 0, sizeof(*output) * 8);
1592*fb1b10abSAndroid Build Coastguard Worker return;
1593*fb1b10abSAndroid Build Coastguard Worker }
1594*fb1b10abSAndroid Build Coastguard Worker
1595*fb1b10abSAndroid Build Coastguard Worker // stage 1
1596*fb1b10abSAndroid Build Coastguard Worker step1[0] = input[0];
1597*fb1b10abSAndroid Build Coastguard Worker step1[2] = input[4];
1598*fb1b10abSAndroid Build Coastguard Worker step1[1] = input[2];
1599*fb1b10abSAndroid Build Coastguard Worker step1[3] = input[6];
1600*fb1b10abSAndroid Build Coastguard Worker temp1 =
1601*fb1b10abSAndroid Build Coastguard Worker input[1] * (tran_high_t)cospi_28_64 - input[7] * (tran_high_t)cospi_4_64;
1602*fb1b10abSAndroid Build Coastguard Worker temp2 =
1603*fb1b10abSAndroid Build Coastguard Worker input[1] * (tran_high_t)cospi_4_64 + input[7] * (tran_high_t)cospi_28_64;
1604*fb1b10abSAndroid Build Coastguard Worker step1[4] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
1605*fb1b10abSAndroid Build Coastguard Worker step1[7] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
1606*fb1b10abSAndroid Build Coastguard Worker temp1 =
1607*fb1b10abSAndroid Build Coastguard Worker input[5] * (tran_high_t)cospi_12_64 - input[3] * (tran_high_t)cospi_20_64;
1608*fb1b10abSAndroid Build Coastguard Worker temp2 =
1609*fb1b10abSAndroid Build Coastguard Worker input[5] * (tran_high_t)cospi_20_64 + input[3] * (tran_high_t)cospi_12_64;
1610*fb1b10abSAndroid Build Coastguard Worker step1[5] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
1611*fb1b10abSAndroid Build Coastguard Worker step1[6] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
1612*fb1b10abSAndroid Build Coastguard Worker
1613*fb1b10abSAndroid Build Coastguard Worker // stage 2 & stage 3 - even half
1614*fb1b10abSAndroid Build Coastguard Worker vpx_highbd_idct4_c(step1, step1, bd);
1615*fb1b10abSAndroid Build Coastguard Worker
1616*fb1b10abSAndroid Build Coastguard Worker // stage 2 - odd half
1617*fb1b10abSAndroid Build Coastguard Worker step2[4] = HIGHBD_WRAPLOW(step1[4] + step1[5], bd);
1618*fb1b10abSAndroid Build Coastguard Worker step2[5] = HIGHBD_WRAPLOW(step1[4] - step1[5], bd);
1619*fb1b10abSAndroid Build Coastguard Worker step2[6] = HIGHBD_WRAPLOW(-step1[6] + step1[7], bd);
1620*fb1b10abSAndroid Build Coastguard Worker step2[7] = HIGHBD_WRAPLOW(step1[6] + step1[7], bd);
1621*fb1b10abSAndroid Build Coastguard Worker
1622*fb1b10abSAndroid Build Coastguard Worker // stage 3 - odd half
1623*fb1b10abSAndroid Build Coastguard Worker step1[4] = step2[4];
1624*fb1b10abSAndroid Build Coastguard Worker temp1 = (step2[6] - step2[5]) * (tran_high_t)cospi_16_64;
1625*fb1b10abSAndroid Build Coastguard Worker temp2 = (step2[5] + step2[6]) * (tran_high_t)cospi_16_64;
1626*fb1b10abSAndroid Build Coastguard Worker step1[5] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
1627*fb1b10abSAndroid Build Coastguard Worker step1[6] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
1628*fb1b10abSAndroid Build Coastguard Worker step1[7] = step2[7];
1629*fb1b10abSAndroid Build Coastguard Worker
1630*fb1b10abSAndroid Build Coastguard Worker // stage 4
1631*fb1b10abSAndroid Build Coastguard Worker output[0] = HIGHBD_WRAPLOW(step1[0] + step1[7], bd);
1632*fb1b10abSAndroid Build Coastguard Worker output[1] = HIGHBD_WRAPLOW(step1[1] + step1[6], bd);
1633*fb1b10abSAndroid Build Coastguard Worker output[2] = HIGHBD_WRAPLOW(step1[2] + step1[5], bd);
1634*fb1b10abSAndroid Build Coastguard Worker output[3] = HIGHBD_WRAPLOW(step1[3] + step1[4], bd);
1635*fb1b10abSAndroid Build Coastguard Worker output[4] = HIGHBD_WRAPLOW(step1[3] - step1[4], bd);
1636*fb1b10abSAndroid Build Coastguard Worker output[5] = HIGHBD_WRAPLOW(step1[2] - step1[5], bd);
1637*fb1b10abSAndroid Build Coastguard Worker output[6] = HIGHBD_WRAPLOW(step1[1] - step1[6], bd);
1638*fb1b10abSAndroid Build Coastguard Worker output[7] = HIGHBD_WRAPLOW(step1[0] - step1[7], bd);
1639*fb1b10abSAndroid Build Coastguard Worker }
1640*fb1b10abSAndroid Build Coastguard Worker
vpx_highbd_idct8x8_64_add_c(const tran_low_t * input,uint16_t * dest,int stride,int bd)1641*fb1b10abSAndroid Build Coastguard Worker void vpx_highbd_idct8x8_64_add_c(const tran_low_t *input, uint16_t *dest,
1642*fb1b10abSAndroid Build Coastguard Worker int stride, int bd) {
1643*fb1b10abSAndroid Build Coastguard Worker int i, j;
1644*fb1b10abSAndroid Build Coastguard Worker tran_low_t out[8 * 8];
1645*fb1b10abSAndroid Build Coastguard Worker tran_low_t *outptr = out;
1646*fb1b10abSAndroid Build Coastguard Worker tran_low_t temp_in[8], temp_out[8];
1647*fb1b10abSAndroid Build Coastguard Worker
1648*fb1b10abSAndroid Build Coastguard Worker // First transform rows
1649*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 8; ++i) {
1650*fb1b10abSAndroid Build Coastguard Worker vpx_highbd_idct8_c(input, outptr, bd);
1651*fb1b10abSAndroid Build Coastguard Worker input += 8;
1652*fb1b10abSAndroid Build Coastguard Worker outptr += 8;
1653*fb1b10abSAndroid Build Coastguard Worker }
1654*fb1b10abSAndroid Build Coastguard Worker
1655*fb1b10abSAndroid Build Coastguard Worker // Then transform columns
1656*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 8; ++i) {
1657*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 8; ++j) temp_in[j] = out[j * 8 + i];
1658*fb1b10abSAndroid Build Coastguard Worker vpx_highbd_idct8_c(temp_in, temp_out, bd);
1659*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 8; ++j) {
1660*fb1b10abSAndroid Build Coastguard Worker dest[j * stride + i] = highbd_clip_pixel_add(
1661*fb1b10abSAndroid Build Coastguard Worker dest[j * stride + i], ROUND_POWER_OF_TWO(temp_out[j], 5), bd);
1662*fb1b10abSAndroid Build Coastguard Worker }
1663*fb1b10abSAndroid Build Coastguard Worker }
1664*fb1b10abSAndroid Build Coastguard Worker }
1665*fb1b10abSAndroid Build Coastguard Worker
vpx_highbd_idct8x8_12_add_c(const tran_low_t * input,uint16_t * dest,int stride,int bd)1666*fb1b10abSAndroid Build Coastguard Worker void vpx_highbd_idct8x8_12_add_c(const tran_low_t *input, uint16_t *dest,
1667*fb1b10abSAndroid Build Coastguard Worker int stride, int bd) {
1668*fb1b10abSAndroid Build Coastguard Worker int i, j;
1669*fb1b10abSAndroid Build Coastguard Worker tran_low_t out[8 * 8] = { 0 };
1670*fb1b10abSAndroid Build Coastguard Worker tran_low_t *outptr = out;
1671*fb1b10abSAndroid Build Coastguard Worker tran_low_t temp_in[8], temp_out[8];
1672*fb1b10abSAndroid Build Coastguard Worker
1673*fb1b10abSAndroid Build Coastguard Worker // First transform rows
1674*fb1b10abSAndroid Build Coastguard Worker // Only first 4 row has non-zero coefs
1675*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 4; ++i) {
1676*fb1b10abSAndroid Build Coastguard Worker vpx_highbd_idct8_c(input, outptr, bd);
1677*fb1b10abSAndroid Build Coastguard Worker input += 8;
1678*fb1b10abSAndroid Build Coastguard Worker outptr += 8;
1679*fb1b10abSAndroid Build Coastguard Worker }
1680*fb1b10abSAndroid Build Coastguard Worker
1681*fb1b10abSAndroid Build Coastguard Worker // Then transform columns
1682*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 8; ++i) {
1683*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 8; ++j) temp_in[j] = out[j * 8 + i];
1684*fb1b10abSAndroid Build Coastguard Worker vpx_highbd_idct8_c(temp_in, temp_out, bd);
1685*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 8; ++j) {
1686*fb1b10abSAndroid Build Coastguard Worker dest[j * stride + i] = highbd_clip_pixel_add(
1687*fb1b10abSAndroid Build Coastguard Worker dest[j * stride + i], ROUND_POWER_OF_TWO(temp_out[j], 5), bd);
1688*fb1b10abSAndroid Build Coastguard Worker }
1689*fb1b10abSAndroid Build Coastguard Worker }
1690*fb1b10abSAndroid Build Coastguard Worker }
1691*fb1b10abSAndroid Build Coastguard Worker
vpx_highbd_idct8x8_1_add_c(const tran_low_t * input,uint16_t * dest,int stride,int bd)1692*fb1b10abSAndroid Build Coastguard Worker void vpx_highbd_idct8x8_1_add_c(const tran_low_t *input, uint16_t *dest,
1693*fb1b10abSAndroid Build Coastguard Worker int stride, int bd) {
1694*fb1b10abSAndroid Build Coastguard Worker int i, j;
1695*fb1b10abSAndroid Build Coastguard Worker tran_high_t a1;
1696*fb1b10abSAndroid Build Coastguard Worker tran_low_t out = HIGHBD_WRAPLOW(
1697*fb1b10abSAndroid Build Coastguard Worker dct_const_round_shift(input[0] * (tran_high_t)cospi_16_64), bd);
1698*fb1b10abSAndroid Build Coastguard Worker
1699*fb1b10abSAndroid Build Coastguard Worker out =
1700*fb1b10abSAndroid Build Coastguard Worker HIGHBD_WRAPLOW(dct_const_round_shift(out * (tran_high_t)cospi_16_64), bd);
1701*fb1b10abSAndroid Build Coastguard Worker a1 = ROUND_POWER_OF_TWO(out, 5);
1702*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 8; ++j) {
1703*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 8; ++i) dest[i] = highbd_clip_pixel_add(dest[i], a1, bd);
1704*fb1b10abSAndroid Build Coastguard Worker dest += stride;
1705*fb1b10abSAndroid Build Coastguard Worker }
1706*fb1b10abSAndroid Build Coastguard Worker }
1707*fb1b10abSAndroid Build Coastguard Worker
vpx_highbd_iadst16_c(const tran_low_t * input,tran_low_t * output,int bd)1708*fb1b10abSAndroid Build Coastguard Worker void vpx_highbd_iadst16_c(const tran_low_t *input, tran_low_t *output, int bd) {
1709*fb1b10abSAndroid Build Coastguard Worker tran_high_t s0, s1, s2, s3, s4, s5, s6, s7, s8;
1710*fb1b10abSAndroid Build Coastguard Worker tran_high_t s9, s10, s11, s12, s13, s14, s15;
1711*fb1b10abSAndroid Build Coastguard Worker tran_low_t x0 = input[15];
1712*fb1b10abSAndroid Build Coastguard Worker tran_low_t x1 = input[0];
1713*fb1b10abSAndroid Build Coastguard Worker tran_low_t x2 = input[13];
1714*fb1b10abSAndroid Build Coastguard Worker tran_low_t x3 = input[2];
1715*fb1b10abSAndroid Build Coastguard Worker tran_low_t x4 = input[11];
1716*fb1b10abSAndroid Build Coastguard Worker tran_low_t x5 = input[4];
1717*fb1b10abSAndroid Build Coastguard Worker tran_low_t x6 = input[9];
1718*fb1b10abSAndroid Build Coastguard Worker tran_low_t x7 = input[6];
1719*fb1b10abSAndroid Build Coastguard Worker tran_low_t x8 = input[7];
1720*fb1b10abSAndroid Build Coastguard Worker tran_low_t x9 = input[8];
1721*fb1b10abSAndroid Build Coastguard Worker tran_low_t x10 = input[5];
1722*fb1b10abSAndroid Build Coastguard Worker tran_low_t x11 = input[10];
1723*fb1b10abSAndroid Build Coastguard Worker tran_low_t x12 = input[3];
1724*fb1b10abSAndroid Build Coastguard Worker tran_low_t x13 = input[12];
1725*fb1b10abSAndroid Build Coastguard Worker tran_low_t x14 = input[1];
1726*fb1b10abSAndroid Build Coastguard Worker tran_low_t x15 = input[14];
1727*fb1b10abSAndroid Build Coastguard Worker (void)bd;
1728*fb1b10abSAndroid Build Coastguard Worker
1729*fb1b10abSAndroid Build Coastguard Worker if (detect_invalid_highbd_input(input, 16)) {
1730*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_COEFFICIENT_RANGE_CHECKING
1731*fb1b10abSAndroid Build Coastguard Worker assert(0 && "invalid highbd txfm input");
1732*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_COEFFICIENT_RANGE_CHECKING
1733*fb1b10abSAndroid Build Coastguard Worker memset(output, 0, sizeof(*output) * 16);
1734*fb1b10abSAndroid Build Coastguard Worker return;
1735*fb1b10abSAndroid Build Coastguard Worker }
1736*fb1b10abSAndroid Build Coastguard Worker
1737*fb1b10abSAndroid Build Coastguard Worker if (!(x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | x10 | x11 | x12 |
1738*fb1b10abSAndroid Build Coastguard Worker x13 | x14 | x15)) {
1739*fb1b10abSAndroid Build Coastguard Worker memset(output, 0, 16 * sizeof(*output));
1740*fb1b10abSAndroid Build Coastguard Worker return;
1741*fb1b10abSAndroid Build Coastguard Worker }
1742*fb1b10abSAndroid Build Coastguard Worker
1743*fb1b10abSAndroid Build Coastguard Worker // stage 1
1744*fb1b10abSAndroid Build Coastguard Worker s0 = x0 * (tran_high_t)cospi_1_64 + x1 * (tran_high_t)cospi_31_64;
1745*fb1b10abSAndroid Build Coastguard Worker s1 = x0 * (tran_high_t)cospi_31_64 - x1 * (tran_high_t)cospi_1_64;
1746*fb1b10abSAndroid Build Coastguard Worker s2 = x2 * (tran_high_t)cospi_5_64 + x3 * (tran_high_t)cospi_27_64;
1747*fb1b10abSAndroid Build Coastguard Worker s3 = x2 * (tran_high_t)cospi_27_64 - x3 * (tran_high_t)cospi_5_64;
1748*fb1b10abSAndroid Build Coastguard Worker s4 = x4 * (tran_high_t)cospi_9_64 + x5 * (tran_high_t)cospi_23_64;
1749*fb1b10abSAndroid Build Coastguard Worker s5 = x4 * (tran_high_t)cospi_23_64 - x5 * (tran_high_t)cospi_9_64;
1750*fb1b10abSAndroid Build Coastguard Worker s6 = x6 * (tran_high_t)cospi_13_64 + x7 * (tran_high_t)cospi_19_64;
1751*fb1b10abSAndroid Build Coastguard Worker s7 = x6 * (tran_high_t)cospi_19_64 - x7 * (tran_high_t)cospi_13_64;
1752*fb1b10abSAndroid Build Coastguard Worker s8 = x8 * (tran_high_t)cospi_17_64 + x9 * (tran_high_t)cospi_15_64;
1753*fb1b10abSAndroid Build Coastguard Worker s9 = x8 * (tran_high_t)cospi_15_64 - x9 * (tran_high_t)cospi_17_64;
1754*fb1b10abSAndroid Build Coastguard Worker s10 = x10 * (tran_high_t)cospi_21_64 + x11 * (tran_high_t)cospi_11_64;
1755*fb1b10abSAndroid Build Coastguard Worker s11 = x10 * (tran_high_t)cospi_11_64 - x11 * (tran_high_t)cospi_21_64;
1756*fb1b10abSAndroid Build Coastguard Worker s12 = x12 * (tran_high_t)cospi_25_64 + x13 * (tran_high_t)cospi_7_64;
1757*fb1b10abSAndroid Build Coastguard Worker s13 = x12 * (tran_high_t)cospi_7_64 - x13 * (tran_high_t)cospi_25_64;
1758*fb1b10abSAndroid Build Coastguard Worker s14 = x14 * (tran_high_t)cospi_29_64 + x15 * (tran_high_t)cospi_3_64;
1759*fb1b10abSAndroid Build Coastguard Worker s15 = x14 * (tran_high_t)cospi_3_64 - x15 * (tran_high_t)cospi_29_64;
1760*fb1b10abSAndroid Build Coastguard Worker
1761*fb1b10abSAndroid Build Coastguard Worker x0 = HIGHBD_WRAPLOW(dct_const_round_shift(s0 + s8), bd);
1762*fb1b10abSAndroid Build Coastguard Worker x1 = HIGHBD_WRAPLOW(dct_const_round_shift(s1 + s9), bd);
1763*fb1b10abSAndroid Build Coastguard Worker x2 = HIGHBD_WRAPLOW(dct_const_round_shift(s2 + s10), bd);
1764*fb1b10abSAndroid Build Coastguard Worker x3 = HIGHBD_WRAPLOW(dct_const_round_shift(s3 + s11), bd);
1765*fb1b10abSAndroid Build Coastguard Worker x4 = HIGHBD_WRAPLOW(dct_const_round_shift(s4 + s12), bd);
1766*fb1b10abSAndroid Build Coastguard Worker x5 = HIGHBD_WRAPLOW(dct_const_round_shift(s5 + s13), bd);
1767*fb1b10abSAndroid Build Coastguard Worker x6 = HIGHBD_WRAPLOW(dct_const_round_shift(s6 + s14), bd);
1768*fb1b10abSAndroid Build Coastguard Worker x7 = HIGHBD_WRAPLOW(dct_const_round_shift(s7 + s15), bd);
1769*fb1b10abSAndroid Build Coastguard Worker x8 = HIGHBD_WRAPLOW(dct_const_round_shift(s0 - s8), bd);
1770*fb1b10abSAndroid Build Coastguard Worker x9 = HIGHBD_WRAPLOW(dct_const_round_shift(s1 - s9), bd);
1771*fb1b10abSAndroid Build Coastguard Worker x10 = HIGHBD_WRAPLOW(dct_const_round_shift(s2 - s10), bd);
1772*fb1b10abSAndroid Build Coastguard Worker x11 = HIGHBD_WRAPLOW(dct_const_round_shift(s3 - s11), bd);
1773*fb1b10abSAndroid Build Coastguard Worker x12 = HIGHBD_WRAPLOW(dct_const_round_shift(s4 - s12), bd);
1774*fb1b10abSAndroid Build Coastguard Worker x13 = HIGHBD_WRAPLOW(dct_const_round_shift(s5 - s13), bd);
1775*fb1b10abSAndroid Build Coastguard Worker x14 = HIGHBD_WRAPLOW(dct_const_round_shift(s6 - s14), bd);
1776*fb1b10abSAndroid Build Coastguard Worker x15 = HIGHBD_WRAPLOW(dct_const_round_shift(s7 - s15), bd);
1777*fb1b10abSAndroid Build Coastguard Worker
1778*fb1b10abSAndroid Build Coastguard Worker // stage 2
1779*fb1b10abSAndroid Build Coastguard Worker s0 = x0;
1780*fb1b10abSAndroid Build Coastguard Worker s1 = x1;
1781*fb1b10abSAndroid Build Coastguard Worker s2 = x2;
1782*fb1b10abSAndroid Build Coastguard Worker s3 = x3;
1783*fb1b10abSAndroid Build Coastguard Worker s4 = x4;
1784*fb1b10abSAndroid Build Coastguard Worker s5 = x5;
1785*fb1b10abSAndroid Build Coastguard Worker s6 = x6;
1786*fb1b10abSAndroid Build Coastguard Worker s7 = x7;
1787*fb1b10abSAndroid Build Coastguard Worker s8 = x8 * (tran_high_t)cospi_4_64 + x9 * (tran_high_t)cospi_28_64;
1788*fb1b10abSAndroid Build Coastguard Worker s9 = x8 * (tran_high_t)cospi_28_64 - x9 * (tran_high_t)cospi_4_64;
1789*fb1b10abSAndroid Build Coastguard Worker s10 = x10 * (tran_high_t)cospi_20_64 + x11 * (tran_high_t)cospi_12_64;
1790*fb1b10abSAndroid Build Coastguard Worker s11 = x10 * (tran_high_t)cospi_12_64 - x11 * (tran_high_t)cospi_20_64;
1791*fb1b10abSAndroid Build Coastguard Worker s12 = -x12 * (tran_high_t)cospi_28_64 + x13 * (tran_high_t)cospi_4_64;
1792*fb1b10abSAndroid Build Coastguard Worker s13 = x12 * (tran_high_t)cospi_4_64 + x13 * (tran_high_t)cospi_28_64;
1793*fb1b10abSAndroid Build Coastguard Worker s14 = -x14 * (tran_high_t)cospi_12_64 + x15 * (tran_high_t)cospi_20_64;
1794*fb1b10abSAndroid Build Coastguard Worker s15 = x14 * (tran_high_t)cospi_20_64 + x15 * (tran_high_t)cospi_12_64;
1795*fb1b10abSAndroid Build Coastguard Worker
1796*fb1b10abSAndroid Build Coastguard Worker x0 = HIGHBD_WRAPLOW(s0 + s4, bd);
1797*fb1b10abSAndroid Build Coastguard Worker x1 = HIGHBD_WRAPLOW(s1 + s5, bd);
1798*fb1b10abSAndroid Build Coastguard Worker x2 = HIGHBD_WRAPLOW(s2 + s6, bd);
1799*fb1b10abSAndroid Build Coastguard Worker x3 = HIGHBD_WRAPLOW(s3 + s7, bd);
1800*fb1b10abSAndroid Build Coastguard Worker x4 = HIGHBD_WRAPLOW(s0 - s4, bd);
1801*fb1b10abSAndroid Build Coastguard Worker x5 = HIGHBD_WRAPLOW(s1 - s5, bd);
1802*fb1b10abSAndroid Build Coastguard Worker x6 = HIGHBD_WRAPLOW(s2 - s6, bd);
1803*fb1b10abSAndroid Build Coastguard Worker x7 = HIGHBD_WRAPLOW(s3 - s7, bd);
1804*fb1b10abSAndroid Build Coastguard Worker x8 = HIGHBD_WRAPLOW(dct_const_round_shift(s8 + s12), bd);
1805*fb1b10abSAndroid Build Coastguard Worker x9 = HIGHBD_WRAPLOW(dct_const_round_shift(s9 + s13), bd);
1806*fb1b10abSAndroid Build Coastguard Worker x10 = HIGHBD_WRAPLOW(dct_const_round_shift(s10 + s14), bd);
1807*fb1b10abSAndroid Build Coastguard Worker x11 = HIGHBD_WRAPLOW(dct_const_round_shift(s11 + s15), bd);
1808*fb1b10abSAndroid Build Coastguard Worker x12 = HIGHBD_WRAPLOW(dct_const_round_shift(s8 - s12), bd);
1809*fb1b10abSAndroid Build Coastguard Worker x13 = HIGHBD_WRAPLOW(dct_const_round_shift(s9 - s13), bd);
1810*fb1b10abSAndroid Build Coastguard Worker x14 = HIGHBD_WRAPLOW(dct_const_round_shift(s10 - s14), bd);
1811*fb1b10abSAndroid Build Coastguard Worker x15 = HIGHBD_WRAPLOW(dct_const_round_shift(s11 - s15), bd);
1812*fb1b10abSAndroid Build Coastguard Worker
1813*fb1b10abSAndroid Build Coastguard Worker // stage 3
1814*fb1b10abSAndroid Build Coastguard Worker s0 = x0;
1815*fb1b10abSAndroid Build Coastguard Worker s1 = x1;
1816*fb1b10abSAndroid Build Coastguard Worker s2 = x2;
1817*fb1b10abSAndroid Build Coastguard Worker s3 = x3;
1818*fb1b10abSAndroid Build Coastguard Worker s4 = x4 * (tran_high_t)cospi_8_64 + x5 * (tran_high_t)cospi_24_64;
1819*fb1b10abSAndroid Build Coastguard Worker s5 = x4 * (tran_high_t)cospi_24_64 - x5 * (tran_high_t)cospi_8_64;
1820*fb1b10abSAndroid Build Coastguard Worker s6 = -x6 * (tran_high_t)cospi_24_64 + x7 * (tran_high_t)cospi_8_64;
1821*fb1b10abSAndroid Build Coastguard Worker s7 = x6 * (tran_high_t)cospi_8_64 + x7 * (tran_high_t)cospi_24_64;
1822*fb1b10abSAndroid Build Coastguard Worker s8 = x8;
1823*fb1b10abSAndroid Build Coastguard Worker s9 = x9;
1824*fb1b10abSAndroid Build Coastguard Worker s10 = x10;
1825*fb1b10abSAndroid Build Coastguard Worker s11 = x11;
1826*fb1b10abSAndroid Build Coastguard Worker s12 = x12 * (tran_high_t)cospi_8_64 + x13 * (tran_high_t)cospi_24_64;
1827*fb1b10abSAndroid Build Coastguard Worker s13 = x12 * (tran_high_t)cospi_24_64 - x13 * (tran_high_t)cospi_8_64;
1828*fb1b10abSAndroid Build Coastguard Worker s14 = -x14 * (tran_high_t)cospi_24_64 + x15 * (tran_high_t)cospi_8_64;
1829*fb1b10abSAndroid Build Coastguard Worker s15 = x14 * (tran_high_t)cospi_8_64 + x15 * (tran_high_t)cospi_24_64;
1830*fb1b10abSAndroid Build Coastguard Worker
1831*fb1b10abSAndroid Build Coastguard Worker x0 = HIGHBD_WRAPLOW(s0 + s2, bd);
1832*fb1b10abSAndroid Build Coastguard Worker x1 = HIGHBD_WRAPLOW(s1 + s3, bd);
1833*fb1b10abSAndroid Build Coastguard Worker x2 = HIGHBD_WRAPLOW(s0 - s2, bd);
1834*fb1b10abSAndroid Build Coastguard Worker x3 = HIGHBD_WRAPLOW(s1 - s3, bd);
1835*fb1b10abSAndroid Build Coastguard Worker x4 = HIGHBD_WRAPLOW(dct_const_round_shift(s4 + s6), bd);
1836*fb1b10abSAndroid Build Coastguard Worker x5 = HIGHBD_WRAPLOW(dct_const_round_shift(s5 + s7), bd);
1837*fb1b10abSAndroid Build Coastguard Worker x6 = HIGHBD_WRAPLOW(dct_const_round_shift(s4 - s6), bd);
1838*fb1b10abSAndroid Build Coastguard Worker x7 = HIGHBD_WRAPLOW(dct_const_round_shift(s5 - s7), bd);
1839*fb1b10abSAndroid Build Coastguard Worker x8 = HIGHBD_WRAPLOW(s8 + s10, bd);
1840*fb1b10abSAndroid Build Coastguard Worker x9 = HIGHBD_WRAPLOW(s9 + s11, bd);
1841*fb1b10abSAndroid Build Coastguard Worker x10 = HIGHBD_WRAPLOW(s8 - s10, bd);
1842*fb1b10abSAndroid Build Coastguard Worker x11 = HIGHBD_WRAPLOW(s9 - s11, bd);
1843*fb1b10abSAndroid Build Coastguard Worker x12 = HIGHBD_WRAPLOW(dct_const_round_shift(s12 + s14), bd);
1844*fb1b10abSAndroid Build Coastguard Worker x13 = HIGHBD_WRAPLOW(dct_const_round_shift(s13 + s15), bd);
1845*fb1b10abSAndroid Build Coastguard Worker x14 = HIGHBD_WRAPLOW(dct_const_round_shift(s12 - s14), bd);
1846*fb1b10abSAndroid Build Coastguard Worker x15 = HIGHBD_WRAPLOW(dct_const_round_shift(s13 - s15), bd);
1847*fb1b10abSAndroid Build Coastguard Worker
1848*fb1b10abSAndroid Build Coastguard Worker // stage 4
1849*fb1b10abSAndroid Build Coastguard Worker s2 = (tran_high_t)(-cospi_16_64) * (x2 + x3);
1850*fb1b10abSAndroid Build Coastguard Worker s3 = (tran_high_t)cospi_16_64 * (x2 - x3);
1851*fb1b10abSAndroid Build Coastguard Worker s6 = (tran_high_t)cospi_16_64 * (x6 + x7);
1852*fb1b10abSAndroid Build Coastguard Worker s7 = (tran_high_t)cospi_16_64 * (-x6 + x7);
1853*fb1b10abSAndroid Build Coastguard Worker s10 = (tran_high_t)cospi_16_64 * (x10 + x11);
1854*fb1b10abSAndroid Build Coastguard Worker s11 = (tran_high_t)cospi_16_64 * (-x10 + x11);
1855*fb1b10abSAndroid Build Coastguard Worker s14 = (tran_high_t)(-cospi_16_64) * (x14 + x15);
1856*fb1b10abSAndroid Build Coastguard Worker s15 = (tran_high_t)cospi_16_64 * (x14 - x15);
1857*fb1b10abSAndroid Build Coastguard Worker
1858*fb1b10abSAndroid Build Coastguard Worker x2 = HIGHBD_WRAPLOW(dct_const_round_shift(s2), bd);
1859*fb1b10abSAndroid Build Coastguard Worker x3 = HIGHBD_WRAPLOW(dct_const_round_shift(s3), bd);
1860*fb1b10abSAndroid Build Coastguard Worker x6 = HIGHBD_WRAPLOW(dct_const_round_shift(s6), bd);
1861*fb1b10abSAndroid Build Coastguard Worker x7 = HIGHBD_WRAPLOW(dct_const_round_shift(s7), bd);
1862*fb1b10abSAndroid Build Coastguard Worker x10 = HIGHBD_WRAPLOW(dct_const_round_shift(s10), bd);
1863*fb1b10abSAndroid Build Coastguard Worker x11 = HIGHBD_WRAPLOW(dct_const_round_shift(s11), bd);
1864*fb1b10abSAndroid Build Coastguard Worker x14 = HIGHBD_WRAPLOW(dct_const_round_shift(s14), bd);
1865*fb1b10abSAndroid Build Coastguard Worker x15 = HIGHBD_WRAPLOW(dct_const_round_shift(s15), bd);
1866*fb1b10abSAndroid Build Coastguard Worker
1867*fb1b10abSAndroid Build Coastguard Worker output[0] = HIGHBD_WRAPLOW(x0, bd);
1868*fb1b10abSAndroid Build Coastguard Worker output[1] = HIGHBD_WRAPLOW(-x8, bd);
1869*fb1b10abSAndroid Build Coastguard Worker output[2] = HIGHBD_WRAPLOW(x12, bd);
1870*fb1b10abSAndroid Build Coastguard Worker output[3] = HIGHBD_WRAPLOW(-x4, bd);
1871*fb1b10abSAndroid Build Coastguard Worker output[4] = HIGHBD_WRAPLOW(x6, bd);
1872*fb1b10abSAndroid Build Coastguard Worker output[5] = HIGHBD_WRAPLOW(x14, bd);
1873*fb1b10abSAndroid Build Coastguard Worker output[6] = HIGHBD_WRAPLOW(x10, bd);
1874*fb1b10abSAndroid Build Coastguard Worker output[7] = HIGHBD_WRAPLOW(x2, bd);
1875*fb1b10abSAndroid Build Coastguard Worker output[8] = HIGHBD_WRAPLOW(x3, bd);
1876*fb1b10abSAndroid Build Coastguard Worker output[9] = HIGHBD_WRAPLOW(x11, bd);
1877*fb1b10abSAndroid Build Coastguard Worker output[10] = HIGHBD_WRAPLOW(x15, bd);
1878*fb1b10abSAndroid Build Coastguard Worker output[11] = HIGHBD_WRAPLOW(x7, bd);
1879*fb1b10abSAndroid Build Coastguard Worker output[12] = HIGHBD_WRAPLOW(x5, bd);
1880*fb1b10abSAndroid Build Coastguard Worker output[13] = HIGHBD_WRAPLOW(-x13, bd);
1881*fb1b10abSAndroid Build Coastguard Worker output[14] = HIGHBD_WRAPLOW(x9, bd);
1882*fb1b10abSAndroid Build Coastguard Worker output[15] = HIGHBD_WRAPLOW(-x1, bd);
1883*fb1b10abSAndroid Build Coastguard Worker }
1884*fb1b10abSAndroid Build Coastguard Worker
vpx_highbd_idct16_c(const tran_low_t * input,tran_low_t * output,int bd)1885*fb1b10abSAndroid Build Coastguard Worker void vpx_highbd_idct16_c(const tran_low_t *input, tran_low_t *output, int bd) {
1886*fb1b10abSAndroid Build Coastguard Worker tran_low_t step1[16], step2[16];
1887*fb1b10abSAndroid Build Coastguard Worker tran_high_t temp1, temp2;
1888*fb1b10abSAndroid Build Coastguard Worker (void)bd;
1889*fb1b10abSAndroid Build Coastguard Worker
1890*fb1b10abSAndroid Build Coastguard Worker if (detect_invalid_highbd_input(input, 16)) {
1891*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_COEFFICIENT_RANGE_CHECKING
1892*fb1b10abSAndroid Build Coastguard Worker assert(0 && "invalid highbd txfm input");
1893*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_COEFFICIENT_RANGE_CHECKING
1894*fb1b10abSAndroid Build Coastguard Worker memset(output, 0, sizeof(*output) * 16);
1895*fb1b10abSAndroid Build Coastguard Worker return;
1896*fb1b10abSAndroid Build Coastguard Worker }
1897*fb1b10abSAndroid Build Coastguard Worker
1898*fb1b10abSAndroid Build Coastguard Worker // stage 1
1899*fb1b10abSAndroid Build Coastguard Worker step1[0] = input[0 / 2];
1900*fb1b10abSAndroid Build Coastguard Worker step1[1] = input[16 / 2];
1901*fb1b10abSAndroid Build Coastguard Worker step1[2] = input[8 / 2];
1902*fb1b10abSAndroid Build Coastguard Worker step1[3] = input[24 / 2];
1903*fb1b10abSAndroid Build Coastguard Worker step1[4] = input[4 / 2];
1904*fb1b10abSAndroid Build Coastguard Worker step1[5] = input[20 / 2];
1905*fb1b10abSAndroid Build Coastguard Worker step1[6] = input[12 / 2];
1906*fb1b10abSAndroid Build Coastguard Worker step1[7] = input[28 / 2];
1907*fb1b10abSAndroid Build Coastguard Worker step1[8] = input[2 / 2];
1908*fb1b10abSAndroid Build Coastguard Worker step1[9] = input[18 / 2];
1909*fb1b10abSAndroid Build Coastguard Worker step1[10] = input[10 / 2];
1910*fb1b10abSAndroid Build Coastguard Worker step1[11] = input[26 / 2];
1911*fb1b10abSAndroid Build Coastguard Worker step1[12] = input[6 / 2];
1912*fb1b10abSAndroid Build Coastguard Worker step1[13] = input[22 / 2];
1913*fb1b10abSAndroid Build Coastguard Worker step1[14] = input[14 / 2];
1914*fb1b10abSAndroid Build Coastguard Worker step1[15] = input[30 / 2];
1915*fb1b10abSAndroid Build Coastguard Worker
1916*fb1b10abSAndroid Build Coastguard Worker // stage 2
1917*fb1b10abSAndroid Build Coastguard Worker step2[0] = step1[0];
1918*fb1b10abSAndroid Build Coastguard Worker step2[1] = step1[1];
1919*fb1b10abSAndroid Build Coastguard Worker step2[2] = step1[2];
1920*fb1b10abSAndroid Build Coastguard Worker step2[3] = step1[3];
1921*fb1b10abSAndroid Build Coastguard Worker step2[4] = step1[4];
1922*fb1b10abSAndroid Build Coastguard Worker step2[5] = step1[5];
1923*fb1b10abSAndroid Build Coastguard Worker step2[6] = step1[6];
1924*fb1b10abSAndroid Build Coastguard Worker step2[7] = step1[7];
1925*fb1b10abSAndroid Build Coastguard Worker
1926*fb1b10abSAndroid Build Coastguard Worker temp1 =
1927*fb1b10abSAndroid Build Coastguard Worker step1[8] * (tran_high_t)cospi_30_64 - step1[15] * (tran_high_t)cospi_2_64;
1928*fb1b10abSAndroid Build Coastguard Worker temp2 =
1929*fb1b10abSAndroid Build Coastguard Worker step1[8] * (tran_high_t)cospi_2_64 + step1[15] * (tran_high_t)cospi_30_64;
1930*fb1b10abSAndroid Build Coastguard Worker step2[8] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
1931*fb1b10abSAndroid Build Coastguard Worker step2[15] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
1932*fb1b10abSAndroid Build Coastguard Worker
1933*fb1b10abSAndroid Build Coastguard Worker temp1 = step1[9] * (tran_high_t)cospi_14_64 -
1934*fb1b10abSAndroid Build Coastguard Worker step1[14] * (tran_high_t)cospi_18_64;
1935*fb1b10abSAndroid Build Coastguard Worker temp2 = step1[9] * (tran_high_t)cospi_18_64 +
1936*fb1b10abSAndroid Build Coastguard Worker step1[14] * (tran_high_t)cospi_14_64;
1937*fb1b10abSAndroid Build Coastguard Worker step2[9] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
1938*fb1b10abSAndroid Build Coastguard Worker step2[14] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
1939*fb1b10abSAndroid Build Coastguard Worker
1940*fb1b10abSAndroid Build Coastguard Worker temp1 = step1[10] * (tran_high_t)cospi_22_64 -
1941*fb1b10abSAndroid Build Coastguard Worker step1[13] * (tran_high_t)cospi_10_64;
1942*fb1b10abSAndroid Build Coastguard Worker temp2 = step1[10] * (tran_high_t)cospi_10_64 +
1943*fb1b10abSAndroid Build Coastguard Worker step1[13] * (tran_high_t)cospi_22_64;
1944*fb1b10abSAndroid Build Coastguard Worker step2[10] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
1945*fb1b10abSAndroid Build Coastguard Worker step2[13] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
1946*fb1b10abSAndroid Build Coastguard Worker
1947*fb1b10abSAndroid Build Coastguard Worker temp1 = step1[11] * (tran_high_t)cospi_6_64 -
1948*fb1b10abSAndroid Build Coastguard Worker step1[12] * (tran_high_t)cospi_26_64;
1949*fb1b10abSAndroid Build Coastguard Worker temp2 = step1[11] * (tran_high_t)cospi_26_64 +
1950*fb1b10abSAndroid Build Coastguard Worker step1[12] * (tran_high_t)cospi_6_64;
1951*fb1b10abSAndroid Build Coastguard Worker step2[11] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
1952*fb1b10abSAndroid Build Coastguard Worker step2[12] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
1953*fb1b10abSAndroid Build Coastguard Worker
1954*fb1b10abSAndroid Build Coastguard Worker // stage 3
1955*fb1b10abSAndroid Build Coastguard Worker step1[0] = step2[0];
1956*fb1b10abSAndroid Build Coastguard Worker step1[1] = step2[1];
1957*fb1b10abSAndroid Build Coastguard Worker step1[2] = step2[2];
1958*fb1b10abSAndroid Build Coastguard Worker step1[3] = step2[3];
1959*fb1b10abSAndroid Build Coastguard Worker
1960*fb1b10abSAndroid Build Coastguard Worker temp1 =
1961*fb1b10abSAndroid Build Coastguard Worker step2[4] * (tran_high_t)cospi_28_64 - step2[7] * (tran_high_t)cospi_4_64;
1962*fb1b10abSAndroid Build Coastguard Worker temp2 =
1963*fb1b10abSAndroid Build Coastguard Worker step2[4] * (tran_high_t)cospi_4_64 + step2[7] * (tran_high_t)cospi_28_64;
1964*fb1b10abSAndroid Build Coastguard Worker step1[4] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
1965*fb1b10abSAndroid Build Coastguard Worker step1[7] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
1966*fb1b10abSAndroid Build Coastguard Worker temp1 =
1967*fb1b10abSAndroid Build Coastguard Worker step2[5] * (tran_high_t)cospi_12_64 - step2[6] * (tran_high_t)cospi_20_64;
1968*fb1b10abSAndroid Build Coastguard Worker temp2 =
1969*fb1b10abSAndroid Build Coastguard Worker step2[5] * (tran_high_t)cospi_20_64 + step2[6] * (tran_high_t)cospi_12_64;
1970*fb1b10abSAndroid Build Coastguard Worker step1[5] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
1971*fb1b10abSAndroid Build Coastguard Worker step1[6] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
1972*fb1b10abSAndroid Build Coastguard Worker
1973*fb1b10abSAndroid Build Coastguard Worker step1[8] = HIGHBD_WRAPLOW(step2[8] + step2[9], bd);
1974*fb1b10abSAndroid Build Coastguard Worker step1[9] = HIGHBD_WRAPLOW(step2[8] - step2[9], bd);
1975*fb1b10abSAndroid Build Coastguard Worker step1[10] = HIGHBD_WRAPLOW(-step2[10] + step2[11], bd);
1976*fb1b10abSAndroid Build Coastguard Worker step1[11] = HIGHBD_WRAPLOW(step2[10] + step2[11], bd);
1977*fb1b10abSAndroid Build Coastguard Worker step1[12] = HIGHBD_WRAPLOW(step2[12] + step2[13], bd);
1978*fb1b10abSAndroid Build Coastguard Worker step1[13] = HIGHBD_WRAPLOW(step2[12] - step2[13], bd);
1979*fb1b10abSAndroid Build Coastguard Worker step1[14] = HIGHBD_WRAPLOW(-step2[14] + step2[15], bd);
1980*fb1b10abSAndroid Build Coastguard Worker step1[15] = HIGHBD_WRAPLOW(step2[14] + step2[15], bd);
1981*fb1b10abSAndroid Build Coastguard Worker
1982*fb1b10abSAndroid Build Coastguard Worker // stage 4
1983*fb1b10abSAndroid Build Coastguard Worker temp1 = (step1[0] + step1[1]) * (tran_high_t)cospi_16_64;
1984*fb1b10abSAndroid Build Coastguard Worker temp2 = (step1[0] - step1[1]) * (tran_high_t)cospi_16_64;
1985*fb1b10abSAndroid Build Coastguard Worker step2[0] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
1986*fb1b10abSAndroid Build Coastguard Worker step2[1] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
1987*fb1b10abSAndroid Build Coastguard Worker temp1 =
1988*fb1b10abSAndroid Build Coastguard Worker step1[2] * (tran_high_t)cospi_24_64 - step1[3] * (tran_high_t)cospi_8_64;
1989*fb1b10abSAndroid Build Coastguard Worker temp2 =
1990*fb1b10abSAndroid Build Coastguard Worker step1[2] * (tran_high_t)cospi_8_64 + step1[3] * (tran_high_t)cospi_24_64;
1991*fb1b10abSAndroid Build Coastguard Worker step2[2] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
1992*fb1b10abSAndroid Build Coastguard Worker step2[3] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
1993*fb1b10abSAndroid Build Coastguard Worker step2[4] = HIGHBD_WRAPLOW(step1[4] + step1[5], bd);
1994*fb1b10abSAndroid Build Coastguard Worker step2[5] = HIGHBD_WRAPLOW(step1[4] - step1[5], bd);
1995*fb1b10abSAndroid Build Coastguard Worker step2[6] = HIGHBD_WRAPLOW(-step1[6] + step1[7], bd);
1996*fb1b10abSAndroid Build Coastguard Worker step2[7] = HIGHBD_WRAPLOW(step1[6] + step1[7], bd);
1997*fb1b10abSAndroid Build Coastguard Worker
1998*fb1b10abSAndroid Build Coastguard Worker step2[8] = step1[8];
1999*fb1b10abSAndroid Build Coastguard Worker step2[15] = step1[15];
2000*fb1b10abSAndroid Build Coastguard Worker temp1 = -step1[9] * (tran_high_t)cospi_8_64 +
2001*fb1b10abSAndroid Build Coastguard Worker step1[14] * (tran_high_t)cospi_24_64;
2002*fb1b10abSAndroid Build Coastguard Worker temp2 =
2003*fb1b10abSAndroid Build Coastguard Worker step1[9] * (tran_high_t)cospi_24_64 + step1[14] * (tran_high_t)cospi_8_64;
2004*fb1b10abSAndroid Build Coastguard Worker step2[9] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2005*fb1b10abSAndroid Build Coastguard Worker step2[14] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2006*fb1b10abSAndroid Build Coastguard Worker temp1 = -step1[10] * (tran_high_t)cospi_24_64 -
2007*fb1b10abSAndroid Build Coastguard Worker step1[13] * (tran_high_t)cospi_8_64;
2008*fb1b10abSAndroid Build Coastguard Worker temp2 = -step1[10] * (tran_high_t)cospi_8_64 +
2009*fb1b10abSAndroid Build Coastguard Worker step1[13] * (tran_high_t)cospi_24_64;
2010*fb1b10abSAndroid Build Coastguard Worker step2[10] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2011*fb1b10abSAndroid Build Coastguard Worker step2[13] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2012*fb1b10abSAndroid Build Coastguard Worker step2[11] = step1[11];
2013*fb1b10abSAndroid Build Coastguard Worker step2[12] = step1[12];
2014*fb1b10abSAndroid Build Coastguard Worker
2015*fb1b10abSAndroid Build Coastguard Worker // stage 5
2016*fb1b10abSAndroid Build Coastguard Worker step1[0] = HIGHBD_WRAPLOW(step2[0] + step2[3], bd);
2017*fb1b10abSAndroid Build Coastguard Worker step1[1] = HIGHBD_WRAPLOW(step2[1] + step2[2], bd);
2018*fb1b10abSAndroid Build Coastguard Worker step1[2] = HIGHBD_WRAPLOW(step2[1] - step2[2], bd);
2019*fb1b10abSAndroid Build Coastguard Worker step1[3] = HIGHBD_WRAPLOW(step2[0] - step2[3], bd);
2020*fb1b10abSAndroid Build Coastguard Worker step1[4] = step2[4];
2021*fb1b10abSAndroid Build Coastguard Worker temp1 = (step2[6] - step2[5]) * (tran_high_t)cospi_16_64;
2022*fb1b10abSAndroid Build Coastguard Worker temp2 = (step2[5] + step2[6]) * (tran_high_t)cospi_16_64;
2023*fb1b10abSAndroid Build Coastguard Worker step1[5] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2024*fb1b10abSAndroid Build Coastguard Worker step1[6] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2025*fb1b10abSAndroid Build Coastguard Worker step1[7] = step2[7];
2026*fb1b10abSAndroid Build Coastguard Worker
2027*fb1b10abSAndroid Build Coastguard Worker step1[8] = HIGHBD_WRAPLOW(step2[8] + step2[11], bd);
2028*fb1b10abSAndroid Build Coastguard Worker step1[9] = HIGHBD_WRAPLOW(step2[9] + step2[10], bd);
2029*fb1b10abSAndroid Build Coastguard Worker step1[10] = HIGHBD_WRAPLOW(step2[9] - step2[10], bd);
2030*fb1b10abSAndroid Build Coastguard Worker step1[11] = HIGHBD_WRAPLOW(step2[8] - step2[11], bd);
2031*fb1b10abSAndroid Build Coastguard Worker step1[12] = HIGHBD_WRAPLOW(-step2[12] + step2[15], bd);
2032*fb1b10abSAndroid Build Coastguard Worker step1[13] = HIGHBD_WRAPLOW(-step2[13] + step2[14], bd);
2033*fb1b10abSAndroid Build Coastguard Worker step1[14] = HIGHBD_WRAPLOW(step2[13] + step2[14], bd);
2034*fb1b10abSAndroid Build Coastguard Worker step1[15] = HIGHBD_WRAPLOW(step2[12] + step2[15], bd);
2035*fb1b10abSAndroid Build Coastguard Worker
2036*fb1b10abSAndroid Build Coastguard Worker // stage 6
2037*fb1b10abSAndroid Build Coastguard Worker step2[0] = HIGHBD_WRAPLOW(step1[0] + step1[7], bd);
2038*fb1b10abSAndroid Build Coastguard Worker step2[1] = HIGHBD_WRAPLOW(step1[1] + step1[6], bd);
2039*fb1b10abSAndroid Build Coastguard Worker step2[2] = HIGHBD_WRAPLOW(step1[2] + step1[5], bd);
2040*fb1b10abSAndroid Build Coastguard Worker step2[3] = HIGHBD_WRAPLOW(step1[3] + step1[4], bd);
2041*fb1b10abSAndroid Build Coastguard Worker step2[4] = HIGHBD_WRAPLOW(step1[3] - step1[4], bd);
2042*fb1b10abSAndroid Build Coastguard Worker step2[5] = HIGHBD_WRAPLOW(step1[2] - step1[5], bd);
2043*fb1b10abSAndroid Build Coastguard Worker step2[6] = HIGHBD_WRAPLOW(step1[1] - step1[6], bd);
2044*fb1b10abSAndroid Build Coastguard Worker step2[7] = HIGHBD_WRAPLOW(step1[0] - step1[7], bd);
2045*fb1b10abSAndroid Build Coastguard Worker step2[8] = step1[8];
2046*fb1b10abSAndroid Build Coastguard Worker step2[9] = step1[9];
2047*fb1b10abSAndroid Build Coastguard Worker temp1 = (-step1[10] + step1[13]) * (tran_high_t)cospi_16_64;
2048*fb1b10abSAndroid Build Coastguard Worker temp2 = (step1[10] + step1[13]) * (tran_high_t)cospi_16_64;
2049*fb1b10abSAndroid Build Coastguard Worker step2[10] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2050*fb1b10abSAndroid Build Coastguard Worker step2[13] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2051*fb1b10abSAndroid Build Coastguard Worker temp1 = (-step1[11] + step1[12]) * (tran_high_t)cospi_16_64;
2052*fb1b10abSAndroid Build Coastguard Worker temp2 = (step1[11] + step1[12]) * (tran_high_t)cospi_16_64;
2053*fb1b10abSAndroid Build Coastguard Worker step2[11] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2054*fb1b10abSAndroid Build Coastguard Worker step2[12] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2055*fb1b10abSAndroid Build Coastguard Worker step2[14] = step1[14];
2056*fb1b10abSAndroid Build Coastguard Worker step2[15] = step1[15];
2057*fb1b10abSAndroid Build Coastguard Worker
2058*fb1b10abSAndroid Build Coastguard Worker // stage 7
2059*fb1b10abSAndroid Build Coastguard Worker output[0] = HIGHBD_WRAPLOW(step2[0] + step2[15], bd);
2060*fb1b10abSAndroid Build Coastguard Worker output[1] = HIGHBD_WRAPLOW(step2[1] + step2[14], bd);
2061*fb1b10abSAndroid Build Coastguard Worker output[2] = HIGHBD_WRAPLOW(step2[2] + step2[13], bd);
2062*fb1b10abSAndroid Build Coastguard Worker output[3] = HIGHBD_WRAPLOW(step2[3] + step2[12], bd);
2063*fb1b10abSAndroid Build Coastguard Worker output[4] = HIGHBD_WRAPLOW(step2[4] + step2[11], bd);
2064*fb1b10abSAndroid Build Coastguard Worker output[5] = HIGHBD_WRAPLOW(step2[5] + step2[10], bd);
2065*fb1b10abSAndroid Build Coastguard Worker output[6] = HIGHBD_WRAPLOW(step2[6] + step2[9], bd);
2066*fb1b10abSAndroid Build Coastguard Worker output[7] = HIGHBD_WRAPLOW(step2[7] + step2[8], bd);
2067*fb1b10abSAndroid Build Coastguard Worker output[8] = HIGHBD_WRAPLOW(step2[7] - step2[8], bd);
2068*fb1b10abSAndroid Build Coastguard Worker output[9] = HIGHBD_WRAPLOW(step2[6] - step2[9], bd);
2069*fb1b10abSAndroid Build Coastguard Worker output[10] = HIGHBD_WRAPLOW(step2[5] - step2[10], bd);
2070*fb1b10abSAndroid Build Coastguard Worker output[11] = HIGHBD_WRAPLOW(step2[4] - step2[11], bd);
2071*fb1b10abSAndroid Build Coastguard Worker output[12] = HIGHBD_WRAPLOW(step2[3] - step2[12], bd);
2072*fb1b10abSAndroid Build Coastguard Worker output[13] = HIGHBD_WRAPLOW(step2[2] - step2[13], bd);
2073*fb1b10abSAndroid Build Coastguard Worker output[14] = HIGHBD_WRAPLOW(step2[1] - step2[14], bd);
2074*fb1b10abSAndroid Build Coastguard Worker output[15] = HIGHBD_WRAPLOW(step2[0] - step2[15], bd);
2075*fb1b10abSAndroid Build Coastguard Worker }
2076*fb1b10abSAndroid Build Coastguard Worker
vpx_highbd_idct16x16_256_add_c(const tran_low_t * input,uint16_t * dest,int stride,int bd)2077*fb1b10abSAndroid Build Coastguard Worker void vpx_highbd_idct16x16_256_add_c(const tran_low_t *input, uint16_t *dest,
2078*fb1b10abSAndroid Build Coastguard Worker int stride, int bd) {
2079*fb1b10abSAndroid Build Coastguard Worker int i, j;
2080*fb1b10abSAndroid Build Coastguard Worker tran_low_t out[16 * 16];
2081*fb1b10abSAndroid Build Coastguard Worker tran_low_t *outptr = out;
2082*fb1b10abSAndroid Build Coastguard Worker tran_low_t temp_in[16], temp_out[16];
2083*fb1b10abSAndroid Build Coastguard Worker
2084*fb1b10abSAndroid Build Coastguard Worker // First transform rows
2085*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 16; ++i) {
2086*fb1b10abSAndroid Build Coastguard Worker vpx_highbd_idct16_c(input, outptr, bd);
2087*fb1b10abSAndroid Build Coastguard Worker input += 16;
2088*fb1b10abSAndroid Build Coastguard Worker outptr += 16;
2089*fb1b10abSAndroid Build Coastguard Worker }
2090*fb1b10abSAndroid Build Coastguard Worker
2091*fb1b10abSAndroid Build Coastguard Worker // Then transform columns
2092*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 16; ++i) {
2093*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 16; ++j) temp_in[j] = out[j * 16 + i];
2094*fb1b10abSAndroid Build Coastguard Worker vpx_highbd_idct16_c(temp_in, temp_out, bd);
2095*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 16; ++j) {
2096*fb1b10abSAndroid Build Coastguard Worker dest[j * stride + i] = highbd_clip_pixel_add(
2097*fb1b10abSAndroid Build Coastguard Worker dest[j * stride + i], ROUND_POWER_OF_TWO(temp_out[j], 6), bd);
2098*fb1b10abSAndroid Build Coastguard Worker }
2099*fb1b10abSAndroid Build Coastguard Worker }
2100*fb1b10abSAndroid Build Coastguard Worker }
2101*fb1b10abSAndroid Build Coastguard Worker
vpx_highbd_idct16x16_38_add_c(const tran_low_t * input,uint16_t * dest,int stride,int bd)2102*fb1b10abSAndroid Build Coastguard Worker void vpx_highbd_idct16x16_38_add_c(const tran_low_t *input, uint16_t *dest,
2103*fb1b10abSAndroid Build Coastguard Worker int stride, int bd) {
2104*fb1b10abSAndroid Build Coastguard Worker int i, j;
2105*fb1b10abSAndroid Build Coastguard Worker tran_low_t out[16 * 16] = { 0 };
2106*fb1b10abSAndroid Build Coastguard Worker tran_low_t *outptr = out;
2107*fb1b10abSAndroid Build Coastguard Worker tran_low_t temp_in[16], temp_out[16];
2108*fb1b10abSAndroid Build Coastguard Worker
2109*fb1b10abSAndroid Build Coastguard Worker // First transform rows. Since all non-zero dct coefficients are in
2110*fb1b10abSAndroid Build Coastguard Worker // upper-left 8x8 area, we only need to calculate first 8 rows here.
2111*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 8; ++i) {
2112*fb1b10abSAndroid Build Coastguard Worker vpx_highbd_idct16_c(input, outptr, bd);
2113*fb1b10abSAndroid Build Coastguard Worker input += 16;
2114*fb1b10abSAndroid Build Coastguard Worker outptr += 16;
2115*fb1b10abSAndroid Build Coastguard Worker }
2116*fb1b10abSAndroid Build Coastguard Worker
2117*fb1b10abSAndroid Build Coastguard Worker // Then transform columns
2118*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 16; ++i) {
2119*fb1b10abSAndroid Build Coastguard Worker uint16_t *destT = dest;
2120*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 16; ++j) temp_in[j] = out[j * 16 + i];
2121*fb1b10abSAndroid Build Coastguard Worker vpx_highbd_idct16_c(temp_in, temp_out, bd);
2122*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 16; ++j) {
2123*fb1b10abSAndroid Build Coastguard Worker destT[i] = highbd_clip_pixel_add(destT[i],
2124*fb1b10abSAndroid Build Coastguard Worker ROUND_POWER_OF_TWO(temp_out[j], 6), bd);
2125*fb1b10abSAndroid Build Coastguard Worker destT += stride;
2126*fb1b10abSAndroid Build Coastguard Worker }
2127*fb1b10abSAndroid Build Coastguard Worker }
2128*fb1b10abSAndroid Build Coastguard Worker }
2129*fb1b10abSAndroid Build Coastguard Worker
vpx_highbd_idct16x16_10_add_c(const tran_low_t * input,uint16_t * dest,int stride,int bd)2130*fb1b10abSAndroid Build Coastguard Worker void vpx_highbd_idct16x16_10_add_c(const tran_low_t *input, uint16_t *dest,
2131*fb1b10abSAndroid Build Coastguard Worker int stride, int bd) {
2132*fb1b10abSAndroid Build Coastguard Worker int i, j;
2133*fb1b10abSAndroid Build Coastguard Worker tran_low_t out[16 * 16] = { 0 };
2134*fb1b10abSAndroid Build Coastguard Worker tran_low_t *outptr = out;
2135*fb1b10abSAndroid Build Coastguard Worker tran_low_t temp_in[16], temp_out[16];
2136*fb1b10abSAndroid Build Coastguard Worker
2137*fb1b10abSAndroid Build Coastguard Worker // First transform rows. Since all non-zero dct coefficients are in
2138*fb1b10abSAndroid Build Coastguard Worker // upper-left 4x4 area, we only need to calculate first 4 rows here.
2139*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 4; ++i) {
2140*fb1b10abSAndroid Build Coastguard Worker vpx_highbd_idct16_c(input, outptr, bd);
2141*fb1b10abSAndroid Build Coastguard Worker input += 16;
2142*fb1b10abSAndroid Build Coastguard Worker outptr += 16;
2143*fb1b10abSAndroid Build Coastguard Worker }
2144*fb1b10abSAndroid Build Coastguard Worker
2145*fb1b10abSAndroid Build Coastguard Worker // Then transform columns
2146*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 16; ++i) {
2147*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 16; ++j) temp_in[j] = out[j * 16 + i];
2148*fb1b10abSAndroid Build Coastguard Worker vpx_highbd_idct16_c(temp_in, temp_out, bd);
2149*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 16; ++j) {
2150*fb1b10abSAndroid Build Coastguard Worker dest[j * stride + i] = highbd_clip_pixel_add(
2151*fb1b10abSAndroid Build Coastguard Worker dest[j * stride + i], ROUND_POWER_OF_TWO(temp_out[j], 6), bd);
2152*fb1b10abSAndroid Build Coastguard Worker }
2153*fb1b10abSAndroid Build Coastguard Worker }
2154*fb1b10abSAndroid Build Coastguard Worker }
2155*fb1b10abSAndroid Build Coastguard Worker
vpx_highbd_idct16x16_1_add_c(const tran_low_t * input,uint16_t * dest,int stride,int bd)2156*fb1b10abSAndroid Build Coastguard Worker void vpx_highbd_idct16x16_1_add_c(const tran_low_t *input, uint16_t *dest,
2157*fb1b10abSAndroid Build Coastguard Worker int stride, int bd) {
2158*fb1b10abSAndroid Build Coastguard Worker int i, j;
2159*fb1b10abSAndroid Build Coastguard Worker tran_high_t a1;
2160*fb1b10abSAndroid Build Coastguard Worker tran_low_t out = HIGHBD_WRAPLOW(
2161*fb1b10abSAndroid Build Coastguard Worker dct_const_round_shift(input[0] * (tran_high_t)cospi_16_64), bd);
2162*fb1b10abSAndroid Build Coastguard Worker
2163*fb1b10abSAndroid Build Coastguard Worker out =
2164*fb1b10abSAndroid Build Coastguard Worker HIGHBD_WRAPLOW(dct_const_round_shift(out * (tran_high_t)cospi_16_64), bd);
2165*fb1b10abSAndroid Build Coastguard Worker a1 = ROUND_POWER_OF_TWO(out, 6);
2166*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 16; ++j) {
2167*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 16; ++i) dest[i] = highbd_clip_pixel_add(dest[i], a1, bd);
2168*fb1b10abSAndroid Build Coastguard Worker dest += stride;
2169*fb1b10abSAndroid Build Coastguard Worker }
2170*fb1b10abSAndroid Build Coastguard Worker }
2171*fb1b10abSAndroid Build Coastguard Worker
highbd_idct32_c(const tran_low_t * input,tran_low_t * output,int bd)2172*fb1b10abSAndroid Build Coastguard Worker static void highbd_idct32_c(const tran_low_t *input, tran_low_t *output,
2173*fb1b10abSAndroid Build Coastguard Worker int bd) {
2174*fb1b10abSAndroid Build Coastguard Worker tran_low_t step1[32], step2[32];
2175*fb1b10abSAndroid Build Coastguard Worker tran_high_t temp1, temp2;
2176*fb1b10abSAndroid Build Coastguard Worker (void)bd;
2177*fb1b10abSAndroid Build Coastguard Worker
2178*fb1b10abSAndroid Build Coastguard Worker if (detect_invalid_highbd_input(input, 32)) {
2179*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_COEFFICIENT_RANGE_CHECKING
2180*fb1b10abSAndroid Build Coastguard Worker assert(0 && "invalid highbd txfm input");
2181*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_COEFFICIENT_RANGE_CHECKING
2182*fb1b10abSAndroid Build Coastguard Worker memset(output, 0, sizeof(*output) * 32);
2183*fb1b10abSAndroid Build Coastguard Worker return;
2184*fb1b10abSAndroid Build Coastguard Worker }
2185*fb1b10abSAndroid Build Coastguard Worker
2186*fb1b10abSAndroid Build Coastguard Worker // stage 1
2187*fb1b10abSAndroid Build Coastguard Worker step1[0] = input[0];
2188*fb1b10abSAndroid Build Coastguard Worker step1[1] = input[16];
2189*fb1b10abSAndroid Build Coastguard Worker step1[2] = input[8];
2190*fb1b10abSAndroid Build Coastguard Worker step1[3] = input[24];
2191*fb1b10abSAndroid Build Coastguard Worker step1[4] = input[4];
2192*fb1b10abSAndroid Build Coastguard Worker step1[5] = input[20];
2193*fb1b10abSAndroid Build Coastguard Worker step1[6] = input[12];
2194*fb1b10abSAndroid Build Coastguard Worker step1[7] = input[28];
2195*fb1b10abSAndroid Build Coastguard Worker step1[8] = input[2];
2196*fb1b10abSAndroid Build Coastguard Worker step1[9] = input[18];
2197*fb1b10abSAndroid Build Coastguard Worker step1[10] = input[10];
2198*fb1b10abSAndroid Build Coastguard Worker step1[11] = input[26];
2199*fb1b10abSAndroid Build Coastguard Worker step1[12] = input[6];
2200*fb1b10abSAndroid Build Coastguard Worker step1[13] = input[22];
2201*fb1b10abSAndroid Build Coastguard Worker step1[14] = input[14];
2202*fb1b10abSAndroid Build Coastguard Worker step1[15] = input[30];
2203*fb1b10abSAndroid Build Coastguard Worker
2204*fb1b10abSAndroid Build Coastguard Worker temp1 =
2205*fb1b10abSAndroid Build Coastguard Worker input[1] * (tran_high_t)cospi_31_64 - input[31] * (tran_high_t)cospi_1_64;
2206*fb1b10abSAndroid Build Coastguard Worker temp2 =
2207*fb1b10abSAndroid Build Coastguard Worker input[1] * (tran_high_t)cospi_1_64 + input[31] * (tran_high_t)cospi_31_64;
2208*fb1b10abSAndroid Build Coastguard Worker step1[16] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2209*fb1b10abSAndroid Build Coastguard Worker step1[31] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2210*fb1b10abSAndroid Build Coastguard Worker
2211*fb1b10abSAndroid Build Coastguard Worker temp1 = input[17] * (tran_high_t)cospi_15_64 -
2212*fb1b10abSAndroid Build Coastguard Worker input[15] * (tran_high_t)cospi_17_64;
2213*fb1b10abSAndroid Build Coastguard Worker temp2 = input[17] * (tran_high_t)cospi_17_64 +
2214*fb1b10abSAndroid Build Coastguard Worker input[15] * (tran_high_t)cospi_15_64;
2215*fb1b10abSAndroid Build Coastguard Worker step1[17] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2216*fb1b10abSAndroid Build Coastguard Worker step1[30] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2217*fb1b10abSAndroid Build Coastguard Worker
2218*fb1b10abSAndroid Build Coastguard Worker temp1 =
2219*fb1b10abSAndroid Build Coastguard Worker input[9] * (tran_high_t)cospi_23_64 - input[23] * (tran_high_t)cospi_9_64;
2220*fb1b10abSAndroid Build Coastguard Worker temp2 =
2221*fb1b10abSAndroid Build Coastguard Worker input[9] * (tran_high_t)cospi_9_64 + input[23] * (tran_high_t)cospi_23_64;
2222*fb1b10abSAndroid Build Coastguard Worker step1[18] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2223*fb1b10abSAndroid Build Coastguard Worker step1[29] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2224*fb1b10abSAndroid Build Coastguard Worker
2225*fb1b10abSAndroid Build Coastguard Worker temp1 =
2226*fb1b10abSAndroid Build Coastguard Worker input[25] * (tran_high_t)cospi_7_64 - input[7] * (tran_high_t)cospi_25_64;
2227*fb1b10abSAndroid Build Coastguard Worker temp2 =
2228*fb1b10abSAndroid Build Coastguard Worker input[25] * (tran_high_t)cospi_25_64 + input[7] * (tran_high_t)cospi_7_64;
2229*fb1b10abSAndroid Build Coastguard Worker step1[19] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2230*fb1b10abSAndroid Build Coastguard Worker step1[28] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2231*fb1b10abSAndroid Build Coastguard Worker
2232*fb1b10abSAndroid Build Coastguard Worker temp1 =
2233*fb1b10abSAndroid Build Coastguard Worker input[5] * (tran_high_t)cospi_27_64 - input[27] * (tran_high_t)cospi_5_64;
2234*fb1b10abSAndroid Build Coastguard Worker temp2 =
2235*fb1b10abSAndroid Build Coastguard Worker input[5] * (tran_high_t)cospi_5_64 + input[27] * (tran_high_t)cospi_27_64;
2236*fb1b10abSAndroid Build Coastguard Worker step1[20] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2237*fb1b10abSAndroid Build Coastguard Worker step1[27] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2238*fb1b10abSAndroid Build Coastguard Worker
2239*fb1b10abSAndroid Build Coastguard Worker temp1 = input[21] * (tran_high_t)cospi_11_64 -
2240*fb1b10abSAndroid Build Coastguard Worker input[11] * (tran_high_t)cospi_21_64;
2241*fb1b10abSAndroid Build Coastguard Worker temp2 = input[21] * (tran_high_t)cospi_21_64 +
2242*fb1b10abSAndroid Build Coastguard Worker input[11] * (tran_high_t)cospi_11_64;
2243*fb1b10abSAndroid Build Coastguard Worker step1[21] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2244*fb1b10abSAndroid Build Coastguard Worker step1[26] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2245*fb1b10abSAndroid Build Coastguard Worker
2246*fb1b10abSAndroid Build Coastguard Worker temp1 = input[13] * (tran_high_t)cospi_19_64 -
2247*fb1b10abSAndroid Build Coastguard Worker input[19] * (tran_high_t)cospi_13_64;
2248*fb1b10abSAndroid Build Coastguard Worker temp2 = input[13] * (tran_high_t)cospi_13_64 +
2249*fb1b10abSAndroid Build Coastguard Worker input[19] * (tran_high_t)cospi_19_64;
2250*fb1b10abSAndroid Build Coastguard Worker step1[22] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2251*fb1b10abSAndroid Build Coastguard Worker step1[25] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2252*fb1b10abSAndroid Build Coastguard Worker
2253*fb1b10abSAndroid Build Coastguard Worker temp1 =
2254*fb1b10abSAndroid Build Coastguard Worker input[29] * (tran_high_t)cospi_3_64 - input[3] * (tran_high_t)cospi_29_64;
2255*fb1b10abSAndroid Build Coastguard Worker temp2 =
2256*fb1b10abSAndroid Build Coastguard Worker input[29] * (tran_high_t)cospi_29_64 + input[3] * (tran_high_t)cospi_3_64;
2257*fb1b10abSAndroid Build Coastguard Worker step1[23] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2258*fb1b10abSAndroid Build Coastguard Worker step1[24] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2259*fb1b10abSAndroid Build Coastguard Worker
2260*fb1b10abSAndroid Build Coastguard Worker // stage 2
2261*fb1b10abSAndroid Build Coastguard Worker step2[0] = step1[0];
2262*fb1b10abSAndroid Build Coastguard Worker step2[1] = step1[1];
2263*fb1b10abSAndroid Build Coastguard Worker step2[2] = step1[2];
2264*fb1b10abSAndroid Build Coastguard Worker step2[3] = step1[3];
2265*fb1b10abSAndroid Build Coastguard Worker step2[4] = step1[4];
2266*fb1b10abSAndroid Build Coastguard Worker step2[5] = step1[5];
2267*fb1b10abSAndroid Build Coastguard Worker step2[6] = step1[6];
2268*fb1b10abSAndroid Build Coastguard Worker step2[7] = step1[7];
2269*fb1b10abSAndroid Build Coastguard Worker
2270*fb1b10abSAndroid Build Coastguard Worker temp1 =
2271*fb1b10abSAndroid Build Coastguard Worker step1[8] * (tran_high_t)cospi_30_64 - step1[15] * (tran_high_t)cospi_2_64;
2272*fb1b10abSAndroid Build Coastguard Worker temp2 =
2273*fb1b10abSAndroid Build Coastguard Worker step1[8] * (tran_high_t)cospi_2_64 + step1[15] * (tran_high_t)cospi_30_64;
2274*fb1b10abSAndroid Build Coastguard Worker step2[8] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2275*fb1b10abSAndroid Build Coastguard Worker step2[15] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2276*fb1b10abSAndroid Build Coastguard Worker
2277*fb1b10abSAndroid Build Coastguard Worker temp1 = step1[9] * (tran_high_t)cospi_14_64 -
2278*fb1b10abSAndroid Build Coastguard Worker step1[14] * (tran_high_t)cospi_18_64;
2279*fb1b10abSAndroid Build Coastguard Worker temp2 = step1[9] * (tran_high_t)cospi_18_64 +
2280*fb1b10abSAndroid Build Coastguard Worker step1[14] * (tran_high_t)cospi_14_64;
2281*fb1b10abSAndroid Build Coastguard Worker step2[9] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2282*fb1b10abSAndroid Build Coastguard Worker step2[14] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2283*fb1b10abSAndroid Build Coastguard Worker
2284*fb1b10abSAndroid Build Coastguard Worker temp1 = step1[10] * (tran_high_t)cospi_22_64 -
2285*fb1b10abSAndroid Build Coastguard Worker step1[13] * (tran_high_t)cospi_10_64;
2286*fb1b10abSAndroid Build Coastguard Worker temp2 = step1[10] * (tran_high_t)cospi_10_64 +
2287*fb1b10abSAndroid Build Coastguard Worker step1[13] * (tran_high_t)cospi_22_64;
2288*fb1b10abSAndroid Build Coastguard Worker step2[10] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2289*fb1b10abSAndroid Build Coastguard Worker step2[13] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2290*fb1b10abSAndroid Build Coastguard Worker
2291*fb1b10abSAndroid Build Coastguard Worker temp1 = step1[11] * (tran_high_t)cospi_6_64 -
2292*fb1b10abSAndroid Build Coastguard Worker step1[12] * (tran_high_t)cospi_26_64;
2293*fb1b10abSAndroid Build Coastguard Worker temp2 = step1[11] * (tran_high_t)cospi_26_64 +
2294*fb1b10abSAndroid Build Coastguard Worker step1[12] * (tran_high_t)cospi_6_64;
2295*fb1b10abSAndroid Build Coastguard Worker step2[11] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2296*fb1b10abSAndroid Build Coastguard Worker step2[12] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2297*fb1b10abSAndroid Build Coastguard Worker
2298*fb1b10abSAndroid Build Coastguard Worker step2[16] = HIGHBD_WRAPLOW(step1[16] + step1[17], bd);
2299*fb1b10abSAndroid Build Coastguard Worker step2[17] = HIGHBD_WRAPLOW(step1[16] - step1[17], bd);
2300*fb1b10abSAndroid Build Coastguard Worker step2[18] = HIGHBD_WRAPLOW(-step1[18] + step1[19], bd);
2301*fb1b10abSAndroid Build Coastguard Worker step2[19] = HIGHBD_WRAPLOW(step1[18] + step1[19], bd);
2302*fb1b10abSAndroid Build Coastguard Worker step2[20] = HIGHBD_WRAPLOW(step1[20] + step1[21], bd);
2303*fb1b10abSAndroid Build Coastguard Worker step2[21] = HIGHBD_WRAPLOW(step1[20] - step1[21], bd);
2304*fb1b10abSAndroid Build Coastguard Worker step2[22] = HIGHBD_WRAPLOW(-step1[22] + step1[23], bd);
2305*fb1b10abSAndroid Build Coastguard Worker step2[23] = HIGHBD_WRAPLOW(step1[22] + step1[23], bd);
2306*fb1b10abSAndroid Build Coastguard Worker step2[24] = HIGHBD_WRAPLOW(step1[24] + step1[25], bd);
2307*fb1b10abSAndroid Build Coastguard Worker step2[25] = HIGHBD_WRAPLOW(step1[24] - step1[25], bd);
2308*fb1b10abSAndroid Build Coastguard Worker step2[26] = HIGHBD_WRAPLOW(-step1[26] + step1[27], bd);
2309*fb1b10abSAndroid Build Coastguard Worker step2[27] = HIGHBD_WRAPLOW(step1[26] + step1[27], bd);
2310*fb1b10abSAndroid Build Coastguard Worker step2[28] = HIGHBD_WRAPLOW(step1[28] + step1[29], bd);
2311*fb1b10abSAndroid Build Coastguard Worker step2[29] = HIGHBD_WRAPLOW(step1[28] - step1[29], bd);
2312*fb1b10abSAndroid Build Coastguard Worker step2[30] = HIGHBD_WRAPLOW(-step1[30] + step1[31], bd);
2313*fb1b10abSAndroid Build Coastguard Worker step2[31] = HIGHBD_WRAPLOW(step1[30] + step1[31], bd);
2314*fb1b10abSAndroid Build Coastguard Worker
2315*fb1b10abSAndroid Build Coastguard Worker // stage 3
2316*fb1b10abSAndroid Build Coastguard Worker step1[0] = step2[0];
2317*fb1b10abSAndroid Build Coastguard Worker step1[1] = step2[1];
2318*fb1b10abSAndroid Build Coastguard Worker step1[2] = step2[2];
2319*fb1b10abSAndroid Build Coastguard Worker step1[3] = step2[3];
2320*fb1b10abSAndroid Build Coastguard Worker
2321*fb1b10abSAndroid Build Coastguard Worker temp1 =
2322*fb1b10abSAndroid Build Coastguard Worker step2[4] * (tran_high_t)cospi_28_64 - step2[7] * (tran_high_t)cospi_4_64;
2323*fb1b10abSAndroid Build Coastguard Worker temp2 =
2324*fb1b10abSAndroid Build Coastguard Worker step2[4] * (tran_high_t)cospi_4_64 + step2[7] * (tran_high_t)cospi_28_64;
2325*fb1b10abSAndroid Build Coastguard Worker step1[4] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2326*fb1b10abSAndroid Build Coastguard Worker step1[7] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2327*fb1b10abSAndroid Build Coastguard Worker temp1 =
2328*fb1b10abSAndroid Build Coastguard Worker step2[5] * (tran_high_t)cospi_12_64 - step2[6] * (tran_high_t)cospi_20_64;
2329*fb1b10abSAndroid Build Coastguard Worker temp2 =
2330*fb1b10abSAndroid Build Coastguard Worker step2[5] * (tran_high_t)cospi_20_64 + step2[6] * (tran_high_t)cospi_12_64;
2331*fb1b10abSAndroid Build Coastguard Worker step1[5] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2332*fb1b10abSAndroid Build Coastguard Worker step1[6] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2333*fb1b10abSAndroid Build Coastguard Worker
2334*fb1b10abSAndroid Build Coastguard Worker step1[8] = HIGHBD_WRAPLOW(step2[8] + step2[9], bd);
2335*fb1b10abSAndroid Build Coastguard Worker step1[9] = HIGHBD_WRAPLOW(step2[8] - step2[9], bd);
2336*fb1b10abSAndroid Build Coastguard Worker step1[10] = HIGHBD_WRAPLOW(-step2[10] + step2[11], bd);
2337*fb1b10abSAndroid Build Coastguard Worker step1[11] = HIGHBD_WRAPLOW(step2[10] + step2[11], bd);
2338*fb1b10abSAndroid Build Coastguard Worker step1[12] = HIGHBD_WRAPLOW(step2[12] + step2[13], bd);
2339*fb1b10abSAndroid Build Coastguard Worker step1[13] = HIGHBD_WRAPLOW(step2[12] - step2[13], bd);
2340*fb1b10abSAndroid Build Coastguard Worker step1[14] = HIGHBD_WRAPLOW(-step2[14] + step2[15], bd);
2341*fb1b10abSAndroid Build Coastguard Worker step1[15] = HIGHBD_WRAPLOW(step2[14] + step2[15], bd);
2342*fb1b10abSAndroid Build Coastguard Worker
2343*fb1b10abSAndroid Build Coastguard Worker step1[16] = step2[16];
2344*fb1b10abSAndroid Build Coastguard Worker step1[31] = step2[31];
2345*fb1b10abSAndroid Build Coastguard Worker temp1 = -step2[17] * (tran_high_t)cospi_4_64 +
2346*fb1b10abSAndroid Build Coastguard Worker step2[30] * (tran_high_t)cospi_28_64;
2347*fb1b10abSAndroid Build Coastguard Worker temp2 = step2[17] * (tran_high_t)cospi_28_64 +
2348*fb1b10abSAndroid Build Coastguard Worker step2[30] * (tran_high_t)cospi_4_64;
2349*fb1b10abSAndroid Build Coastguard Worker step1[17] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2350*fb1b10abSAndroid Build Coastguard Worker step1[30] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2351*fb1b10abSAndroid Build Coastguard Worker temp1 = -step2[18] * (tran_high_t)cospi_28_64 -
2352*fb1b10abSAndroid Build Coastguard Worker step2[29] * (tran_high_t)cospi_4_64;
2353*fb1b10abSAndroid Build Coastguard Worker temp2 = -step2[18] * (tran_high_t)cospi_4_64 +
2354*fb1b10abSAndroid Build Coastguard Worker step2[29] * (tran_high_t)cospi_28_64;
2355*fb1b10abSAndroid Build Coastguard Worker step1[18] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2356*fb1b10abSAndroid Build Coastguard Worker step1[29] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2357*fb1b10abSAndroid Build Coastguard Worker step1[19] = step2[19];
2358*fb1b10abSAndroid Build Coastguard Worker step1[20] = step2[20];
2359*fb1b10abSAndroid Build Coastguard Worker temp1 = -step2[21] * (tran_high_t)cospi_20_64 +
2360*fb1b10abSAndroid Build Coastguard Worker step2[26] * (tran_high_t)cospi_12_64;
2361*fb1b10abSAndroid Build Coastguard Worker temp2 = step2[21] * (tran_high_t)cospi_12_64 +
2362*fb1b10abSAndroid Build Coastguard Worker step2[26] * (tran_high_t)cospi_20_64;
2363*fb1b10abSAndroid Build Coastguard Worker step1[21] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2364*fb1b10abSAndroid Build Coastguard Worker step1[26] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2365*fb1b10abSAndroid Build Coastguard Worker temp1 = -step2[22] * (tran_high_t)cospi_12_64 -
2366*fb1b10abSAndroid Build Coastguard Worker step2[25] * (tran_high_t)cospi_20_64;
2367*fb1b10abSAndroid Build Coastguard Worker temp2 = -step2[22] * (tran_high_t)cospi_20_64 +
2368*fb1b10abSAndroid Build Coastguard Worker step2[25] * (tran_high_t)cospi_12_64;
2369*fb1b10abSAndroid Build Coastguard Worker step1[22] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2370*fb1b10abSAndroid Build Coastguard Worker step1[25] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2371*fb1b10abSAndroid Build Coastguard Worker step1[23] = step2[23];
2372*fb1b10abSAndroid Build Coastguard Worker step1[24] = step2[24];
2373*fb1b10abSAndroid Build Coastguard Worker step1[27] = step2[27];
2374*fb1b10abSAndroid Build Coastguard Worker step1[28] = step2[28];
2375*fb1b10abSAndroid Build Coastguard Worker
2376*fb1b10abSAndroid Build Coastguard Worker // stage 4
2377*fb1b10abSAndroid Build Coastguard Worker temp1 = (step1[0] + step1[1]) * (tran_high_t)cospi_16_64;
2378*fb1b10abSAndroid Build Coastguard Worker temp2 = (step1[0] - step1[1]) * (tran_high_t)cospi_16_64;
2379*fb1b10abSAndroid Build Coastguard Worker step2[0] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2380*fb1b10abSAndroid Build Coastguard Worker step2[1] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2381*fb1b10abSAndroid Build Coastguard Worker temp1 =
2382*fb1b10abSAndroid Build Coastguard Worker step1[2] * (tran_high_t)cospi_24_64 - step1[3] * (tran_high_t)cospi_8_64;
2383*fb1b10abSAndroid Build Coastguard Worker temp2 =
2384*fb1b10abSAndroid Build Coastguard Worker step1[2] * (tran_high_t)cospi_8_64 + step1[3] * (tran_high_t)cospi_24_64;
2385*fb1b10abSAndroid Build Coastguard Worker step2[2] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2386*fb1b10abSAndroid Build Coastguard Worker step2[3] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2387*fb1b10abSAndroid Build Coastguard Worker step2[4] = HIGHBD_WRAPLOW(step1[4] + step1[5], bd);
2388*fb1b10abSAndroid Build Coastguard Worker step2[5] = HIGHBD_WRAPLOW(step1[4] - step1[5], bd);
2389*fb1b10abSAndroid Build Coastguard Worker step2[6] = HIGHBD_WRAPLOW(-step1[6] + step1[7], bd);
2390*fb1b10abSAndroid Build Coastguard Worker step2[7] = HIGHBD_WRAPLOW(step1[6] + step1[7], bd);
2391*fb1b10abSAndroid Build Coastguard Worker
2392*fb1b10abSAndroid Build Coastguard Worker step2[8] = step1[8];
2393*fb1b10abSAndroid Build Coastguard Worker step2[15] = step1[15];
2394*fb1b10abSAndroid Build Coastguard Worker temp1 = -step1[9] * (tran_high_t)cospi_8_64 +
2395*fb1b10abSAndroid Build Coastguard Worker step1[14] * (tran_high_t)cospi_24_64;
2396*fb1b10abSAndroid Build Coastguard Worker temp2 =
2397*fb1b10abSAndroid Build Coastguard Worker step1[9] * (tran_high_t)cospi_24_64 + step1[14] * (tran_high_t)cospi_8_64;
2398*fb1b10abSAndroid Build Coastguard Worker step2[9] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2399*fb1b10abSAndroid Build Coastguard Worker step2[14] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2400*fb1b10abSAndroid Build Coastguard Worker temp1 = -step1[10] * (tran_high_t)cospi_24_64 -
2401*fb1b10abSAndroid Build Coastguard Worker step1[13] * (tran_high_t)cospi_8_64;
2402*fb1b10abSAndroid Build Coastguard Worker temp2 = -step1[10] * (tran_high_t)cospi_8_64 +
2403*fb1b10abSAndroid Build Coastguard Worker step1[13] * (tran_high_t)cospi_24_64;
2404*fb1b10abSAndroid Build Coastguard Worker step2[10] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2405*fb1b10abSAndroid Build Coastguard Worker step2[13] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2406*fb1b10abSAndroid Build Coastguard Worker step2[11] = step1[11];
2407*fb1b10abSAndroid Build Coastguard Worker step2[12] = step1[12];
2408*fb1b10abSAndroid Build Coastguard Worker
2409*fb1b10abSAndroid Build Coastguard Worker step2[16] = HIGHBD_WRAPLOW(step1[16] + step1[19], bd);
2410*fb1b10abSAndroid Build Coastguard Worker step2[17] = HIGHBD_WRAPLOW(step1[17] + step1[18], bd);
2411*fb1b10abSAndroid Build Coastguard Worker step2[18] = HIGHBD_WRAPLOW(step1[17] - step1[18], bd);
2412*fb1b10abSAndroid Build Coastguard Worker step2[19] = HIGHBD_WRAPLOW(step1[16] - step1[19], bd);
2413*fb1b10abSAndroid Build Coastguard Worker step2[20] = HIGHBD_WRAPLOW(-step1[20] + step1[23], bd);
2414*fb1b10abSAndroid Build Coastguard Worker step2[21] = HIGHBD_WRAPLOW(-step1[21] + step1[22], bd);
2415*fb1b10abSAndroid Build Coastguard Worker step2[22] = HIGHBD_WRAPLOW(step1[21] + step1[22], bd);
2416*fb1b10abSAndroid Build Coastguard Worker step2[23] = HIGHBD_WRAPLOW(step1[20] + step1[23], bd);
2417*fb1b10abSAndroid Build Coastguard Worker
2418*fb1b10abSAndroid Build Coastguard Worker step2[24] = HIGHBD_WRAPLOW(step1[24] + step1[27], bd);
2419*fb1b10abSAndroid Build Coastguard Worker step2[25] = HIGHBD_WRAPLOW(step1[25] + step1[26], bd);
2420*fb1b10abSAndroid Build Coastguard Worker step2[26] = HIGHBD_WRAPLOW(step1[25] - step1[26], bd);
2421*fb1b10abSAndroid Build Coastguard Worker step2[27] = HIGHBD_WRAPLOW(step1[24] - step1[27], bd);
2422*fb1b10abSAndroid Build Coastguard Worker step2[28] = HIGHBD_WRAPLOW(-step1[28] + step1[31], bd);
2423*fb1b10abSAndroid Build Coastguard Worker step2[29] = HIGHBD_WRAPLOW(-step1[29] + step1[30], bd);
2424*fb1b10abSAndroid Build Coastguard Worker step2[30] = HIGHBD_WRAPLOW(step1[29] + step1[30], bd);
2425*fb1b10abSAndroid Build Coastguard Worker step2[31] = HIGHBD_WRAPLOW(step1[28] + step1[31], bd);
2426*fb1b10abSAndroid Build Coastguard Worker
2427*fb1b10abSAndroid Build Coastguard Worker // stage 5
2428*fb1b10abSAndroid Build Coastguard Worker step1[0] = HIGHBD_WRAPLOW(step2[0] + step2[3], bd);
2429*fb1b10abSAndroid Build Coastguard Worker step1[1] = HIGHBD_WRAPLOW(step2[1] + step2[2], bd);
2430*fb1b10abSAndroid Build Coastguard Worker step1[2] = HIGHBD_WRAPLOW(step2[1] - step2[2], bd);
2431*fb1b10abSAndroid Build Coastguard Worker step1[3] = HIGHBD_WRAPLOW(step2[0] - step2[3], bd);
2432*fb1b10abSAndroid Build Coastguard Worker step1[4] = step2[4];
2433*fb1b10abSAndroid Build Coastguard Worker temp1 = (step2[6] - step2[5]) * (tran_high_t)cospi_16_64;
2434*fb1b10abSAndroid Build Coastguard Worker temp2 = (step2[5] + step2[6]) * (tran_high_t)cospi_16_64;
2435*fb1b10abSAndroid Build Coastguard Worker step1[5] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2436*fb1b10abSAndroid Build Coastguard Worker step1[6] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2437*fb1b10abSAndroid Build Coastguard Worker step1[7] = step2[7];
2438*fb1b10abSAndroid Build Coastguard Worker
2439*fb1b10abSAndroid Build Coastguard Worker step1[8] = HIGHBD_WRAPLOW(step2[8] + step2[11], bd);
2440*fb1b10abSAndroid Build Coastguard Worker step1[9] = HIGHBD_WRAPLOW(step2[9] + step2[10], bd);
2441*fb1b10abSAndroid Build Coastguard Worker step1[10] = HIGHBD_WRAPLOW(step2[9] - step2[10], bd);
2442*fb1b10abSAndroid Build Coastguard Worker step1[11] = HIGHBD_WRAPLOW(step2[8] - step2[11], bd);
2443*fb1b10abSAndroid Build Coastguard Worker step1[12] = HIGHBD_WRAPLOW(-step2[12] + step2[15], bd);
2444*fb1b10abSAndroid Build Coastguard Worker step1[13] = HIGHBD_WRAPLOW(-step2[13] + step2[14], bd);
2445*fb1b10abSAndroid Build Coastguard Worker step1[14] = HIGHBD_WRAPLOW(step2[13] + step2[14], bd);
2446*fb1b10abSAndroid Build Coastguard Worker step1[15] = HIGHBD_WRAPLOW(step2[12] + step2[15], bd);
2447*fb1b10abSAndroid Build Coastguard Worker
2448*fb1b10abSAndroid Build Coastguard Worker step1[16] = step2[16];
2449*fb1b10abSAndroid Build Coastguard Worker step1[17] = step2[17];
2450*fb1b10abSAndroid Build Coastguard Worker temp1 = -step2[18] * (tran_high_t)cospi_8_64 +
2451*fb1b10abSAndroid Build Coastguard Worker step2[29] * (tran_high_t)cospi_24_64;
2452*fb1b10abSAndroid Build Coastguard Worker temp2 = step2[18] * (tran_high_t)cospi_24_64 +
2453*fb1b10abSAndroid Build Coastguard Worker step2[29] * (tran_high_t)cospi_8_64;
2454*fb1b10abSAndroid Build Coastguard Worker step1[18] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2455*fb1b10abSAndroid Build Coastguard Worker step1[29] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2456*fb1b10abSAndroid Build Coastguard Worker temp1 = -step2[19] * (tran_high_t)cospi_8_64 +
2457*fb1b10abSAndroid Build Coastguard Worker step2[28] * (tran_high_t)cospi_24_64;
2458*fb1b10abSAndroid Build Coastguard Worker temp2 = step2[19] * (tran_high_t)cospi_24_64 +
2459*fb1b10abSAndroid Build Coastguard Worker step2[28] * (tran_high_t)cospi_8_64;
2460*fb1b10abSAndroid Build Coastguard Worker step1[19] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2461*fb1b10abSAndroid Build Coastguard Worker step1[28] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2462*fb1b10abSAndroid Build Coastguard Worker temp1 = -step2[20] * (tran_high_t)cospi_24_64 -
2463*fb1b10abSAndroid Build Coastguard Worker step2[27] * (tran_high_t)cospi_8_64;
2464*fb1b10abSAndroid Build Coastguard Worker temp2 = -step2[20] * (tran_high_t)cospi_8_64 +
2465*fb1b10abSAndroid Build Coastguard Worker step2[27] * (tran_high_t)cospi_24_64;
2466*fb1b10abSAndroid Build Coastguard Worker step1[20] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2467*fb1b10abSAndroid Build Coastguard Worker step1[27] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2468*fb1b10abSAndroid Build Coastguard Worker temp1 = -step2[21] * (tran_high_t)cospi_24_64 -
2469*fb1b10abSAndroid Build Coastguard Worker step2[26] * (tran_high_t)cospi_8_64;
2470*fb1b10abSAndroid Build Coastguard Worker temp2 = -step2[21] * (tran_high_t)cospi_8_64 +
2471*fb1b10abSAndroid Build Coastguard Worker step2[26] * (tran_high_t)cospi_24_64;
2472*fb1b10abSAndroid Build Coastguard Worker step1[21] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2473*fb1b10abSAndroid Build Coastguard Worker step1[26] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2474*fb1b10abSAndroid Build Coastguard Worker step1[22] = step2[22];
2475*fb1b10abSAndroid Build Coastguard Worker step1[23] = step2[23];
2476*fb1b10abSAndroid Build Coastguard Worker step1[24] = step2[24];
2477*fb1b10abSAndroid Build Coastguard Worker step1[25] = step2[25];
2478*fb1b10abSAndroid Build Coastguard Worker step1[30] = step2[30];
2479*fb1b10abSAndroid Build Coastguard Worker step1[31] = step2[31];
2480*fb1b10abSAndroid Build Coastguard Worker
2481*fb1b10abSAndroid Build Coastguard Worker // stage 6
2482*fb1b10abSAndroid Build Coastguard Worker step2[0] = HIGHBD_WRAPLOW(step1[0] + step1[7], bd);
2483*fb1b10abSAndroid Build Coastguard Worker step2[1] = HIGHBD_WRAPLOW(step1[1] + step1[6], bd);
2484*fb1b10abSAndroid Build Coastguard Worker step2[2] = HIGHBD_WRAPLOW(step1[2] + step1[5], bd);
2485*fb1b10abSAndroid Build Coastguard Worker step2[3] = HIGHBD_WRAPLOW(step1[3] + step1[4], bd);
2486*fb1b10abSAndroid Build Coastguard Worker step2[4] = HIGHBD_WRAPLOW(step1[3] - step1[4], bd);
2487*fb1b10abSAndroid Build Coastguard Worker step2[5] = HIGHBD_WRAPLOW(step1[2] - step1[5], bd);
2488*fb1b10abSAndroid Build Coastguard Worker step2[6] = HIGHBD_WRAPLOW(step1[1] - step1[6], bd);
2489*fb1b10abSAndroid Build Coastguard Worker step2[7] = HIGHBD_WRAPLOW(step1[0] - step1[7], bd);
2490*fb1b10abSAndroid Build Coastguard Worker step2[8] = step1[8];
2491*fb1b10abSAndroid Build Coastguard Worker step2[9] = step1[9];
2492*fb1b10abSAndroid Build Coastguard Worker temp1 = (-step1[10] + step1[13]) * (tran_high_t)cospi_16_64;
2493*fb1b10abSAndroid Build Coastguard Worker temp2 = (step1[10] + step1[13]) * (tran_high_t)cospi_16_64;
2494*fb1b10abSAndroid Build Coastguard Worker step2[10] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2495*fb1b10abSAndroid Build Coastguard Worker step2[13] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2496*fb1b10abSAndroid Build Coastguard Worker temp1 = (-step1[11] + step1[12]) * (tran_high_t)cospi_16_64;
2497*fb1b10abSAndroid Build Coastguard Worker temp2 = (step1[11] + step1[12]) * (tran_high_t)cospi_16_64;
2498*fb1b10abSAndroid Build Coastguard Worker step2[11] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2499*fb1b10abSAndroid Build Coastguard Worker step2[12] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2500*fb1b10abSAndroid Build Coastguard Worker step2[14] = step1[14];
2501*fb1b10abSAndroid Build Coastguard Worker step2[15] = step1[15];
2502*fb1b10abSAndroid Build Coastguard Worker
2503*fb1b10abSAndroid Build Coastguard Worker step2[16] = HIGHBD_WRAPLOW(step1[16] + step1[23], bd);
2504*fb1b10abSAndroid Build Coastguard Worker step2[17] = HIGHBD_WRAPLOW(step1[17] + step1[22], bd);
2505*fb1b10abSAndroid Build Coastguard Worker step2[18] = HIGHBD_WRAPLOW(step1[18] + step1[21], bd);
2506*fb1b10abSAndroid Build Coastguard Worker step2[19] = HIGHBD_WRAPLOW(step1[19] + step1[20], bd);
2507*fb1b10abSAndroid Build Coastguard Worker step2[20] = HIGHBD_WRAPLOW(step1[19] - step1[20], bd);
2508*fb1b10abSAndroid Build Coastguard Worker step2[21] = HIGHBD_WRAPLOW(step1[18] - step1[21], bd);
2509*fb1b10abSAndroid Build Coastguard Worker step2[22] = HIGHBD_WRAPLOW(step1[17] - step1[22], bd);
2510*fb1b10abSAndroid Build Coastguard Worker step2[23] = HIGHBD_WRAPLOW(step1[16] - step1[23], bd);
2511*fb1b10abSAndroid Build Coastguard Worker
2512*fb1b10abSAndroid Build Coastguard Worker step2[24] = HIGHBD_WRAPLOW(-step1[24] + step1[31], bd);
2513*fb1b10abSAndroid Build Coastguard Worker step2[25] = HIGHBD_WRAPLOW(-step1[25] + step1[30], bd);
2514*fb1b10abSAndroid Build Coastguard Worker step2[26] = HIGHBD_WRAPLOW(-step1[26] + step1[29], bd);
2515*fb1b10abSAndroid Build Coastguard Worker step2[27] = HIGHBD_WRAPLOW(-step1[27] + step1[28], bd);
2516*fb1b10abSAndroid Build Coastguard Worker step2[28] = HIGHBD_WRAPLOW(step1[27] + step1[28], bd);
2517*fb1b10abSAndroid Build Coastguard Worker step2[29] = HIGHBD_WRAPLOW(step1[26] + step1[29], bd);
2518*fb1b10abSAndroid Build Coastguard Worker step2[30] = HIGHBD_WRAPLOW(step1[25] + step1[30], bd);
2519*fb1b10abSAndroid Build Coastguard Worker step2[31] = HIGHBD_WRAPLOW(step1[24] + step1[31], bd);
2520*fb1b10abSAndroid Build Coastguard Worker
2521*fb1b10abSAndroid Build Coastguard Worker // stage 7
2522*fb1b10abSAndroid Build Coastguard Worker step1[0] = HIGHBD_WRAPLOW(step2[0] + step2[15], bd);
2523*fb1b10abSAndroid Build Coastguard Worker step1[1] = HIGHBD_WRAPLOW(step2[1] + step2[14], bd);
2524*fb1b10abSAndroid Build Coastguard Worker step1[2] = HIGHBD_WRAPLOW(step2[2] + step2[13], bd);
2525*fb1b10abSAndroid Build Coastguard Worker step1[3] = HIGHBD_WRAPLOW(step2[3] + step2[12], bd);
2526*fb1b10abSAndroid Build Coastguard Worker step1[4] = HIGHBD_WRAPLOW(step2[4] + step2[11], bd);
2527*fb1b10abSAndroid Build Coastguard Worker step1[5] = HIGHBD_WRAPLOW(step2[5] + step2[10], bd);
2528*fb1b10abSAndroid Build Coastguard Worker step1[6] = HIGHBD_WRAPLOW(step2[6] + step2[9], bd);
2529*fb1b10abSAndroid Build Coastguard Worker step1[7] = HIGHBD_WRAPLOW(step2[7] + step2[8], bd);
2530*fb1b10abSAndroid Build Coastguard Worker step1[8] = HIGHBD_WRAPLOW(step2[7] - step2[8], bd);
2531*fb1b10abSAndroid Build Coastguard Worker step1[9] = HIGHBD_WRAPLOW(step2[6] - step2[9], bd);
2532*fb1b10abSAndroid Build Coastguard Worker step1[10] = HIGHBD_WRAPLOW(step2[5] - step2[10], bd);
2533*fb1b10abSAndroid Build Coastguard Worker step1[11] = HIGHBD_WRAPLOW(step2[4] - step2[11], bd);
2534*fb1b10abSAndroid Build Coastguard Worker step1[12] = HIGHBD_WRAPLOW(step2[3] - step2[12], bd);
2535*fb1b10abSAndroid Build Coastguard Worker step1[13] = HIGHBD_WRAPLOW(step2[2] - step2[13], bd);
2536*fb1b10abSAndroid Build Coastguard Worker step1[14] = HIGHBD_WRAPLOW(step2[1] - step2[14], bd);
2537*fb1b10abSAndroid Build Coastguard Worker step1[15] = HIGHBD_WRAPLOW(step2[0] - step2[15], bd);
2538*fb1b10abSAndroid Build Coastguard Worker
2539*fb1b10abSAndroid Build Coastguard Worker step1[16] = step2[16];
2540*fb1b10abSAndroid Build Coastguard Worker step1[17] = step2[17];
2541*fb1b10abSAndroid Build Coastguard Worker step1[18] = step2[18];
2542*fb1b10abSAndroid Build Coastguard Worker step1[19] = step2[19];
2543*fb1b10abSAndroid Build Coastguard Worker temp1 = (-step2[20] + step2[27]) * (tran_high_t)cospi_16_64;
2544*fb1b10abSAndroid Build Coastguard Worker temp2 = (step2[20] + step2[27]) * (tran_high_t)cospi_16_64;
2545*fb1b10abSAndroid Build Coastguard Worker step1[20] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2546*fb1b10abSAndroid Build Coastguard Worker step1[27] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2547*fb1b10abSAndroid Build Coastguard Worker temp1 = (-step2[21] + step2[26]) * (tran_high_t)cospi_16_64;
2548*fb1b10abSAndroid Build Coastguard Worker temp2 = (step2[21] + step2[26]) * (tran_high_t)cospi_16_64;
2549*fb1b10abSAndroid Build Coastguard Worker step1[21] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2550*fb1b10abSAndroid Build Coastguard Worker step1[26] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2551*fb1b10abSAndroid Build Coastguard Worker temp1 = (-step2[22] + step2[25]) * (tran_high_t)cospi_16_64;
2552*fb1b10abSAndroid Build Coastguard Worker temp2 = (step2[22] + step2[25]) * (tran_high_t)cospi_16_64;
2553*fb1b10abSAndroid Build Coastguard Worker step1[22] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2554*fb1b10abSAndroid Build Coastguard Worker step1[25] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2555*fb1b10abSAndroid Build Coastguard Worker temp1 = (-step2[23] + step2[24]) * (tran_high_t)cospi_16_64;
2556*fb1b10abSAndroid Build Coastguard Worker temp2 = (step2[23] + step2[24]) * (tran_high_t)cospi_16_64;
2557*fb1b10abSAndroid Build Coastguard Worker step1[23] = HIGHBD_WRAPLOW(dct_const_round_shift(temp1), bd);
2558*fb1b10abSAndroid Build Coastguard Worker step1[24] = HIGHBD_WRAPLOW(dct_const_round_shift(temp2), bd);
2559*fb1b10abSAndroid Build Coastguard Worker step1[28] = step2[28];
2560*fb1b10abSAndroid Build Coastguard Worker step1[29] = step2[29];
2561*fb1b10abSAndroid Build Coastguard Worker step1[30] = step2[30];
2562*fb1b10abSAndroid Build Coastguard Worker step1[31] = step2[31];
2563*fb1b10abSAndroid Build Coastguard Worker
2564*fb1b10abSAndroid Build Coastguard Worker // final stage
2565*fb1b10abSAndroid Build Coastguard Worker output[0] = HIGHBD_WRAPLOW(step1[0] + step1[31], bd);
2566*fb1b10abSAndroid Build Coastguard Worker output[1] = HIGHBD_WRAPLOW(step1[1] + step1[30], bd);
2567*fb1b10abSAndroid Build Coastguard Worker output[2] = HIGHBD_WRAPLOW(step1[2] + step1[29], bd);
2568*fb1b10abSAndroid Build Coastguard Worker output[3] = HIGHBD_WRAPLOW(step1[3] + step1[28], bd);
2569*fb1b10abSAndroid Build Coastguard Worker output[4] = HIGHBD_WRAPLOW(step1[4] + step1[27], bd);
2570*fb1b10abSAndroid Build Coastguard Worker output[5] = HIGHBD_WRAPLOW(step1[5] + step1[26], bd);
2571*fb1b10abSAndroid Build Coastguard Worker output[6] = HIGHBD_WRAPLOW(step1[6] + step1[25], bd);
2572*fb1b10abSAndroid Build Coastguard Worker output[7] = HIGHBD_WRAPLOW(step1[7] + step1[24], bd);
2573*fb1b10abSAndroid Build Coastguard Worker output[8] = HIGHBD_WRAPLOW(step1[8] + step1[23], bd);
2574*fb1b10abSAndroid Build Coastguard Worker output[9] = HIGHBD_WRAPLOW(step1[9] + step1[22], bd);
2575*fb1b10abSAndroid Build Coastguard Worker output[10] = HIGHBD_WRAPLOW(step1[10] + step1[21], bd);
2576*fb1b10abSAndroid Build Coastguard Worker output[11] = HIGHBD_WRAPLOW(step1[11] + step1[20], bd);
2577*fb1b10abSAndroid Build Coastguard Worker output[12] = HIGHBD_WRAPLOW(step1[12] + step1[19], bd);
2578*fb1b10abSAndroid Build Coastguard Worker output[13] = HIGHBD_WRAPLOW(step1[13] + step1[18], bd);
2579*fb1b10abSAndroid Build Coastguard Worker output[14] = HIGHBD_WRAPLOW(step1[14] + step1[17], bd);
2580*fb1b10abSAndroid Build Coastguard Worker output[15] = HIGHBD_WRAPLOW(step1[15] + step1[16], bd);
2581*fb1b10abSAndroid Build Coastguard Worker output[16] = HIGHBD_WRAPLOW(step1[15] - step1[16], bd);
2582*fb1b10abSAndroid Build Coastguard Worker output[17] = HIGHBD_WRAPLOW(step1[14] - step1[17], bd);
2583*fb1b10abSAndroid Build Coastguard Worker output[18] = HIGHBD_WRAPLOW(step1[13] - step1[18], bd);
2584*fb1b10abSAndroid Build Coastguard Worker output[19] = HIGHBD_WRAPLOW(step1[12] - step1[19], bd);
2585*fb1b10abSAndroid Build Coastguard Worker output[20] = HIGHBD_WRAPLOW(step1[11] - step1[20], bd);
2586*fb1b10abSAndroid Build Coastguard Worker output[21] = HIGHBD_WRAPLOW(step1[10] - step1[21], bd);
2587*fb1b10abSAndroid Build Coastguard Worker output[22] = HIGHBD_WRAPLOW(step1[9] - step1[22], bd);
2588*fb1b10abSAndroid Build Coastguard Worker output[23] = HIGHBD_WRAPLOW(step1[8] - step1[23], bd);
2589*fb1b10abSAndroid Build Coastguard Worker output[24] = HIGHBD_WRAPLOW(step1[7] - step1[24], bd);
2590*fb1b10abSAndroid Build Coastguard Worker output[25] = HIGHBD_WRAPLOW(step1[6] - step1[25], bd);
2591*fb1b10abSAndroid Build Coastguard Worker output[26] = HIGHBD_WRAPLOW(step1[5] - step1[26], bd);
2592*fb1b10abSAndroid Build Coastguard Worker output[27] = HIGHBD_WRAPLOW(step1[4] - step1[27], bd);
2593*fb1b10abSAndroid Build Coastguard Worker output[28] = HIGHBD_WRAPLOW(step1[3] - step1[28], bd);
2594*fb1b10abSAndroid Build Coastguard Worker output[29] = HIGHBD_WRAPLOW(step1[2] - step1[29], bd);
2595*fb1b10abSAndroid Build Coastguard Worker output[30] = HIGHBD_WRAPLOW(step1[1] - step1[30], bd);
2596*fb1b10abSAndroid Build Coastguard Worker output[31] = HIGHBD_WRAPLOW(step1[0] - step1[31], bd);
2597*fb1b10abSAndroid Build Coastguard Worker }
2598*fb1b10abSAndroid Build Coastguard Worker
vpx_highbd_idct32x32_1024_add_c(const tran_low_t * input,uint16_t * dest,int stride,int bd)2599*fb1b10abSAndroid Build Coastguard Worker void vpx_highbd_idct32x32_1024_add_c(const tran_low_t *input, uint16_t *dest,
2600*fb1b10abSAndroid Build Coastguard Worker int stride, int bd) {
2601*fb1b10abSAndroid Build Coastguard Worker int i, j;
2602*fb1b10abSAndroid Build Coastguard Worker tran_low_t out[32 * 32];
2603*fb1b10abSAndroid Build Coastguard Worker tran_low_t *outptr = out;
2604*fb1b10abSAndroid Build Coastguard Worker tran_low_t temp_in[32], temp_out[32];
2605*fb1b10abSAndroid Build Coastguard Worker
2606*fb1b10abSAndroid Build Coastguard Worker // Rows
2607*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 32; ++i) {
2608*fb1b10abSAndroid Build Coastguard Worker tran_low_t zero_coeff = 0;
2609*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 32; ++j) zero_coeff |= input[j];
2610*fb1b10abSAndroid Build Coastguard Worker
2611*fb1b10abSAndroid Build Coastguard Worker if (zero_coeff)
2612*fb1b10abSAndroid Build Coastguard Worker highbd_idct32_c(input, outptr, bd);
2613*fb1b10abSAndroid Build Coastguard Worker else
2614*fb1b10abSAndroid Build Coastguard Worker memset(outptr, 0, sizeof(tran_low_t) * 32);
2615*fb1b10abSAndroid Build Coastguard Worker input += 32;
2616*fb1b10abSAndroid Build Coastguard Worker outptr += 32;
2617*fb1b10abSAndroid Build Coastguard Worker }
2618*fb1b10abSAndroid Build Coastguard Worker
2619*fb1b10abSAndroid Build Coastguard Worker // Columns
2620*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 32; ++i) {
2621*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 32; ++j) temp_in[j] = out[j * 32 + i];
2622*fb1b10abSAndroid Build Coastguard Worker highbd_idct32_c(temp_in, temp_out, bd);
2623*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 32; ++j) {
2624*fb1b10abSAndroid Build Coastguard Worker dest[j * stride + i] = highbd_clip_pixel_add(
2625*fb1b10abSAndroid Build Coastguard Worker dest[j * stride + i], ROUND_POWER_OF_TWO(temp_out[j], 6), bd);
2626*fb1b10abSAndroid Build Coastguard Worker }
2627*fb1b10abSAndroid Build Coastguard Worker }
2628*fb1b10abSAndroid Build Coastguard Worker }
2629*fb1b10abSAndroid Build Coastguard Worker
vpx_highbd_idct32x32_135_add_c(const tran_low_t * input,uint16_t * dest,int stride,int bd)2630*fb1b10abSAndroid Build Coastguard Worker void vpx_highbd_idct32x32_135_add_c(const tran_low_t *input, uint16_t *dest,
2631*fb1b10abSAndroid Build Coastguard Worker int stride, int bd) {
2632*fb1b10abSAndroid Build Coastguard Worker int i, j;
2633*fb1b10abSAndroid Build Coastguard Worker tran_low_t out[32 * 32] = { 0 };
2634*fb1b10abSAndroid Build Coastguard Worker tran_low_t *outptr = out;
2635*fb1b10abSAndroid Build Coastguard Worker tran_low_t temp_in[32], temp_out[32];
2636*fb1b10abSAndroid Build Coastguard Worker
2637*fb1b10abSAndroid Build Coastguard Worker // Rows
2638*fb1b10abSAndroid Build Coastguard Worker // Only upper-left 16x16 has non-zero coeff
2639*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 16; ++i) {
2640*fb1b10abSAndroid Build Coastguard Worker highbd_idct32_c(input, outptr, bd);
2641*fb1b10abSAndroid Build Coastguard Worker input += 32;
2642*fb1b10abSAndroid Build Coastguard Worker outptr += 32;
2643*fb1b10abSAndroid Build Coastguard Worker }
2644*fb1b10abSAndroid Build Coastguard Worker
2645*fb1b10abSAndroid Build Coastguard Worker // Columns
2646*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 32; ++i) {
2647*fb1b10abSAndroid Build Coastguard Worker uint16_t *destT = dest;
2648*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 32; ++j) temp_in[j] = out[j * 32 + i];
2649*fb1b10abSAndroid Build Coastguard Worker highbd_idct32_c(temp_in, temp_out, bd);
2650*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 32; ++j) {
2651*fb1b10abSAndroid Build Coastguard Worker destT[i] = highbd_clip_pixel_add(destT[i],
2652*fb1b10abSAndroid Build Coastguard Worker ROUND_POWER_OF_TWO(temp_out[j], 6), bd);
2653*fb1b10abSAndroid Build Coastguard Worker destT += stride;
2654*fb1b10abSAndroid Build Coastguard Worker }
2655*fb1b10abSAndroid Build Coastguard Worker }
2656*fb1b10abSAndroid Build Coastguard Worker }
2657*fb1b10abSAndroid Build Coastguard Worker
vpx_highbd_idct32x32_34_add_c(const tran_low_t * input,uint16_t * dest,int stride,int bd)2658*fb1b10abSAndroid Build Coastguard Worker void vpx_highbd_idct32x32_34_add_c(const tran_low_t *input, uint16_t *dest,
2659*fb1b10abSAndroid Build Coastguard Worker int stride, int bd) {
2660*fb1b10abSAndroid Build Coastguard Worker int i, j;
2661*fb1b10abSAndroid Build Coastguard Worker tran_low_t out[32 * 32] = { 0 };
2662*fb1b10abSAndroid Build Coastguard Worker tran_low_t *outptr = out;
2663*fb1b10abSAndroid Build Coastguard Worker tran_low_t temp_in[32], temp_out[32];
2664*fb1b10abSAndroid Build Coastguard Worker
2665*fb1b10abSAndroid Build Coastguard Worker // Rows
2666*fb1b10abSAndroid Build Coastguard Worker // Only upper-left 8x8 has non-zero coeff
2667*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 8; ++i) {
2668*fb1b10abSAndroid Build Coastguard Worker highbd_idct32_c(input, outptr, bd);
2669*fb1b10abSAndroid Build Coastguard Worker input += 32;
2670*fb1b10abSAndroid Build Coastguard Worker outptr += 32;
2671*fb1b10abSAndroid Build Coastguard Worker }
2672*fb1b10abSAndroid Build Coastguard Worker
2673*fb1b10abSAndroid Build Coastguard Worker // Columns
2674*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 32; ++i) {
2675*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 32; ++j) temp_in[j] = out[j * 32 + i];
2676*fb1b10abSAndroid Build Coastguard Worker highbd_idct32_c(temp_in, temp_out, bd);
2677*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 32; ++j) {
2678*fb1b10abSAndroid Build Coastguard Worker dest[j * stride + i] = highbd_clip_pixel_add(
2679*fb1b10abSAndroid Build Coastguard Worker dest[j * stride + i], ROUND_POWER_OF_TWO(temp_out[j], 6), bd);
2680*fb1b10abSAndroid Build Coastguard Worker }
2681*fb1b10abSAndroid Build Coastguard Worker }
2682*fb1b10abSAndroid Build Coastguard Worker }
2683*fb1b10abSAndroid Build Coastguard Worker
vpx_highbd_idct32x32_1_add_c(const tran_low_t * input,uint16_t * dest,int stride,int bd)2684*fb1b10abSAndroid Build Coastguard Worker void vpx_highbd_idct32x32_1_add_c(const tran_low_t *input, uint16_t *dest,
2685*fb1b10abSAndroid Build Coastguard Worker int stride, int bd) {
2686*fb1b10abSAndroid Build Coastguard Worker int i, j;
2687*fb1b10abSAndroid Build Coastguard Worker int a1;
2688*fb1b10abSAndroid Build Coastguard Worker tran_low_t out = HIGHBD_WRAPLOW(
2689*fb1b10abSAndroid Build Coastguard Worker dct_const_round_shift(input[0] * (tran_high_t)cospi_16_64), bd);
2690*fb1b10abSAndroid Build Coastguard Worker
2691*fb1b10abSAndroid Build Coastguard Worker out =
2692*fb1b10abSAndroid Build Coastguard Worker HIGHBD_WRAPLOW(dct_const_round_shift(out * (tran_high_t)cospi_16_64), bd);
2693*fb1b10abSAndroid Build Coastguard Worker a1 = ROUND_POWER_OF_TWO(out, 6);
2694*fb1b10abSAndroid Build Coastguard Worker
2695*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < 32; ++j) {
2696*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 32; ++i) dest[i] = highbd_clip_pixel_add(dest[i], a1, bd);
2697*fb1b10abSAndroid Build Coastguard Worker dest += stride;
2698*fb1b10abSAndroid Build Coastguard Worker }
2699*fb1b10abSAndroid Build Coastguard Worker }
2700*fb1b10abSAndroid Build Coastguard Worker
2701*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9_HIGHBITDEPTH
2702