xref: /btstack/3rd-party/bluedroid/decoder/srce/synthesis-dct8.c (revision df25739fc3ea5a0a90f0f5925e6461d653697d2e)
1*df25739fSMilanka Ringwald /******************************************************************************
2*df25739fSMilanka Ringwald  *
3*df25739fSMilanka Ringwald  *  Copyright (C) 2014 The Android Open Source Project
4*df25739fSMilanka Ringwald  *  Copyright 2003 - 2004 Open Interface North America, Inc. All rights reserved.
5*df25739fSMilanka Ringwald  *
6*df25739fSMilanka Ringwald  *  Licensed under the Apache License, Version 2.0 (the "License");
7*df25739fSMilanka Ringwald  *  you may not use this file except in compliance with the License.
8*df25739fSMilanka Ringwald  *  You may obtain a copy of the License at:
9*df25739fSMilanka Ringwald  *
10*df25739fSMilanka Ringwald  *  http://www.apache.org/licenses/LICENSE-2.0
11*df25739fSMilanka Ringwald  *
12*df25739fSMilanka Ringwald  *  Unless required by applicable law or agreed to in writing, software
13*df25739fSMilanka Ringwald  *  distributed under the License is distributed on an "AS IS" BASIS,
14*df25739fSMilanka Ringwald  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15*df25739fSMilanka Ringwald  *  See the License for the specific language governing permissions and
16*df25739fSMilanka Ringwald  *  limitations under the License.
17*df25739fSMilanka Ringwald  *
18*df25739fSMilanka Ringwald  ******************************************************************************/
19*df25739fSMilanka Ringwald 
20*df25739fSMilanka Ringwald /**********************************************************************************
21*df25739fSMilanka Ringwald   $Revision: #1 $
22*df25739fSMilanka Ringwald ***********************************************************************************/
23*df25739fSMilanka Ringwald 
24*df25739fSMilanka Ringwald /** @file
25*df25739fSMilanka Ringwald @ingroup codec_internal
26*df25739fSMilanka Ringwald */
27*df25739fSMilanka Ringwald 
28*df25739fSMilanka Ringwald /**@addgroup codec_internal*/
29*df25739fSMilanka Ringwald /**@{*/
30*df25739fSMilanka Ringwald 
31*df25739fSMilanka Ringwald /*
32*df25739fSMilanka Ringwald  * Performs an 8-point Type-II scaled DCT using the Arai-Agui-Nakajima
33*df25739fSMilanka Ringwald  * factorization. The scaling factors are folded into the windowing
34*df25739fSMilanka Ringwald  * constants. 29 adds and 5 16x32 multiplies per 8 samples.
35*df25739fSMilanka Ringwald  */
36*df25739fSMilanka Ringwald 
37*df25739fSMilanka Ringwald #include "oi_codec_sbc_private.h"
38*df25739fSMilanka Ringwald 
39*df25739fSMilanka Ringwald #define AAN_C4_FIX (759250125)/* S1.30  759250125   0.707107*/
40*df25739fSMilanka Ringwald 
41*df25739fSMilanka Ringwald #define AAN_C6_FIX (410903207)/* S1.30  410903207   0.382683*/
42*df25739fSMilanka Ringwald 
43*df25739fSMilanka Ringwald #define AAN_Q0_FIX (581104888)/* S1.30  581104888   0.541196*/
44*df25739fSMilanka Ringwald 
45*df25739fSMilanka Ringwald #define AAN_Q1_FIX (1402911301)/* S1.30 1402911301   1.306563*/
46*df25739fSMilanka Ringwald 
47*df25739fSMilanka Ringwald /** Scales x by y bits to the right, adding a rounding factor.
48*df25739fSMilanka Ringwald  */
49*df25739fSMilanka Ringwald #ifndef SCALE
50*df25739fSMilanka Ringwald #define SCALE(x, y) (((x) + (1 <<((y)-1))) >> (y))
51*df25739fSMilanka Ringwald #endif
52*df25739fSMilanka Ringwald 
53*df25739fSMilanka Ringwald /**
54*df25739fSMilanka Ringwald  * Default C language implementation of a 32x32->32 multiply. This function may
55*df25739fSMilanka Ringwald  * be replaced by a platform-specific version for speed.
56*df25739fSMilanka Ringwald  *
57*df25739fSMilanka Ringwald  * @param u A signed 32-bit multiplicand
58*df25739fSMilanka Ringwald  * @param v A signed 32-bit multiplier
59*df25739fSMilanka Ringwald 
60*df25739fSMilanka Ringwald  * @return  A signed 32-bit value corresponding to the 32 most significant bits
61*df25739fSMilanka Ringwald  * of the 64-bit product of u and v.
62*df25739fSMilanka Ringwald  */
63*df25739fSMilanka Ringwald INLINE OI_INT32 default_mul_32s_32s_hi(OI_INT32 u, OI_INT32 v)
64*df25739fSMilanka Ringwald {
65*df25739fSMilanka Ringwald     OI_UINT32 u0, v0;
66*df25739fSMilanka Ringwald     OI_INT32 u1, v1, w1, w2, t;
67*df25739fSMilanka Ringwald 
68*df25739fSMilanka Ringwald     u0 = u & 0xFFFF; u1 = u >> 16;
69*df25739fSMilanka Ringwald     v0 = v & 0xFFFF; v1 = v >> 16;
70*df25739fSMilanka Ringwald     t = u0*v0;
71*df25739fSMilanka Ringwald     t = u1*v0 + ((OI_UINT32)t >> 16);
72*df25739fSMilanka Ringwald     w1 = t & 0xFFFF;
73*df25739fSMilanka Ringwald     w2 = t >> 16;
74*df25739fSMilanka Ringwald     w1 = u0*v1 + w1;
75*df25739fSMilanka Ringwald     return u1*v1 + w2 + (w1 >> 16);
76*df25739fSMilanka Ringwald }
77*df25739fSMilanka Ringwald 
78*df25739fSMilanka Ringwald #define MUL_32S_32S_HI(_x, _y) default_mul_32s_32s_hi(_x, _y)
79*df25739fSMilanka Ringwald 
80*df25739fSMilanka Ringwald 
81*df25739fSMilanka Ringwald #ifdef DEBUG_DCT
82*df25739fSMilanka Ringwald PRIVATE void float_dct2_8(float * RESTRICT out, OI_INT32 const *RESTRICT in)
83*df25739fSMilanka Ringwald {
84*df25739fSMilanka Ringwald #define FIX(x,bits) (((int)floor(0.5f+((x)*((float)(1<<bits)))))/((float)(1<<bits)))
85*df25739fSMilanka Ringwald #define FLOAT_BUTTERFLY(x,y) x += y; y = x - (y*2); OI_ASSERT(VALID_INT32(x)); OI_ASSERT(VALID_INT32(y));
86*df25739fSMilanka Ringwald #define FLOAT_MULT_DCT(K, sample) (FIX(K,20) * sample)
87*df25739fSMilanka Ringwald #define FLOAT_SCALE(x, y) (((x) / (double)(1 << (y))))
88*df25739fSMilanka Ringwald 
89*df25739fSMilanka Ringwald     double L00,L01,L02,L03,L04,L05,L06,L07;
90*df25739fSMilanka Ringwald     double L25;
91*df25739fSMilanka Ringwald 
92*df25739fSMilanka Ringwald     double in0,in1,in2,in3;
93*df25739fSMilanka Ringwald     double in4,in5,in6,in7;
94*df25739fSMilanka Ringwald 
95*df25739fSMilanka Ringwald     in0 = FLOAT_SCALE(in[0], DCTII_8_SHIFT_IN); OI_ASSERT(VALID_INT32(in0));
96*df25739fSMilanka Ringwald     in1 = FLOAT_SCALE(in[1], DCTII_8_SHIFT_IN); OI_ASSERT(VALID_INT32(in1));
97*df25739fSMilanka Ringwald     in2 = FLOAT_SCALE(in[2], DCTII_8_SHIFT_IN); OI_ASSERT(VALID_INT32(in2));
98*df25739fSMilanka Ringwald     in3 = FLOAT_SCALE(in[3], DCTII_8_SHIFT_IN); OI_ASSERT(VALID_INT32(in3));
99*df25739fSMilanka Ringwald     in4 = FLOAT_SCALE(in[4], DCTII_8_SHIFT_IN); OI_ASSERT(VALID_INT32(in4));
100*df25739fSMilanka Ringwald     in5 = FLOAT_SCALE(in[5], DCTII_8_SHIFT_IN); OI_ASSERT(VALID_INT32(in5));
101*df25739fSMilanka Ringwald     in6 = FLOAT_SCALE(in[6], DCTII_8_SHIFT_IN); OI_ASSERT(VALID_INT32(in6));
102*df25739fSMilanka Ringwald     in7 = FLOAT_SCALE(in[7], DCTII_8_SHIFT_IN); OI_ASSERT(VALID_INT32(in7));
103*df25739fSMilanka Ringwald 
104*df25739fSMilanka Ringwald     L00 = (in0 + in7); OI_ASSERT(VALID_INT32(L00));
105*df25739fSMilanka Ringwald     L01 = (in1 + in6); OI_ASSERT(VALID_INT32(L01));
106*df25739fSMilanka Ringwald     L02 = (in2 + in5); OI_ASSERT(VALID_INT32(L02));
107*df25739fSMilanka Ringwald     L03 = (in3 + in4); OI_ASSERT(VALID_INT32(L03));
108*df25739fSMilanka Ringwald 
109*df25739fSMilanka Ringwald     L04 = (in3 - in4); OI_ASSERT(VALID_INT32(L04));
110*df25739fSMilanka Ringwald     L05 = (in2 - in5); OI_ASSERT(VALID_INT32(L05));
111*df25739fSMilanka Ringwald     L06 = (in1 - in6); OI_ASSERT(VALID_INT32(L06));
112*df25739fSMilanka Ringwald     L07 = (in0 - in7); OI_ASSERT(VALID_INT32(L07));
113*df25739fSMilanka Ringwald 
114*df25739fSMilanka Ringwald     FLOAT_BUTTERFLY(L00, L03);
115*df25739fSMilanka Ringwald     FLOAT_BUTTERFLY(L01, L02);
116*df25739fSMilanka Ringwald 
117*df25739fSMilanka Ringwald     L02 += L03; OI_ASSERT(VALID_INT32(L02));
118*df25739fSMilanka Ringwald 
119*df25739fSMilanka Ringwald     L02 = FLOAT_MULT_DCT(AAN_C4_FLOAT, L02); OI_ASSERT(VALID_INT32(L02));
120*df25739fSMilanka Ringwald 
121*df25739fSMilanka Ringwald     FLOAT_BUTTERFLY(L00, L01);
122*df25739fSMilanka Ringwald 
123*df25739fSMilanka Ringwald     out[0] = (float)FLOAT_SCALE(L00, DCTII_8_SHIFT_0); OI_ASSERT(VALID_INT16(out[0]));
124*df25739fSMilanka Ringwald     out[4] = (float)FLOAT_SCALE(L01, DCTII_8_SHIFT_4); OI_ASSERT(VALID_INT16(out[4]));
125*df25739fSMilanka Ringwald 
126*df25739fSMilanka Ringwald     FLOAT_BUTTERFLY(L03, L02);
127*df25739fSMilanka Ringwald     out[6] = (float)FLOAT_SCALE(L02, DCTII_8_SHIFT_6); OI_ASSERT(VALID_INT16(out[6]));
128*df25739fSMilanka Ringwald     out[2] = (float)FLOAT_SCALE(L03, DCTII_8_SHIFT_2); OI_ASSERT(VALID_INT16(out[2]));
129*df25739fSMilanka Ringwald 
130*df25739fSMilanka Ringwald     L04 += L05; OI_ASSERT(VALID_INT32(L04));
131*df25739fSMilanka Ringwald     L05 += L06; OI_ASSERT(VALID_INT32(L05));
132*df25739fSMilanka Ringwald     L06 += L07; OI_ASSERT(VALID_INT32(L06));
133*df25739fSMilanka Ringwald 
134*df25739fSMilanka Ringwald     L04/=2;
135*df25739fSMilanka Ringwald     L05/=2;
136*df25739fSMilanka Ringwald     L06/=2;
137*df25739fSMilanka Ringwald     L07/=2;
138*df25739fSMilanka Ringwald 
139*df25739fSMilanka Ringwald     L05 = FLOAT_MULT_DCT(AAN_C4_FLOAT, L05); OI_ASSERT(VALID_INT32(L05));
140*df25739fSMilanka Ringwald 
141*df25739fSMilanka Ringwald     L25 = L06 - L04; OI_ASSERT(VALID_INT32(L25));
142*df25739fSMilanka Ringwald     L25 = FLOAT_MULT_DCT(AAN_C6_FLOAT, L25); OI_ASSERT(VALID_INT32(L25));
143*df25739fSMilanka Ringwald 
144*df25739fSMilanka Ringwald     L04 = FLOAT_MULT_DCT(AAN_Q0_FLOAT, L04); OI_ASSERT(VALID_INT32(L04));
145*df25739fSMilanka Ringwald     L04 -= L25; OI_ASSERT(VALID_INT32(L04));
146*df25739fSMilanka Ringwald 
147*df25739fSMilanka Ringwald     L06 = FLOAT_MULT_DCT(AAN_Q1_FLOAT, L06); OI_ASSERT(VALID_INT32(L06));
148*df25739fSMilanka Ringwald     L06 -= L25; OI_ASSERT(VALID_INT32(L25));
149*df25739fSMilanka Ringwald 
150*df25739fSMilanka Ringwald     FLOAT_BUTTERFLY(L07, L05);
151*df25739fSMilanka Ringwald 
152*df25739fSMilanka Ringwald     FLOAT_BUTTERFLY(L05, L04);
153*df25739fSMilanka Ringwald     out[3] = (float)(FLOAT_SCALE(L04, DCTII_8_SHIFT_3-1)); OI_ASSERT(VALID_INT16(out[3]));
154*df25739fSMilanka Ringwald     out[5] = (float)(FLOAT_SCALE(L05, DCTII_8_SHIFT_5-1)); OI_ASSERT(VALID_INT16(out[5]));
155*df25739fSMilanka Ringwald 
156*df25739fSMilanka Ringwald     FLOAT_BUTTERFLY(L07, L06);
157*df25739fSMilanka Ringwald     out[7] = (float)(FLOAT_SCALE(L06, DCTII_8_SHIFT_7-1)); OI_ASSERT(VALID_INT16(out[7]));
158*df25739fSMilanka Ringwald     out[1] = (float)(FLOAT_SCALE(L07, DCTII_8_SHIFT_1-1)); OI_ASSERT(VALID_INT16(out[1]));
159*df25739fSMilanka Ringwald }
160*df25739fSMilanka Ringwald #undef BUTTERFLY
161*df25739fSMilanka Ringwald #endif
162*df25739fSMilanka Ringwald 
163*df25739fSMilanka Ringwald 
164*df25739fSMilanka Ringwald /*
165*df25739fSMilanka Ringwald  * This function calculates the AAN DCT. Its inputs are in S16.15 format, as
166*df25739fSMilanka Ringwald  * returned by OI_SBC_Dequant. In practice, abs(in[x]) < 52429.0 / 1.38
167*df25739fSMilanka Ringwald  * (1244918057 integer). The function it computes is an approximation to the array defined
168*df25739fSMilanka Ringwald  * by:
169*df25739fSMilanka Ringwald  *
170*df25739fSMilanka Ringwald  * diag(aan_s) * AAN= C2
171*df25739fSMilanka Ringwald  *
172*df25739fSMilanka Ringwald  *   or
173*df25739fSMilanka Ringwald  *
174*df25739fSMilanka Ringwald  * AAN = diag(1/aan_s) * C2
175*df25739fSMilanka Ringwald  *
176*df25739fSMilanka Ringwald  * where C2 is as it is defined in the comment at the head of this file, and
177*df25739fSMilanka Ringwald  *
178*df25739fSMilanka Ringwald  * aan_s[i] = aan_s = 1/(2*cos(i*pi/16)) with i = 1..7, aan_s[0] = 1;
179*df25739fSMilanka Ringwald  *
180*df25739fSMilanka Ringwald  * aan_s[i] = [ 1.000  0.510  0.541  0.601  0.707  0.900  1.307  2.563 ]
181*df25739fSMilanka Ringwald  *
182*df25739fSMilanka Ringwald  * The output ranges are shown as follows:
183*df25739fSMilanka Ringwald  *
184*df25739fSMilanka Ringwald  * Let Y[0..7] = AAN * X[0..7]
185*df25739fSMilanka Ringwald  *
186*df25739fSMilanka Ringwald  * Without loss of generality, assume the input vector X consists of elements
187*df25739fSMilanka Ringwald  * between -1 and 1. The maximum possible value of a given output element occurs
188*df25739fSMilanka Ringwald  * with some particular combination of input vector elements each of which is -1
189*df25739fSMilanka Ringwald  * or 1. Consider the computation of Y[i]. Y[i] = sum t=0..7 of AAN[t,i]*X[i]. Y is
190*df25739fSMilanka Ringwald  * maximized if the sign of X[i] matches the sign of AAN[t,i], ensuring a
191*df25739fSMilanka Ringwald  * positive contribution to the sum. Equivalently, one may simply sum
192*df25739fSMilanka Ringwald  * abs(AAN)[t,i] over t to get the maximum possible value of Y[i].
193*df25739fSMilanka Ringwald  *
194*df25739fSMilanka Ringwald  * This yields approximately [8.00  10.05   9.66   8.52   8.00   5.70   4.00   2.00]
195*df25739fSMilanka Ringwald  *
196*df25739fSMilanka Ringwald  * Given the maximum magnitude sensible input value of +/-37992, this yields the
197*df25739fSMilanka Ringwald  * following vector of maximum output magnitudes:
198*df25739fSMilanka Ringwald  *
199*df25739fSMilanka Ringwald  * [ 303936  381820  367003  323692  303936  216555  151968   75984 ]
200*df25739fSMilanka Ringwald  *
201*df25739fSMilanka Ringwald  * Ultimately, these values must fit into 16 bit signed integers, so they must
202*df25739fSMilanka Ringwald  * be scaled. A non-uniform scaling helps maximize the kept precision. The
203*df25739fSMilanka Ringwald  * relative number of extra bits of precision maintainable with respect to the
204*df25739fSMilanka Ringwald  * largest value is given here:
205*df25739fSMilanka Ringwald  *
206*df25739fSMilanka Ringwald  * [ 0  0  0  0  0  0  1  2 ]
207*df25739fSMilanka Ringwald  *
208*df25739fSMilanka Ringwald  */
209*df25739fSMilanka Ringwald PRIVATE void dct2_8(SBC_BUFFER_T * RESTRICT out, OI_INT32 const *RESTRICT in)
210*df25739fSMilanka Ringwald {
211*df25739fSMilanka Ringwald #define BUTTERFLY(x,y) x += y; y = x - (y<<1);
212*df25739fSMilanka Ringwald #define FIX_MULT_DCT(K, x) (MUL_32S_32S_HI(K,x)<<2)
213*df25739fSMilanka Ringwald 
214*df25739fSMilanka Ringwald     OI_INT32 L00,L01,L02,L03,L04,L05,L06,L07;
215*df25739fSMilanka Ringwald     OI_INT32 L25;
216*df25739fSMilanka Ringwald 
217*df25739fSMilanka Ringwald     OI_INT32 in0,in1,in2,in3;
218*df25739fSMilanka Ringwald     OI_INT32 in4,in5,in6,in7;
219*df25739fSMilanka Ringwald 
220*df25739fSMilanka Ringwald #if DCTII_8_SHIFT_IN != 0
221*df25739fSMilanka Ringwald     in0 = SCALE(in[0], DCTII_8_SHIFT_IN);
222*df25739fSMilanka Ringwald     in1 = SCALE(in[1], DCTII_8_SHIFT_IN);
223*df25739fSMilanka Ringwald     in2 = SCALE(in[2], DCTII_8_SHIFT_IN);
224*df25739fSMilanka Ringwald     in3 = SCALE(in[3], DCTII_8_SHIFT_IN);
225*df25739fSMilanka Ringwald     in4 = SCALE(in[4], DCTII_8_SHIFT_IN);
226*df25739fSMilanka Ringwald     in5 = SCALE(in[5], DCTII_8_SHIFT_IN);
227*df25739fSMilanka Ringwald     in6 = SCALE(in[6], DCTII_8_SHIFT_IN);
228*df25739fSMilanka Ringwald     in7 = SCALE(in[7], DCTII_8_SHIFT_IN);
229*df25739fSMilanka Ringwald #else
230*df25739fSMilanka Ringwald     in0 = in[0];
231*df25739fSMilanka Ringwald     in1 = in[1];
232*df25739fSMilanka Ringwald     in2 = in[2];
233*df25739fSMilanka Ringwald     in3 = in[3];
234*df25739fSMilanka Ringwald     in4 = in[4];
235*df25739fSMilanka Ringwald     in5 = in[5];
236*df25739fSMilanka Ringwald     in6 = in[6];
237*df25739fSMilanka Ringwald     in7 = in[7];
238*df25739fSMilanka Ringwald #endif
239*df25739fSMilanka Ringwald 
240*df25739fSMilanka Ringwald     L00 = in0 + in7;
241*df25739fSMilanka Ringwald     L01 = in1 + in6;
242*df25739fSMilanka Ringwald     L02 = in2 + in5;
243*df25739fSMilanka Ringwald     L03 = in3 + in4;
244*df25739fSMilanka Ringwald 
245*df25739fSMilanka Ringwald     L04 = in3 - in4;
246*df25739fSMilanka Ringwald     L05 = in2 - in5;
247*df25739fSMilanka Ringwald     L06 = in1 - in6;
248*df25739fSMilanka Ringwald     L07 = in0 - in7;
249*df25739fSMilanka Ringwald 
250*df25739fSMilanka Ringwald     BUTTERFLY(L00, L03);
251*df25739fSMilanka Ringwald     BUTTERFLY(L01, L02);
252*df25739fSMilanka Ringwald 
253*df25739fSMilanka Ringwald     L02 += L03;
254*df25739fSMilanka Ringwald 
255*df25739fSMilanka Ringwald     L02 = FIX_MULT_DCT(AAN_C4_FIX, L02);
256*df25739fSMilanka Ringwald 
257*df25739fSMilanka Ringwald     BUTTERFLY(L00, L01);
258*df25739fSMilanka Ringwald 
259*df25739fSMilanka Ringwald     out[0] = (OI_INT16)SCALE(L00, DCTII_8_SHIFT_0);
260*df25739fSMilanka Ringwald     out[4] = (OI_INT16)SCALE(L01, DCTII_8_SHIFT_4);
261*df25739fSMilanka Ringwald 
262*df25739fSMilanka Ringwald     BUTTERFLY(L03, L02);
263*df25739fSMilanka Ringwald     out[6] = (OI_INT16)SCALE(L02, DCTII_8_SHIFT_6);
264*df25739fSMilanka Ringwald     out[2] = (OI_INT16)SCALE(L03, DCTII_8_SHIFT_2);
265*df25739fSMilanka Ringwald 
266*df25739fSMilanka Ringwald     L04 += L05;
267*df25739fSMilanka Ringwald     L05 += L06;
268*df25739fSMilanka Ringwald     L06 += L07;
269*df25739fSMilanka Ringwald 
270*df25739fSMilanka Ringwald     L04/=2;
271*df25739fSMilanka Ringwald     L05/=2;
272*df25739fSMilanka Ringwald     L06/=2;
273*df25739fSMilanka Ringwald     L07/=2;
274*df25739fSMilanka Ringwald 
275*df25739fSMilanka Ringwald     L05 = FIX_MULT_DCT(AAN_C4_FIX, L05);
276*df25739fSMilanka Ringwald 
277*df25739fSMilanka Ringwald     L25 = L06 - L04;
278*df25739fSMilanka Ringwald     L25 = FIX_MULT_DCT(AAN_C6_FIX, L25);
279*df25739fSMilanka Ringwald 
280*df25739fSMilanka Ringwald     L04 = FIX_MULT_DCT(AAN_Q0_FIX, L04);
281*df25739fSMilanka Ringwald     L04 -= L25;
282*df25739fSMilanka Ringwald 
283*df25739fSMilanka Ringwald     L06 = FIX_MULT_DCT(AAN_Q1_FIX, L06);
284*df25739fSMilanka Ringwald     L06 -= L25;
285*df25739fSMilanka Ringwald 
286*df25739fSMilanka Ringwald     BUTTERFLY(L07, L05);
287*df25739fSMilanka Ringwald 
288*df25739fSMilanka Ringwald     BUTTERFLY(L05, L04);
289*df25739fSMilanka Ringwald     out[3] = (OI_INT16)SCALE(L04, DCTII_8_SHIFT_3-1);
290*df25739fSMilanka Ringwald     out[5] = (OI_INT16)SCALE(L05, DCTII_8_SHIFT_5-1);
291*df25739fSMilanka Ringwald 
292*df25739fSMilanka Ringwald     BUTTERFLY(L07, L06);
293*df25739fSMilanka Ringwald     out[7] = (OI_INT16)SCALE(L06, DCTII_8_SHIFT_7-1);
294*df25739fSMilanka Ringwald     out[1] = (OI_INT16)SCALE(L07, DCTII_8_SHIFT_1-1);
295*df25739fSMilanka Ringwald #undef BUTTERFLY
296*df25739fSMilanka Ringwald 
297*df25739fSMilanka Ringwald #ifdef DEBUG_DCT
298*df25739fSMilanka Ringwald     {
299*df25739fSMilanka Ringwald         float float_out[8];
300*df25739fSMilanka Ringwald         float_dct2_8(float_out, in);
301*df25739fSMilanka Ringwald     }
302*df25739fSMilanka Ringwald #endif
303*df25739fSMilanka Ringwald }
304*df25739fSMilanka Ringwald 
305*df25739fSMilanka Ringwald /**@}*/
306