annotate mp3lib/dct36.c @ 27857:f1a3f8aa1148

Fix a typo.
author bircoph
date Tue, 04 Nov 2008 00:35:49 +0000
parents 0783dd397f74
children 0f1b5b68af32
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15167
07e7a572bd84 Mark modified imported files as such to comply with (L)GPL ¡ø2a.
diego
parents: 1245
diff changeset
1 /*
18783
0783dd397f74 CVS --> Subversion in copyright notices
diego
parents: 15167
diff changeset
2 * Modified for use with MPlayer, for details see the changelog at
0783dd397f74 CVS --> Subversion in copyright notices
diego
parents: 15167
diff changeset
3 * http://svn.mplayerhq.hu/mplayer/trunk/
15167
07e7a572bd84 Mark modified imported files as such to comply with (L)GPL ¡ø2a.
diego
parents: 1245
diff changeset
4 * $Id$
07e7a572bd84 Mark modified imported files as such to comply with (L)GPL ¡ø2a.
diego
parents: 1245
diff changeset
5 */
07e7a572bd84 Mark modified imported files as such to comply with (L)GPL ¡ø2a.
diego
parents: 1245
diff changeset
6
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
7 /*
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
8 // This is an optimized DCT from Jeff Tsay's maplay 1.2+ package.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
9 // Saved one multiplication by doing the 'twiddle factor' stuff
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
10 // together with the window mul. (MH)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
11 //
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
12 // This uses Byeong Gi Lee's Fast Cosine Transform algorithm, but the
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
13 // 9 point IDCT needs to be reduced further. Unfortunately, I don't
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
14 // know how to do that, because 9 is not an even number. - Jeff.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
15 //
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
16 //////////////////////////////////////////////////////////////////
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
17 //
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
18 // 9 Point Inverse Discrete Cosine Transform
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
19 //
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
20 // This piece of code is Copyright 1997 Mikko Tommila and is freely usable
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
21 // by anybody. The algorithm itself is of course in the public domain.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
22 //
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
23 // Again derived heuristically from the 9-point WFTA.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
24 //
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
25 // The algorithm is optimized (?) for speed, not for small rounding errors or
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
26 // good readability.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
27 //
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
28 // 36 additions, 11 multiplications
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
29 //
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
30 // Again this is very likely sub-optimal.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
31 //
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
32 // The code is optimized to use a minimum number of temporary variables,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
33 // so it should compile quite well even on 8-register Intel x86 processors.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
34 // This makes the code quite obfuscated and very difficult to understand.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
35 //
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
36 // References:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
37 // [1] S. Winograd: "On Computing the Discrete Fourier Transform",
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
38 // Mathematics of Computation, Volume 32, Number 141, January 1978,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
39 // Pages 175-199
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
40 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
41
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
42 /*------------------------------------------------------------------*/
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
43 /* */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
44 /* Function: Calculation of the inverse MDCT */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
45 /* */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
46 /*------------------------------------------------------------------*/
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
47
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
48 static void dct36(real *inbuf,real *o1,real *o2,real *wintab,real *tsbuf)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
49 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
50 #ifdef NEW_DCT9
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
51 real tmp[18];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
52 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
53
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
54 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
55 register real *in = inbuf;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
56
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
57 in[17]+=in[16]; in[16]+=in[15]; in[15]+=in[14];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
58 in[14]+=in[13]; in[13]+=in[12]; in[12]+=in[11];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
59 in[11]+=in[10]; in[10]+=in[9]; in[9] +=in[8];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
60 in[8] +=in[7]; in[7] +=in[6]; in[6] +=in[5];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
61 in[5] +=in[4]; in[4] +=in[3]; in[3] +=in[2];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
62 in[2] +=in[1]; in[1] +=in[0];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
63
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
64 in[17]+=in[15]; in[15]+=in[13]; in[13]+=in[11]; in[11]+=in[9];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
65 in[9] +=in[7]; in[7] +=in[5]; in[5] +=in[3]; in[3] +=in[1];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
66
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
67
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
68 #ifdef NEW_DCT9
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
69 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
70 real t0, t1, t2, t3, t4, t5, t6, t7;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
71
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
72 t1 = COS6_2 * in[12];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
73 t2 = COS6_2 * (in[8] + in[16] - in[4]);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
74
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
75 t3 = in[0] + t1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
76 t4 = in[0] - t1 - t1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
77 t5 = t4 - t2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
78
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
79 t0 = cos9[0] * (in[4] + in[8]);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
80 t1 = cos9[1] * (in[8] - in[16]);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
81
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
82 tmp[4] = t4 + t2 + t2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
83 t2 = cos9[2] * (in[4] + in[16]);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
84
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
85 t6 = t3 - t0 - t2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
86 t0 += t3 + t1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
87 t3 += t2 - t1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
88
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
89 t2 = cos18[0] * (in[2] + in[10]);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
90 t4 = cos18[1] * (in[10] - in[14]);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
91 t7 = COS6_1 * in[6];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
92
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
93 t1 = t2 + t4 + t7;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
94 tmp[0] = t0 + t1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
95 tmp[8] = t0 - t1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
96 t1 = cos18[2] * (in[2] + in[14]);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
97 t2 += t1 - t7;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
98
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
99 tmp[3] = t3 + t2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
100 t0 = COS6_1 * (in[10] + in[14] - in[2]);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
101 tmp[5] = t3 - t2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
102
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
103 t4 -= t1 + t7;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
104
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
105 tmp[1] = t5 - t0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
106 tmp[7] = t5 + t0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
107 tmp[2] = t6 + t4;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
108 tmp[6] = t6 - t4;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
109 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
110
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
111 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
112 real t0, t1, t2, t3, t4, t5, t6, t7;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
113
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
114 t1 = COS6_2 * in[13];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
115 t2 = COS6_2 * (in[9] + in[17] - in[5]);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
116
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
117 t3 = in[1] + t1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
118 t4 = in[1] - t1 - t1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
119 t5 = t4 - t2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
120
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
121 t0 = cos9[0] * (in[5] + in[9]);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
122 t1 = cos9[1] * (in[9] - in[17]);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
123
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
124 tmp[13] = (t4 + t2 + t2) * tfcos36[17-13];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
125 t2 = cos9[2] * (in[5] + in[17]);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
126
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
127 t6 = t3 - t0 - t2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
128 t0 += t3 + t1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
129 t3 += t2 - t1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
130
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
131 t2 = cos18[0] * (in[3] + in[11]);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
132 t4 = cos18[1] * (in[11] - in[15]);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
133 t7 = COS6_1 * in[7];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
134
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
135 t1 = t2 + t4 + t7;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
136 tmp[17] = (t0 + t1) * tfcos36[17-17];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
137 tmp[9] = (t0 - t1) * tfcos36[17-9];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
138 t1 = cos18[2] * (in[3] + in[15]);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
139 t2 += t1 - t7;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
140
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
141 tmp[14] = (t3 + t2) * tfcos36[17-14];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
142 t0 = COS6_1 * (in[11] + in[15] - in[3]);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
143 tmp[12] = (t3 - t2) * tfcos36[17-12];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
144
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
145 t4 -= t1 + t7;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
146
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
147 tmp[16] = (t5 - t0) * tfcos36[17-16];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
148 tmp[10] = (t5 + t0) * tfcos36[17-10];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
149 tmp[15] = (t6 + t4) * tfcos36[17-15];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
150 tmp[11] = (t6 - t4) * tfcos36[17-11];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
151 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
152
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
153 #define MACRO(v) { \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
154 real tmpval; \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
155 real sum0 = tmp[(v)]; \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
156 real sum1 = tmp[17-(v)]; \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
157 out2[9+(v)] = (tmpval = sum0 + sum1) * w[27+(v)]; \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
158 out2[8-(v)] = tmpval * w[26-(v)]; \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
159 sum0 -= sum1; \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
160 ts[SBLIMIT*(8-(v))] = out1[8-(v)] + sum0 * w[8-(v)]; \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
161 ts[SBLIMIT*(9+(v))] = out1[9+(v)] + sum0 * w[9+(v)]; }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
162
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
163 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
164 register real *out2 = o2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
165 register real *w = wintab;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
166 register real *out1 = o1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
167 register real *ts = tsbuf;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
168
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
169 MACRO(0);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
170 MACRO(1);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
171 MACRO(2);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
172 MACRO(3);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
173 MACRO(4);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
174 MACRO(5);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
175 MACRO(6);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
176 MACRO(7);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
177 MACRO(8);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
178 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
179
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
180 #else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
181
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
182 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
183
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
184 #define MACRO0(v) { \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
185 real tmp; \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
186 out2[9+(v)] = (tmp = sum0 + sum1) * w[27+(v)]; \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
187 out2[8-(v)] = tmp * w[26-(v)]; } \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
188 sum0 -= sum1; \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
189 ts[SBLIMIT*(8-(v))] = out1[8-(v)] + sum0 * w[8-(v)]; \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
190 ts[SBLIMIT*(9+(v))] = out1[9+(v)] + sum0 * w[9+(v)];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
191 #define MACRO1(v) { \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
192 real sum0,sum1; \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
193 sum0 = tmp1a + tmp2a; \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
194 sum1 = (tmp1b + tmp2b) * tfcos36[(v)]; \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
195 MACRO0(v); }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
196 #define MACRO2(v) { \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
197 real sum0,sum1; \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
198 sum0 = tmp2a - tmp1a; \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
199 sum1 = (tmp2b - tmp1b) * tfcos36[(v)]; \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
200 MACRO0(v); }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
201
1245
03b7e2955a20 Added newest MMX-optimized decore which speedups decoding at least on 13% for any cpu.
nick
parents: 1
diff changeset
202 register const real *c = COS9;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
203 register real *out2 = o2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
204 register real *w = wintab;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
205 register real *out1 = o1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
206 register real *ts = tsbuf;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
207
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
208 real ta33,ta66,tb33,tb66;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
209
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
210 ta33 = in[2*3+0] * c[3];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
211 ta66 = in[2*6+0] * c[6];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
212 tb33 = in[2*3+1] * c[3];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
213 tb66 = in[2*6+1] * c[6];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
214
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
215 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
216 real tmp1a,tmp2a,tmp1b,tmp2b;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
217 tmp1a = in[2*1+0] * c[1] + ta33 + in[2*5+0] * c[5] + in[2*7+0] * c[7];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
218 tmp1b = in[2*1+1] * c[1] + tb33 + in[2*5+1] * c[5] + in[2*7+1] * c[7];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
219 tmp2a = in[2*0+0] + in[2*2+0] * c[2] + in[2*4+0] * c[4] + ta66 + in[2*8+0] * c[8];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
220 tmp2b = in[2*0+1] + in[2*2+1] * c[2] + in[2*4+1] * c[4] + tb66 + in[2*8+1] * c[8];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
221
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
222 MACRO1(0);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
223 MACRO2(8);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
224 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
225
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
226 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
227 real tmp1a,tmp2a,tmp1b,tmp2b;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
228 tmp1a = ( in[2*1+0] - in[2*5+0] - in[2*7+0] ) * c[3];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
229 tmp1b = ( in[2*1+1] - in[2*5+1] - in[2*7+1] ) * c[3];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
230 tmp2a = ( in[2*2+0] - in[2*4+0] - in[2*8+0] ) * c[6] - in[2*6+0] + in[2*0+0];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
231 tmp2b = ( in[2*2+1] - in[2*4+1] - in[2*8+1] ) * c[6] - in[2*6+1] + in[2*0+1];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
232
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
233 MACRO1(1);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
234 MACRO2(7);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
235 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
236
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
237 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
238 real tmp1a,tmp2a,tmp1b,tmp2b;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
239 tmp1a = in[2*1+0] * c[5] - ta33 - in[2*5+0] * c[7] + in[2*7+0] * c[1];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
240 tmp1b = in[2*1+1] * c[5] - tb33 - in[2*5+1] * c[7] + in[2*7+1] * c[1];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
241 tmp2a = in[2*0+0] - in[2*2+0] * c[8] - in[2*4+0] * c[2] + ta66 + in[2*8+0] * c[4];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
242 tmp2b = in[2*0+1] - in[2*2+1] * c[8] - in[2*4+1] * c[2] + tb66 + in[2*8+1] * c[4];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
243
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
244 MACRO1(2);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
245 MACRO2(6);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
246 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
247
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
248 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
249 real tmp1a,tmp2a,tmp1b,tmp2b;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
250 tmp1a = in[2*1+0] * c[7] - ta33 + in[2*5+0] * c[1] - in[2*7+0] * c[5];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
251 tmp1b = in[2*1+1] * c[7] - tb33 + in[2*5+1] * c[1] - in[2*7+1] * c[5];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
252 tmp2a = in[2*0+0] - in[2*2+0] * c[4] + in[2*4+0] * c[8] + ta66 - in[2*8+0] * c[2];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
253 tmp2b = in[2*0+1] - in[2*2+1] * c[4] + in[2*4+1] * c[8] + tb66 - in[2*8+1] * c[2];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
254
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
255 MACRO1(3);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
256 MACRO2(5);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
257 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
258
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
259 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
260 real sum0,sum1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
261 sum0 = in[2*0+0] - in[2*2+0] + in[2*4+0] - in[2*6+0] + in[2*8+0];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
262 sum1 = (in[2*0+1] - in[2*2+1] + in[2*4+1] - in[2*6+1] + in[2*8+1] ) * tfcos36[4];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
263 MACRO0(4);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
264 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
265 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
266 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
267
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
268 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
269 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
270