Mercurial > audlegacy
comparison Plugins/Input/mpg123/dct64_i386.c @ 970:0f294f2b0a9b trunk
[svn] - integer-mode decoding accuracy improvements
author | nenolod |
---|---|
date | Wed, 26 Apr 2006 10:54:58 -0700 |
parents | fa848bd484d8 |
children | b5ae09a6c2f1 |
comparison
equal
deleted
inserted
replaced
969:971bd2b03ff5 | 970:0f294f2b0a9b |
---|---|
8 */ | 8 */ |
9 | 9 |
10 #include "mpg123.h" | 10 #include "mpg123.h" |
11 | 11 |
12 static void | 12 static void |
13 mpg123_dct64_1(real * out0, real * out1, real * b1, real * b2, real * samples) | 13 mpg123_dct64_1(mpgdec_real * out0, mpgdec_real * out1, mpgdec_real * b1, mpgdec_real * b2, mpgdec_real * samples) |
14 { | 14 { |
15 | 15 |
16 { | 16 { |
17 register real *costab = mpg123_pnts[0]; | 17 register mpgdec_real *costab = mpg123_pnts[0]; |
18 | 18 |
19 b1[0x00] = samples[0x00] + samples[0x1F]; | 19 b1[0x00] = samples[0x00] + samples[0x1F]; |
20 b1[0x1F] = (samples[0x00] - samples[0x1F]) * costab[0x0]; | 20 b1[0x1F] = (samples[0x00] - samples[0x1F]) * costab[0x0]; |
21 | 21 |
22 b1[0x01] = samples[0x01] + samples[0x1E]; | 22 b1[0x01] = samples[0x01] + samples[0x1E]; |
64 b1[0x0F] = samples[0x0F] + samples[0x10]; | 64 b1[0x0F] = samples[0x0F] + samples[0x10]; |
65 b1[0x10] = (samples[0x0F] - samples[0x10]) * costab[0xF]; | 65 b1[0x10] = (samples[0x0F] - samples[0x10]) * costab[0xF]; |
66 } | 66 } |
67 | 67 |
68 { | 68 { |
69 register real *costab = mpg123_pnts[1]; | 69 register mpgdec_real *costab = mpg123_pnts[1]; |
70 | 70 |
71 b2[0x00] = b1[0x00] + b1[0x0F]; | 71 b2[0x00] = b1[0x00] + b1[0x0F]; |
72 b2[0x0F] = (b1[0x00] - b1[0x0F]) * costab[0]; | 72 b2[0x0F] = (b1[0x00] - b1[0x0F]) * costab[0]; |
73 b2[0x01] = b1[0x01] + b1[0x0E]; | 73 b2[0x01] = b1[0x01] + b1[0x0E]; |
74 b2[0x0E] = (b1[0x01] - b1[0x0E]) * costab[1]; | 74 b2[0x0E] = (b1[0x01] - b1[0x0E]) * costab[1]; |
102 b2[0x17] = b1[0x17] + b1[0x18]; | 102 b2[0x17] = b1[0x17] + b1[0x18]; |
103 b2[0x18] = (b1[0x18] - b1[0x17]) * costab[7]; | 103 b2[0x18] = (b1[0x18] - b1[0x17]) * costab[7]; |
104 } | 104 } |
105 | 105 |
106 { | 106 { |
107 register real *costab = mpg123_pnts[2]; | 107 register mpgdec_real *costab = mpg123_pnts[2]; |
108 | 108 |
109 b1[0x00] = b2[0x00] + b2[0x07]; | 109 b1[0x00] = b2[0x00] + b2[0x07]; |
110 b1[0x07] = (b2[0x00] - b2[0x07]) * costab[0]; | 110 b1[0x07] = (b2[0x00] - b2[0x07]) * costab[0]; |
111 b1[0x01] = b2[0x01] + b2[0x06]; | 111 b1[0x01] = b2[0x01] + b2[0x06]; |
112 b1[0x06] = (b2[0x01] - b2[0x06]) * costab[1]; | 112 b1[0x06] = (b2[0x01] - b2[0x06]) * costab[1]; |
142 b1[0x1B] = b2[0x1B] + b2[0x1C]; | 142 b1[0x1B] = b2[0x1B] + b2[0x1C]; |
143 b1[0x1C] = (b2[0x1C] - b2[0x1B]) * costab[3]; | 143 b1[0x1C] = (b2[0x1C] - b2[0x1B]) * costab[3]; |
144 } | 144 } |
145 | 145 |
146 { | 146 { |
147 register real const cos0 = mpg123_pnts[3][0]; | 147 register mpgdec_real const cos0 = mpg123_pnts[3][0]; |
148 register real const cos1 = mpg123_pnts[3][1]; | 148 register mpgdec_real const cos1 = mpg123_pnts[3][1]; |
149 | 149 |
150 b2[0x00] = b1[0x00] + b1[0x03]; | 150 b2[0x00] = b1[0x00] + b1[0x03]; |
151 b2[0x03] = (b1[0x00] - b1[0x03]) * cos0; | 151 b2[0x03] = (b1[0x00] - b1[0x03]) * cos0; |
152 b2[0x01] = b1[0x01] + b1[0x02]; | 152 b2[0x01] = b1[0x01] + b1[0x02]; |
153 b2[0x02] = (b1[0x01] - b1[0x02]) * cos1; | 153 b2[0x02] = (b1[0x01] - b1[0x02]) * cos1; |
187 b2[0x1D] = b1[0x1D] + b1[0x1E]; | 187 b2[0x1D] = b1[0x1D] + b1[0x1E]; |
188 b2[0x1E] = (b1[0x1E] - b1[0x1D]) * cos1; | 188 b2[0x1E] = (b1[0x1E] - b1[0x1D]) * cos1; |
189 } | 189 } |
190 | 190 |
191 { | 191 { |
192 register real const cos0 = mpg123_pnts[4][0]; | 192 register mpgdec_real const cos0 = mpg123_pnts[4][0]; |
193 | 193 |
194 b1[0x00] = b2[0x00] + b2[0x01]; | 194 b1[0x00] = b2[0x00] + b2[0x01]; |
195 b1[0x01] = (b2[0x00] - b2[0x01]) * cos0; | 195 b1[0x01] = (b2[0x00] - b2[0x01]) * cos0; |
196 b1[0x02] = b2[0x02] + b2[0x03]; | 196 b1[0x02] = b2[0x02] + b2[0x03]; |
197 b1[0x03] = (b2[0x03] - b2[0x02]) * cos0; | 197 b1[0x03] = (b2[0x03] - b2[0x02]) * cos0; |
306 /* | 306 /* |
307 * the call via mpg123_dct64 is a trick to force GCC to use | 307 * the call via mpg123_dct64 is a trick to force GCC to use |
308 * (new) registers for the b1,b2 pointer to the bufs[xx] field | 308 * (new) registers for the b1,b2 pointer to the bufs[xx] field |
309 */ | 309 */ |
310 void | 310 void |
311 mpg123_dct64(real * a, real * b, real * c) | 311 mpg123_dct64(mpgdec_real * a, mpgdec_real * b, mpgdec_real * c) |
312 { | 312 { |
313 real bufs[0x40]; | 313 mpgdec_real bufs[0x40]; |
314 | 314 |
315 mpg123_dct64_1(a, b, bufs, bufs + 0x20, c); | 315 mpg123_dct64_1(a, b, bufs, bufs + 0x20, c); |
316 } | 316 } |