Mercurial > mplayer.hg
annotate mp3lib/dct64_i386.c @ 34515:a9d2dcb0f435
Fix skin PNG read errors.
FFmpeg's PNG decoder no longer does transcoding, but returns 32 bpp
images in RGBA format.
Extend (and rename) the existing 24 bpp to 32 bpp conversion function
to do 32 bpp ARGB conversion as well.
author | ib |
---|---|
date | Fri, 27 Jan 2012 00:07:45 +0000 |
parents | 0783dd397f74 |
children |
rev | line source |
---|---|
15167
07e7a572bd84
Mark modified imported files as such to comply with (L)GPL ¡ø2a.
diego
parents:
12131
diff
changeset
|
1 /* |
18783 | 2 * Modified for use with MPlayer, for details see the changelog at |
3 * http://svn.mplayerhq.hu/mplayer/trunk/ | |
15167
07e7a572bd84
Mark modified imported files as such to comply with (L)GPL ¡ø2a.
diego
parents:
12131
diff
changeset
|
4 * $Id$ |
07e7a572bd84
Mark modified imported files as such to comply with (L)GPL ¡ø2a.
diego
parents:
12131
diff
changeset
|
5 */ |
1 | 6 |
7 /* | |
8 * Discrete Cosine Tansform (DCT) for subband synthesis | |
9 * optimized for machines with no auto-increment. | |
10 * The performance is highly compiler dependend. Maybe | |
11 * the mpg123_dct64.c version for 'normal' processor may be faster | |
12 * even for Intel processors. | |
13 */ | |
14 | |
15 #include "mpg123.h" | |
16 | |
17 static void mpg123_dct64_1(real * out0, real * out1, real * b1, real * b2, real * samples) | |
18 { | |
19 | |
20 { | |
12131
d155623271e3
fix symbol clashes when linking with libmp3lame including mp3 decoder, man, mp3lib is so much bloated
alex
parents:
1
diff
changeset
|
21 register real *costab = mp3lib_pnts[0]; |
1 | 22 |
23 b1[0x00] = samples[0x00] + samples[0x1F]; | |
24 b1[0x1F] = (samples[0x00] - samples[0x1F]) * costab[0x0]; | |
25 | |
26 b1[0x01] = samples[0x01] + samples[0x1E]; | |
27 b1[0x1E] = (samples[0x01] - samples[0x1E]) * costab[0x1]; | |
28 | |
29 b1[0x02] = samples[0x02] + samples[0x1D]; | |
30 b1[0x1D] = (samples[0x02] - samples[0x1D]) * costab[0x2]; | |
31 | |
32 b1[0x03] = samples[0x03] + samples[0x1C]; | |
33 b1[0x1C] = (samples[0x03] - samples[0x1C]) * costab[0x3]; | |
34 | |
35 b1[0x04] = samples[0x04] + samples[0x1B]; | |
36 b1[0x1B] = (samples[0x04] - samples[0x1B]) * costab[0x4]; | |
37 | |
38 b1[0x05] = samples[0x05] + samples[0x1A]; | |
39 b1[0x1A] = (samples[0x05] - samples[0x1A]) * costab[0x5]; | |
40 | |
41 b1[0x06] = samples[0x06] + samples[0x19]; | |
42 b1[0x19] = (samples[0x06] - samples[0x19]) * costab[0x6]; | |
43 | |
44 b1[0x07] = samples[0x07] + samples[0x18]; | |
45 b1[0x18] = (samples[0x07] - samples[0x18]) * costab[0x7]; | |
46 | |
47 b1[0x08] = samples[0x08] + samples[0x17]; | |
48 b1[0x17] = (samples[0x08] - samples[0x17]) * costab[0x8]; | |
49 | |
50 b1[0x09] = samples[0x09] + samples[0x16]; | |
51 b1[0x16] = (samples[0x09] - samples[0x16]) * costab[0x9]; | |
52 | |
53 b1[0x0A] = samples[0x0A] + samples[0x15]; | |
54 b1[0x15] = (samples[0x0A] - samples[0x15]) * costab[0xA]; | |
55 | |
56 b1[0x0B] = samples[0x0B] + samples[0x14]; | |
57 b1[0x14] = (samples[0x0B] - samples[0x14]) * costab[0xB]; | |
58 | |
59 b1[0x0C] = samples[0x0C] + samples[0x13]; | |
60 b1[0x13] = (samples[0x0C] - samples[0x13]) * costab[0xC]; | |
61 | |
62 b1[0x0D] = samples[0x0D] + samples[0x12]; | |
63 b1[0x12] = (samples[0x0D] - samples[0x12]) * costab[0xD]; | |
64 | |
65 b1[0x0E] = samples[0x0E] + samples[0x11]; | |
66 b1[0x11] = (samples[0x0E] - samples[0x11]) * costab[0xE]; | |
67 | |
68 b1[0x0F] = samples[0x0F] + samples[0x10]; | |
69 b1[0x10] = (samples[0x0F] - samples[0x10]) * costab[0xF]; | |
70 } | |
71 | |
72 { | |
12131
d155623271e3
fix symbol clashes when linking with libmp3lame including mp3 decoder, man, mp3lib is so much bloated
alex
parents:
1
diff
changeset
|
73 register real *costab = mp3lib_pnts[1]; |
1 | 74 |
75 b2[0x00] = b1[0x00] + b1[0x0F]; | |
76 b2[0x0F] = (b1[0x00] - b1[0x0F]) * costab[0]; | |
77 b2[0x01] = b1[0x01] + b1[0x0E]; | |
78 b2[0x0E] = (b1[0x01] - b1[0x0E]) * costab[1]; | |
79 b2[0x02] = b1[0x02] + b1[0x0D]; | |
80 b2[0x0D] = (b1[0x02] - b1[0x0D]) * costab[2]; | |
81 b2[0x03] = b1[0x03] + b1[0x0C]; | |
82 b2[0x0C] = (b1[0x03] - b1[0x0C]) * costab[3]; | |
83 b2[0x04] = b1[0x04] + b1[0x0B]; | |
84 b2[0x0B] = (b1[0x04] - b1[0x0B]) * costab[4]; | |
85 b2[0x05] = b1[0x05] + b1[0x0A]; | |
86 b2[0x0A] = (b1[0x05] - b1[0x0A]) * costab[5]; | |
87 b2[0x06] = b1[0x06] + b1[0x09]; | |
88 b2[0x09] = (b1[0x06] - b1[0x09]) * costab[6]; | |
89 b2[0x07] = b1[0x07] + b1[0x08]; | |
90 b2[0x08] = (b1[0x07] - b1[0x08]) * costab[7]; | |
91 | |
92 b2[0x10] = b1[0x10] + b1[0x1F]; | |
93 b2[0x1F] = (b1[0x1F] - b1[0x10]) * costab[0]; | |
94 b2[0x11] = b1[0x11] + b1[0x1E]; | |
95 b2[0x1E] = (b1[0x1E] - b1[0x11]) * costab[1]; | |
96 b2[0x12] = b1[0x12] + b1[0x1D]; | |
97 b2[0x1D] = (b1[0x1D] - b1[0x12]) * costab[2]; | |
98 b2[0x13] = b1[0x13] + b1[0x1C]; | |
99 b2[0x1C] = (b1[0x1C] - b1[0x13]) * costab[3]; | |
100 b2[0x14] = b1[0x14] + b1[0x1B]; | |
101 b2[0x1B] = (b1[0x1B] - b1[0x14]) * costab[4]; | |
102 b2[0x15] = b1[0x15] + b1[0x1A]; | |
103 b2[0x1A] = (b1[0x1A] - b1[0x15]) * costab[5]; | |
104 b2[0x16] = b1[0x16] + b1[0x19]; | |
105 b2[0x19] = (b1[0x19] - b1[0x16]) * costab[6]; | |
106 b2[0x17] = b1[0x17] + b1[0x18]; | |
107 b2[0x18] = (b1[0x18] - b1[0x17]) * costab[7]; | |
108 } | |
109 | |
110 { | |
12131
d155623271e3
fix symbol clashes when linking with libmp3lame including mp3 decoder, man, mp3lib is so much bloated
alex
parents:
1
diff
changeset
|
111 register real *costab = mp3lib_pnts[2]; |
1 | 112 |
113 b1[0x00] = b2[0x00] + b2[0x07]; | |
114 b1[0x07] = (b2[0x00] - b2[0x07]) * costab[0]; | |
115 b1[0x01] = b2[0x01] + b2[0x06]; | |
116 b1[0x06] = (b2[0x01] - b2[0x06]) * costab[1]; | |
117 b1[0x02] = b2[0x02] + b2[0x05]; | |
118 b1[0x05] = (b2[0x02] - b2[0x05]) * costab[2]; | |
119 b1[0x03] = b2[0x03] + b2[0x04]; | |
120 b1[0x04] = (b2[0x03] - b2[0x04]) * costab[3]; | |
121 | |
122 b1[0x08] = b2[0x08] + b2[0x0F]; | |
123 b1[0x0F] = (b2[0x0F] - b2[0x08]) * costab[0]; | |
124 b1[0x09] = b2[0x09] + b2[0x0E]; | |
125 b1[0x0E] = (b2[0x0E] - b2[0x09]) * costab[1]; | |
126 b1[0x0A] = b2[0x0A] + b2[0x0D]; | |
127 b1[0x0D] = (b2[0x0D] - b2[0x0A]) * costab[2]; | |
128 b1[0x0B] = b2[0x0B] + b2[0x0C]; | |
129 b1[0x0C] = (b2[0x0C] - b2[0x0B]) * costab[3]; | |
130 | |
131 b1[0x10] = b2[0x10] + b2[0x17]; | |
132 b1[0x17] = (b2[0x10] - b2[0x17]) * costab[0]; | |
133 b1[0x11] = b2[0x11] + b2[0x16]; | |
134 b1[0x16] = (b2[0x11] - b2[0x16]) * costab[1]; | |
135 b1[0x12] = b2[0x12] + b2[0x15]; | |
136 b1[0x15] = (b2[0x12] - b2[0x15]) * costab[2]; | |
137 b1[0x13] = b2[0x13] + b2[0x14]; | |
138 b1[0x14] = (b2[0x13] - b2[0x14]) * costab[3]; | |
139 | |
140 b1[0x18] = b2[0x18] + b2[0x1F]; | |
141 b1[0x1F] = (b2[0x1F] - b2[0x18]) * costab[0]; | |
142 b1[0x19] = b2[0x19] + b2[0x1E]; | |
143 b1[0x1E] = (b2[0x1E] - b2[0x19]) * costab[1]; | |
144 b1[0x1A] = b2[0x1A] + b2[0x1D]; | |
145 b1[0x1D] = (b2[0x1D] - b2[0x1A]) * costab[2]; | |
146 b1[0x1B] = b2[0x1B] + b2[0x1C]; | |
147 b1[0x1C] = (b2[0x1C] - b2[0x1B]) * costab[3]; | |
148 } | |
149 | |
150 { | |
12131
d155623271e3
fix symbol clashes when linking with libmp3lame including mp3 decoder, man, mp3lib is so much bloated
alex
parents:
1
diff
changeset
|
151 register real const cos0 = mp3lib_pnts[3][0]; |
d155623271e3
fix symbol clashes when linking with libmp3lame including mp3 decoder, man, mp3lib is so much bloated
alex
parents:
1
diff
changeset
|
152 register real const cos1 = mp3lib_pnts[3][1]; |
1 | 153 |
154 b2[0x00] = b1[0x00] + b1[0x03]; | |
155 b2[0x03] = (b1[0x00] - b1[0x03]) * cos0; | |
156 b2[0x01] = b1[0x01] + b1[0x02]; | |
157 b2[0x02] = (b1[0x01] - b1[0x02]) * cos1; | |
158 | |
159 b2[0x04] = b1[0x04] + b1[0x07]; | |
160 b2[0x07] = (b1[0x07] - b1[0x04]) * cos0; | |
161 b2[0x05] = b1[0x05] + b1[0x06]; | |
162 b2[0x06] = (b1[0x06] - b1[0x05]) * cos1; | |
163 | |
164 b2[0x08] = b1[0x08] + b1[0x0B]; | |
165 b2[0x0B] = (b1[0x08] - b1[0x0B]) * cos0; | |
166 b2[0x09] = b1[0x09] + b1[0x0A]; | |
167 b2[0x0A] = (b1[0x09] - b1[0x0A]) * cos1; | |
168 | |
169 b2[0x0C] = b1[0x0C] + b1[0x0F]; | |
170 b2[0x0F] = (b1[0x0F] - b1[0x0C]) * cos0; | |
171 b2[0x0D] = b1[0x0D] + b1[0x0E]; | |
172 b2[0x0E] = (b1[0x0E] - b1[0x0D]) * cos1; | |
173 | |
174 b2[0x10] = b1[0x10] + b1[0x13]; | |
175 b2[0x13] = (b1[0x10] - b1[0x13]) * cos0; | |
176 b2[0x11] = b1[0x11] + b1[0x12]; | |
177 b2[0x12] = (b1[0x11] - b1[0x12]) * cos1; | |
178 | |
179 b2[0x14] = b1[0x14] + b1[0x17]; | |
180 b2[0x17] = (b1[0x17] - b1[0x14]) * cos0; | |
181 b2[0x15] = b1[0x15] + b1[0x16]; | |
182 b2[0x16] = (b1[0x16] - b1[0x15]) * cos1; | |
183 | |
184 b2[0x18] = b1[0x18] + b1[0x1B]; | |
185 b2[0x1B] = (b1[0x18] - b1[0x1B]) * cos0; | |
186 b2[0x19] = b1[0x19] + b1[0x1A]; | |
187 b2[0x1A] = (b1[0x19] - b1[0x1A]) * cos1; | |
188 | |
189 b2[0x1C] = b1[0x1C] + b1[0x1F]; | |
190 b2[0x1F] = (b1[0x1F] - b1[0x1C]) * cos0; | |
191 b2[0x1D] = b1[0x1D] + b1[0x1E]; | |
192 b2[0x1E] = (b1[0x1E] - b1[0x1D]) * cos1; | |
193 } | |
194 | |
195 { | |
12131
d155623271e3
fix symbol clashes when linking with libmp3lame including mp3 decoder, man, mp3lib is so much bloated
alex
parents:
1
diff
changeset
|
196 register real const cos0 = mp3lib_pnts[4][0]; |
1 | 197 |
198 b1[0x00] = b2[0x00] + b2[0x01]; | |
199 b1[0x01] = (b2[0x00] - b2[0x01]) * cos0; | |
200 b1[0x02] = b2[0x02] + b2[0x03]; | |
201 b1[0x03] = (b2[0x03] - b2[0x02]) * cos0; | |
202 b1[0x02] += b1[0x03]; | |
203 | |
204 b1[0x04] = b2[0x04] + b2[0x05]; | |
205 b1[0x05] = (b2[0x04] - b2[0x05]) * cos0; | |
206 b1[0x06] = b2[0x06] + b2[0x07]; | |
207 b1[0x07] = (b2[0x07] - b2[0x06]) * cos0; | |
208 b1[0x06] += b1[0x07]; | |
209 b1[0x04] += b1[0x06]; | |
210 b1[0x06] += b1[0x05]; | |
211 b1[0x05] += b1[0x07]; | |
212 | |
213 b1[0x08] = b2[0x08] + b2[0x09]; | |
214 b1[0x09] = (b2[0x08] - b2[0x09]) * cos0; | |
215 b1[0x0A] = b2[0x0A] + b2[0x0B]; | |
216 b1[0x0B] = (b2[0x0B] - b2[0x0A]) * cos0; | |
217 b1[0x0A] += b1[0x0B]; | |
218 | |
219 b1[0x0C] = b2[0x0C] + b2[0x0D]; | |
220 b1[0x0D] = (b2[0x0C] - b2[0x0D]) * cos0; | |
221 b1[0x0E] = b2[0x0E] + b2[0x0F]; | |
222 b1[0x0F] = (b2[0x0F] - b2[0x0E]) * cos0; | |
223 b1[0x0E] += b1[0x0F]; | |
224 b1[0x0C] += b1[0x0E]; | |
225 b1[0x0E] += b1[0x0D]; | |
226 b1[0x0D] += b1[0x0F]; | |
227 | |
228 b1[0x10] = b2[0x10] + b2[0x11]; | |
229 b1[0x11] = (b2[0x10] - b2[0x11]) * cos0; | |
230 b1[0x12] = b2[0x12] + b2[0x13]; | |
231 b1[0x13] = (b2[0x13] - b2[0x12]) * cos0; | |
232 b1[0x12] += b1[0x13]; | |
233 | |
234 b1[0x14] = b2[0x14] + b2[0x15]; | |
235 b1[0x15] = (b2[0x14] - b2[0x15]) * cos0; | |
236 b1[0x16] = b2[0x16] + b2[0x17]; | |
237 b1[0x17] = (b2[0x17] - b2[0x16]) * cos0; | |
238 b1[0x16] += b1[0x17]; | |
239 b1[0x14] += b1[0x16]; | |
240 b1[0x16] += b1[0x15]; | |
241 b1[0x15] += b1[0x17]; | |
242 | |
243 b1[0x18] = b2[0x18] + b2[0x19]; | |
244 b1[0x19] = (b2[0x18] - b2[0x19]) * cos0; | |
245 b1[0x1A] = b2[0x1A] + b2[0x1B]; | |
246 b1[0x1B] = (b2[0x1B] - b2[0x1A]) * cos0; | |
247 b1[0x1A] += b1[0x1B]; | |
248 | |
249 b1[0x1C] = b2[0x1C] + b2[0x1D]; | |
250 b1[0x1D] = (b2[0x1C] - b2[0x1D]) * cos0; | |
251 b1[0x1E] = b2[0x1E] + b2[0x1F]; | |
252 b1[0x1F] = (b2[0x1F] - b2[0x1E]) * cos0; | |
253 b1[0x1E] += b1[0x1F]; | |
254 b1[0x1C] += b1[0x1E]; | |
255 b1[0x1E] += b1[0x1D]; | |
256 b1[0x1D] += b1[0x1F]; | |
257 } | |
258 | |
259 out0[0x10 * 16] = b1[0x00]; | |
260 out0[0x10 * 12] = b1[0x04]; | |
261 out0[0x10 * 8] = b1[0x02]; | |
262 out0[0x10 * 4] = b1[0x06]; | |
263 out0[0x10 * 0] = b1[0x01]; | |
264 out1[0x10 * 0] = b1[0x01]; | |
265 out1[0x10 * 4] = b1[0x05]; | |
266 out1[0x10 * 8] = b1[0x03]; | |
267 out1[0x10 * 12] = b1[0x07]; | |
268 | |
269 b1[0x08] += b1[0x0C]; | |
270 out0[0x10 * 14] = b1[0x08]; | |
271 b1[0x0C] += b1[0x0a]; | |
272 out0[0x10 * 10] = b1[0x0C]; | |
273 b1[0x0A] += b1[0x0E]; | |
274 out0[0x10 * 6] = b1[0x0A]; | |
275 b1[0x0E] += b1[0x09]; | |
276 out0[0x10 * 2] = b1[0x0E]; | |
277 b1[0x09] += b1[0x0D]; | |
278 out1[0x10 * 2] = b1[0x09]; | |
279 b1[0x0D] += b1[0x0B]; | |
280 out1[0x10 * 6] = b1[0x0D]; | |
281 b1[0x0B] += b1[0x0F]; | |
282 out1[0x10 * 10] = b1[0x0B]; | |
283 out1[0x10 * 14] = b1[0x0F]; | |
284 | |
285 b1[0x18] += b1[0x1C]; | |
286 out0[0x10 * 15] = b1[0x10] + b1[0x18]; | |
287 out0[0x10 * 13] = b1[0x18] + b1[0x14]; | |
288 b1[0x1C] += b1[0x1a]; | |
289 out0[0x10 * 11] = b1[0x14] + b1[0x1C]; | |
290 out0[0x10 * 9] = b1[0x1C] + b1[0x12]; | |
291 b1[0x1A] += b1[0x1E]; | |
292 out0[0x10 * 7] = b1[0x12] + b1[0x1A]; | |
293 out0[0x10 * 5] = b1[0x1A] + b1[0x16]; | |
294 b1[0x1E] += b1[0x19]; | |
295 out0[0x10 * 3] = b1[0x16] + b1[0x1E]; | |
296 out0[0x10 * 1] = b1[0x1E] + b1[0x11]; | |
297 b1[0x19] += b1[0x1D]; | |
298 out1[0x10 * 1] = b1[0x11] + b1[0x19]; | |
299 out1[0x10 * 3] = b1[0x19] + b1[0x15]; | |
300 b1[0x1D] += b1[0x1B]; | |
301 out1[0x10 * 5] = b1[0x15] + b1[0x1D]; | |
302 out1[0x10 * 7] = b1[0x1D] + b1[0x13]; | |
303 b1[0x1B] += b1[0x1F]; | |
304 out1[0x10 * 9] = b1[0x13] + b1[0x1B]; | |
305 out1[0x10 * 11] = b1[0x1B] + b1[0x17]; | |
306 out1[0x10 * 13] = b1[0x17] + b1[0x1F]; | |
307 out1[0x10 * 15] = b1[0x1F]; | |
308 } | |
309 | |
310 /* | |
311 * the call via mpg123_dct64 is a trick to force GCC to use | |
312 * (new) registers for the b1,b2 pointer to the bufs[xx] field | |
313 */ | |
314 void mpg123_dct64(real * a, real * b, real * c) | |
315 { | |
316 real bufs[0x40]; | |
317 | |
318 mpg123_dct64_1(a, b, bufs, bufs + 0x20, c); | |
319 } |