00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #include "mpeg3private.h"
00030 #include "mpeg3protos.h"
00031 #include "tables.h"
00032
00033 #include <math.h>
00034
00035 int mpeg3audio_dct64_1(float *out0, float *out1, float *b1, float *b2, float *samples)
00036 {
00037 register float *costab = mpeg3_pnts[0];
00038
00039 b1[0x00] = samples[0x00] + samples[0x1F];
00040 b1[0x01] = samples[0x01] + samples[0x1E];
00041 b1[0x1F] = (samples[0x00] - samples[0x1F]) * costab[0x0];
00042 b1[0x1E] = (samples[0x01] - samples[0x1E]) * costab[0x1];
00043
00044 b1[0x02] = samples[0x02] + samples[0x1D];
00045 b1[0x03] = samples[0x03] + samples[0x1C];
00046 b1[0x1D] = (samples[0x02] - samples[0x1D]) * costab[0x2];
00047 b1[0x1C] = (samples[0x03] - samples[0x1C]) * costab[0x3];
00048
00049 b1[0x04] = samples[0x04] + samples[0x1B];
00050 b1[0x05] = samples[0x05] + samples[0x1A];
00051 b1[0x1B] = (samples[0x04] - samples[0x1B]) * costab[0x4];
00052 b1[0x1A] = (samples[0x05] - samples[0x1A]) * costab[0x5];
00053
00054 b1[0x06] = samples[0x06] + samples[0x19];
00055 b1[0x07] = samples[0x07] + samples[0x18];
00056 b1[0x19] = (samples[0x06] - samples[0x19]) * costab[0x6];
00057 b1[0x18] = (samples[0x07] - samples[0x18]) * costab[0x7];
00058
00059 b1[0x08] = samples[0x08] + samples[0x17];
00060 b1[0x09] = samples[0x09] + samples[0x16];
00061 b1[0x17] = (samples[0x08] - samples[0x17]) * costab[0x8];
00062 b1[0x16] = (samples[0x09] - samples[0x16]) * costab[0x9];
00063
00064 b1[0x0A] = samples[0x0A] + samples[0x15];
00065 b1[0x0B] = samples[0x0B] + samples[0x14];
00066 b1[0x15] = (samples[0x0A] - samples[0x15]) * costab[0xA];
00067 b1[0x14] = (samples[0x0B] - samples[0x14]) * costab[0xB];
00068
00069 b1[0x0C] = samples[0x0C] + samples[0x13];
00070 b1[0x0D] = samples[0x0D] + samples[0x12];
00071 b1[0x13] = (samples[0x0C] - samples[0x13]) * costab[0xC];
00072 b1[0x12] = (samples[0x0D] - samples[0x12]) * costab[0xD];
00073
00074 b1[0x0E] = samples[0x0E] + samples[0x11];
00075 b1[0x0F] = samples[0x0F] + samples[0x10];
00076 b1[0x11] = (samples[0x0E] - samples[0x11]) * costab[0xE];
00077 b1[0x10] = (samples[0x0F] - samples[0x10]) * costab[0xF];
00078
00079 costab = mpeg3_pnts[1];
00080
00081 b2[0x00] = b1[0x00] + b1[0x0F];
00082 b2[0x01] = b1[0x01] + b1[0x0E];
00083 b2[0x0F] = (b1[0x00] - b1[0x0F]) * costab[0];
00084 b2[0x0E] = (b1[0x01] - b1[0x0E]) * costab[1];
00085
00086 b2[0x02] = b1[0x02] + b1[0x0D];
00087 b2[0x03] = b1[0x03] + b1[0x0C];
00088 b2[0x0D] = (b1[0x02] - b1[0x0D]) * costab[2];
00089 b2[0x0C] = (b1[0x03] - b1[0x0C]) * costab[3];
00090
00091 b2[0x04] = b1[0x04] + b1[0x0B];
00092 b2[0x05] = b1[0x05] + b1[0x0A];
00093 b2[0x0B] = (b1[0x04] - b1[0x0B]) * costab[4];
00094 b2[0x0A] = (b1[0x05] - b1[0x0A]) * costab[5];
00095
00096 b2[0x06] = b1[0x06] + b1[0x09];
00097 b2[0x07] = b1[0x07] + b1[0x08];
00098 b2[0x09] = (b1[0x06] - b1[0x09]) * costab[6];
00099 b2[0x08] = (b1[0x07] - b1[0x08]) * costab[7];
00100
00101
00102
00103 b2[0x10] = b1[0x10] + b1[0x1F];
00104 b2[0x11] = b1[0x11] + b1[0x1E];
00105 b2[0x1F] = (b1[0x1F] - b1[0x10]) * costab[0];
00106 b2[0x1E] = (b1[0x1E] - b1[0x11]) * costab[1];
00107
00108 b2[0x12] = b1[0x12] + b1[0x1D];
00109 b2[0x13] = b1[0x13] + b1[0x1C];
00110 b2[0x1D] = (b1[0x1D] - b1[0x12]) * costab[2];
00111 b2[0x1C] = (b1[0x1C] - b1[0x13]) * costab[3];
00112
00113 b2[0x14] = b1[0x14] + b1[0x1B];
00114 b2[0x15] = b1[0x15] + b1[0x1A];
00115 b2[0x1B] = (b1[0x1B] - b1[0x14]) * costab[4];
00116 b2[0x1A] = (b1[0x1A] - b1[0x15]) * costab[5];
00117
00118 b2[0x16] = b1[0x16] + b1[0x19];
00119 b2[0x17] = b1[0x17] + b1[0x18];
00120 b2[0x19] = (b1[0x19] - b1[0x16]) * costab[6];
00121 b2[0x18] = (b1[0x18] - b1[0x17]) * costab[7];
00122
00123 costab = mpeg3_pnts[2];
00124
00125 b1[0x00] = b2[0x00] + b2[0x07];
00126 b1[0x07] = (b2[0x00] - b2[0x07]) * costab[0];
00127 b1[0x01] = b2[0x01] + b2[0x06];
00128 b1[0x06] = (b2[0x01] - b2[0x06]) * costab[1];
00129 b1[0x02] = b2[0x02] + b2[0x05];
00130 b1[0x05] = (b2[0x02] - b2[0x05]) * costab[2];
00131 b1[0x03] = b2[0x03] + b2[0x04];
00132 b1[0x04] = (b2[0x03] - b2[0x04]) * costab[3];
00133
00134 b1[0x08] = b2[0x08] + b2[0x0F];
00135 b1[0x0F] = (b2[0x0F] - b2[0x08]) * costab[0];
00136 b1[0x09] = b2[0x09] + b2[0x0E];
00137 b1[0x0E] = (b2[0x0E] - b2[0x09]) * costab[1];
00138 b1[0x0A] = b2[0x0A] + b2[0x0D];
00139 b1[0x0D] = (b2[0x0D] - b2[0x0A]) * costab[2];
00140 b1[0x0B] = b2[0x0B] + b2[0x0C];
00141 b1[0x0C] = (b2[0x0C] - b2[0x0B]) * costab[3];
00142
00143 b1[0x10] = b2[0x10] + b2[0x17];
00144 b1[0x17] = (b2[0x10] - b2[0x17]) * costab[0];
00145 b1[0x11] = b2[0x11] + b2[0x16];
00146 b1[0x16] = (b2[0x11] - b2[0x16]) * costab[1];
00147 b1[0x12] = b2[0x12] + b2[0x15];
00148 b1[0x15] = (b2[0x12] - b2[0x15]) * costab[2];
00149 b1[0x13] = b2[0x13] + b2[0x14];
00150 b1[0x14] = (b2[0x13] - b2[0x14]) * costab[3];
00151
00152 b1[0x18] = b2[0x18] + b2[0x1F];
00153 b1[0x1F] = (b2[0x1F] - b2[0x18]) * costab[0];
00154 b1[0x19] = b2[0x19] + b2[0x1E];
00155 b1[0x1E] = (b2[0x1E] - b2[0x19]) * costab[1];
00156 b1[0x1A] = b2[0x1A] + b2[0x1D];
00157 b1[0x1D] = (b2[0x1D] - b2[0x1A]) * costab[2];
00158 b1[0x1B] = b2[0x1B] + b2[0x1C];
00159 b1[0x1C] = (b2[0x1C] - b2[0x1B]) * costab[3];
00160
00161 {
00162 register float const cos0 = mpeg3_pnts[3][0];
00163 register float const cos1 = mpeg3_pnts[3][1];
00164
00165 b2[0x00] = b1[0x00] + b1[0x03];
00166 b2[0x03] = (b1[0x00] - b1[0x03]) * cos0;
00167 b2[0x01] = b1[0x01] + b1[0x02];
00168 b2[0x02] = (b1[0x01] - b1[0x02]) * cos1;
00169
00170 b2[0x04] = b1[0x04] + b1[0x07];
00171 b2[0x07] = (b1[0x07] - b1[0x04]) * cos0;
00172 b2[0x05] = b1[0x05] + b1[0x06];
00173 b2[0x06] = (b1[0x06] - b1[0x05]) * cos1;
00174
00175 b2[0x08] = b1[0x08] + b1[0x0B];
00176 b2[0x0B] = (b1[0x08] - b1[0x0B]) * cos0;
00177 b2[0x09] = b1[0x09] + b1[0x0A];
00178 b2[0x0A] = (b1[0x09] - b1[0x0A]) * cos1;
00179
00180 b2[0x0C] = b1[0x0C] + b1[0x0F];
00181 b2[0x0F] = (b1[0x0F] - b1[0x0C]) * cos0;
00182 b2[0x0D] = b1[0x0D] + b1[0x0E];
00183 b2[0x0E] = (b1[0x0E] - b1[0x0D]) * cos1;
00184
00185 b2[0x10] = b1[0x10] + b1[0x13];
00186 b2[0x13] = (b1[0x10] - b1[0x13]) * cos0;
00187 b2[0x11] = b1[0x11] + b1[0x12];
00188 b2[0x12] = (b1[0x11] - b1[0x12]) * cos1;
00189
00190 b2[0x14] = b1[0x14] + b1[0x17];
00191 b2[0x17] = (b1[0x17] - b1[0x14]) * cos0;
00192 b2[0x15] = b1[0x15] + b1[0x16];
00193 b2[0x16] = (b1[0x16] - b1[0x15]) * cos1;
00194
00195 b2[0x18] = b1[0x18] + b1[0x1B];
00196 b2[0x1B] = (b1[0x18] - b1[0x1B]) * cos0;
00197 b2[0x19] = b1[0x19] + b1[0x1A];
00198 b2[0x1A] = (b1[0x19] - b1[0x1A]) * cos1;
00199
00200 b2[0x1C] = b1[0x1C] + b1[0x1F];
00201 b2[0x1F] = (b1[0x1F] - b1[0x1C]) * cos0;
00202 b2[0x1D] = b1[0x1D] + b1[0x1E];
00203 b2[0x1E] = (b1[0x1E] - b1[0x1D]) * cos1;
00204 }
00205
00206 {
00207 register float const cos0 = mpeg3_pnts[4][0];
00208
00209 b1[0x00] = b2[0x00] + b2[0x01];
00210 b1[0x01] = (b2[0x00] - b2[0x01]) * cos0;
00211 b1[0x02] = b2[0x02] + b2[0x03];
00212 b1[0x03] = (b2[0x03] - b2[0x02]) * cos0;
00213 b1[0x02] += b1[0x03];
00214
00215 b1[0x04] = b2[0x04] + b2[0x05];
00216 b1[0x05] = (b2[0x04] - b2[0x05]) * cos0;
00217 b1[0x06] = b2[0x06] + b2[0x07];
00218 b1[0x07] = (b2[0x07] - b2[0x06]) * cos0;
00219 b1[0x06] += b1[0x07];
00220 b1[0x04] += b1[0x06];
00221 b1[0x06] += b1[0x05];
00222 b1[0x05] += b1[0x07];
00223
00224 b1[0x08] = b2[0x08] + b2[0x09];
00225 b1[0x09] = (b2[0x08] - b2[0x09]) * cos0;
00226 b1[0x0A] = b2[0x0A] + b2[0x0B];
00227 b1[0x0B] = (b2[0x0B] - b2[0x0A]) * cos0;
00228 b1[0x0A] += b1[0x0B];
00229
00230 b1[0x0C] = b2[0x0C] + b2[0x0D];
00231 b1[0x0D] = (b2[0x0C] - b2[0x0D]) * cos0;
00232 b1[0x0E] = b2[0x0E] + b2[0x0F];
00233 b1[0x0F] = (b2[0x0F] - b2[0x0E]) * cos0;
00234 b1[0x0E] += b1[0x0F];
00235 b1[0x0C] += b1[0x0E];
00236 b1[0x0E] += b1[0x0D];
00237 b1[0x0D] += b1[0x0F];
00238
00239 b1[0x10] = b2[0x10] + b2[0x11];
00240 b1[0x11] = (b2[0x10] - b2[0x11]) * cos0;
00241 b1[0x12] = b2[0x12] + b2[0x13];
00242 b1[0x13] = (b2[0x13] - b2[0x12]) * cos0;
00243 b1[0x12] += b1[0x13];
00244
00245 b1[0x14] = b2[0x14] + b2[0x15];
00246 b1[0x15] = (b2[0x14] - b2[0x15]) * cos0;
00247 b1[0x16] = b2[0x16] + b2[0x17];
00248 b1[0x17] = (b2[0x17] - b2[0x16]) * cos0;
00249 b1[0x16] += b1[0x17];
00250 b1[0x14] += b1[0x16];
00251 b1[0x16] += b1[0x15];
00252 b1[0x15] += b1[0x17];
00253
00254 b1[0x18] = b2[0x18] + b2[0x19];
00255 b1[0x19] = (b2[0x18] - b2[0x19]) * cos0;
00256 b1[0x1A] = b2[0x1A] + b2[0x1B];
00257 b1[0x1B] = (b2[0x1B] - b2[0x1A]) * cos0;
00258 b1[0x1A] += b1[0x1B];
00259
00260 b1[0x1C] = b2[0x1C] + b2[0x1D];
00261 b1[0x1D] = (b2[0x1C] - b2[0x1D]) * cos0;
00262 b1[0x1E] = b2[0x1E] + b2[0x1F];
00263 b1[0x1F] = (b2[0x1F] - b2[0x1E]) * cos0;
00264 b1[0x1E] += b1[0x1F];
00265 b1[0x1C] += b1[0x1E];
00266 b1[0x1E] += b1[0x1D];
00267 b1[0x1D] += b1[0x1F];
00268 }
00269
00270 out0[0x10*16] = b1[0x00];
00271 out0[0x10*12] = b1[0x04];
00272 out0[0x10* 8] = b1[0x02];
00273 out0[0x10* 4] = b1[0x06];
00274 out0[0x10* 0] = b1[0x01];
00275 out1[0x10* 0] = b1[0x01];
00276 out1[0x10* 4] = b1[0x05];
00277 out1[0x10* 8] = b1[0x03];
00278 out1[0x10*12] = b1[0x07];
00279
00280 out0[0x10*14] = b1[0x08] + b1[0x0C];
00281 out0[0x10*10] = b1[0x0C] + b1[0x0a];
00282 out0[0x10* 6] = b1[0x0A] + b1[0x0E];
00283 out0[0x10* 2] = b1[0x0E] + b1[0x09];
00284 out1[0x10* 2] = b1[0x09] + b1[0x0D];
00285 out1[0x10* 6] = b1[0x0D] + b1[0x0B];
00286 out1[0x10*10] = b1[0x0B] + b1[0x0F];
00287 out1[0x10*14] = b1[0x0F];
00288
00289 {
00290 register float tmp;
00291 tmp = b1[0x18] + b1[0x1C];
00292 out0[0x10*15] = tmp + b1[0x10];
00293 out0[0x10*13] = tmp + b1[0x14];
00294 tmp = b1[0x1C] + b1[0x1A];
00295 out0[0x10*11] = tmp + b1[0x14];
00296 out0[0x10* 9] = tmp + b1[0x12];
00297 tmp = b1[0x1A] + b1[0x1E];
00298 out0[0x10* 7] = tmp + b1[0x12];
00299 out0[0x10* 5] = tmp + b1[0x16];
00300 tmp = b1[0x1E] + b1[0x19];
00301 out0[0x10* 3] = tmp + b1[0x16];
00302 out0[0x10* 1] = tmp + b1[0x11];
00303 tmp = b1[0x19] + b1[0x1D];
00304 out1[0x10* 1] = tmp + b1[0x11];
00305 out1[0x10* 3] = tmp + b1[0x15];
00306 tmp = b1[0x1D] + b1[0x1B];
00307 out1[0x10* 5] = tmp + b1[0x15];
00308 out1[0x10* 7] = tmp + b1[0x13];
00309 tmp = b1[0x1B] + b1[0x1F];
00310 out1[0x10* 9] = tmp + b1[0x13];
00311 out1[0x10*11] = tmp + b1[0x17];
00312 out1[0x10*13] = b1[0x17] + b1[0x1F];
00313 out1[0x10*15] = b1[0x1F];
00314 }
00315 return 0;
00316 }
00317
00318
00319
00320
00321
00322 int mpeg3audio_dct64(float *a, float *b, float *c)
00323 {
00324 float bufs[0x40];
00325 return mpeg3audio_dct64_1(a, b, bufs, bufs + 0x20, c);
00326 }
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360 int mpeg3audio_dct36(float *inbuf, float *o1, float *o2, float *wintab, float *tsbuf)
00361 {
00362 float tmp[18];
00363
00364 {
00365 register float *in = inbuf;
00366
00367 in[17]+=in[16]; in[16]+=in[15]; in[15]+=in[14];
00368 in[14]+=in[13]; in[13]+=in[12]; in[12]+=in[11];
00369 in[11]+=in[10]; in[10]+=in[9]; in[9] +=in[8];
00370 in[8] +=in[7]; in[7] +=in[6]; in[6] +=in[5];
00371 in[5] +=in[4]; in[4] +=in[3]; in[3] +=in[2];
00372 in[2] +=in[1]; in[1] +=in[0];
00373
00374 in[17]+=in[15]; in[15]+=in[13]; in[13]+=in[11]; in[11]+=in[9];
00375 in[9] +=in[7]; in[7] +=in[5]; in[5] +=in[3]; in[3] +=in[1];
00376
00377
00378 {
00379 float t3;
00380 {
00381 float t0, t1, t2;
00382
00383 t0 = mpeg3_COS6_2 * (in[8] + in[16] - in[4]);
00384 t1 = mpeg3_COS6_2 * in[12];
00385
00386 t3 = in[0];
00387 t2 = t3 - t1 - t1;
00388 tmp[1] = tmp[7] = t2 - t0;
00389 tmp[4] = t2 + t0 + t0;
00390 t3 += t1;
00391
00392 t2 = mpeg3_COS6_1 * (in[10] + in[14] - in[2]);
00393 tmp[1] -= t2;
00394 tmp[7] += t2;
00395 }
00396 {
00397 float t0, t1, t2;
00398
00399 t0 = mpeg3_cos9[0] * (in[4] + in[8] );
00400 t1 = mpeg3_cos9[1] * (in[8] - in[16]);
00401 t2 = mpeg3_cos9[2] * (in[4] + in[16]);
00402
00403 tmp[2] = tmp[6] = t3 - t0 - t2;
00404 tmp[0] = tmp[8] = t3 + t0 + t1;
00405 tmp[3] = tmp[5] = t3 - t1 + t2;
00406 }
00407 }
00408 {
00409 float t1, t2, t3;
00410
00411 t1 = mpeg3_cos18[0] * (in[2] + in[10]);
00412 t2 = mpeg3_cos18[1] * (in[10] - in[14]);
00413 t3 = mpeg3_COS6_1 * in[6];
00414
00415 {
00416 float t0 = t1 + t2 + t3;
00417 tmp[0] += t0;
00418 tmp[8] -= t0;
00419 }
00420
00421 t2 -= t3;
00422 t1 -= t3;
00423
00424 t3 = mpeg3_cos18[2] * (in[2] + in[14]);
00425
00426 t1 += t3;
00427 tmp[3] += t1;
00428 tmp[5] -= t1;
00429
00430 t2 -= t3;
00431 tmp[2] += t2;
00432 tmp[6] -= t2;
00433 }
00434
00435
00436 {
00437 float t0, t1, t2, t3, t4, t5, t6, t7;
00438
00439 t1 = mpeg3_COS6_2 * in[13];
00440 t2 = mpeg3_COS6_2 * (in[9] + in[17] - in[5]);
00441
00442 t3 = in[1] + t1;
00443 t4 = in[1] - t1 - t1;
00444 t5 = t4 - t2;
00445
00446 t0 = mpeg3_cos9[0] * (in[5] + in[9]);
00447 t1 = mpeg3_cos9[1] * (in[9] - in[17]);
00448
00449 tmp[13] = (t4 + t2 + t2) * mpeg3_tfcos36[17-13];
00450 t2 = mpeg3_cos9[2] * (in[5] + in[17]);
00451
00452 t6 = t3 - t0 - t2;
00453 t0 += t3 + t1;
00454 t3 += t2 - t1;
00455
00456 t2 = mpeg3_cos18[0] * (in[3] + in[11]);
00457 t4 = mpeg3_cos18[1] * (in[11] - in[15]);
00458 t7 = mpeg3_COS6_1 * in[7];
00459
00460 t1 = t2 + t4 + t7;
00461 tmp[17] = (t0 + t1) * mpeg3_tfcos36[17-17];
00462 tmp[9] = (t0 - t1) * mpeg3_tfcos36[17-9];
00463 t1 = mpeg3_cos18[2] * (in[3] + in[15]);
00464 t2 += t1 - t7;
00465
00466 tmp[14] = (t3 + t2) * mpeg3_tfcos36[17-14];
00467 t0 = mpeg3_COS6_1 * (in[11] + in[15] - in[3]);
00468 tmp[12] = (t3 - t2) * mpeg3_tfcos36[17-12];
00469
00470 t4 -= t1 + t7;
00471
00472 tmp[16] = (t5 - t0) * mpeg3_tfcos36[17-16];
00473 tmp[10] = (t5 + t0) * mpeg3_tfcos36[17-10];
00474 tmp[15] = (t6 + t4) * mpeg3_tfcos36[17-15];
00475 tmp[11] = (t6 - t4) * mpeg3_tfcos36[17-11];
00476 }
00477
00478 #define MACRO(v) \
00479 { \
00480 float tmpval; \
00481 tmpval = tmp[(v)] + tmp[17-(v)]; \
00482 out2[9+(v)] = tmpval * w[27+(v)]; \
00483 out2[8-(v)] = tmpval * w[26-(v)]; \
00484 tmpval = tmp[(v)] - tmp[17-(v)]; \
00485 ts[SBLIMIT*(8-(v))] = out1[8-(v)] + tmpval * w[8-(v)]; \
00486 ts[SBLIMIT*(9+(v))] = out1[9+(v)] + tmpval * w[9+(v)]; \
00487 }
00488
00489 {
00490 register float *out2 = o2;
00491 register float *w = wintab;
00492 register float *out1 = o1;
00493 register float *ts = tsbuf;
00494
00495 MACRO(0);
00496 MACRO(1);
00497 MACRO(2);
00498 MACRO(3);
00499 MACRO(4);
00500 MACRO(5);
00501 MACRO(6);
00502 MACRO(7);
00503 MACRO(8);
00504 }
00505 }
00506 return 0;
00507 }
00508
00509
00510
00511
00512 int mpeg3audio_dct12(float *in,float *rawout1,float *rawout2,register float *wi,register float *ts)
00513 {
00514 #define DCT12_PART1 \
00515 in5 = in[5*3]; \
00516 in5 += (in4 = in[4*3]); \
00517 in4 += (in3 = in[3*3]); \
00518 in3 += (in2 = in[2*3]); \
00519 in2 += (in1 = in[1*3]); \
00520 in1 += (in0 = in[0*3]); \
00521 \
00522 in5 += in3; in3 += in1; \
00523 \
00524 in2 *= mpeg3_COS6_1; \
00525 in3 *= mpeg3_COS6_1; \
00526
00527 #define DCT12_PART2 \
00528 in0 += in4 * mpeg3_COS6_2; \
00529 \
00530 in4 = in0 + in2; \
00531 in0 -= in2; \
00532 \
00533 in1 += in5 * mpeg3_COS6_2; \
00534 \
00535 in5 = (in1 + in3) * mpeg3_tfcos12[0]; \
00536 in1 = (in1 - in3) * mpeg3_tfcos12[2]; \
00537 \
00538 in3 = in4 + in5; \
00539 in4 -= in5; \
00540 \
00541 in2 = in0 + in1; \
00542 in0 -= in1;
00543
00544
00545 {
00546 float in0,in1,in2,in3,in4,in5;
00547 register float *out1 = rawout1;
00548 ts[SBLIMIT*0] = out1[0]; ts[SBLIMIT*1] = out1[1]; ts[SBLIMIT*2] = out1[2];
00549 ts[SBLIMIT*3] = out1[3]; ts[SBLIMIT*4] = out1[4]; ts[SBLIMIT*5] = out1[5];
00550
00551 DCT12_PART1
00552
00553 {
00554 float tmp0,tmp1 = (in0 - in4);
00555 {
00556 float tmp2 = (in1 - in5) * mpeg3_tfcos12[1];
00557 tmp0 = tmp1 + tmp2;
00558 tmp1 -= tmp2;
00559 }
00560 ts[(17-1)*SBLIMIT] = out1[17-1] + tmp0 * wi[11-1];
00561 ts[(12+1)*SBLIMIT] = out1[12+1] + tmp0 * wi[6+1];
00562 ts[(6 +1)*SBLIMIT] = out1[6 +1] + tmp1 * wi[1];
00563 ts[(11-1)*SBLIMIT] = out1[11-1] + tmp1 * wi[5-1];
00564 }
00565
00566 DCT12_PART2
00567
00568 ts[(17-0)*SBLIMIT] = out1[17-0] + in2 * wi[11-0];
00569 ts[(12+0)*SBLIMIT] = out1[12+0] + in2 * wi[6+0];
00570 ts[(12+2)*SBLIMIT] = out1[12+2] + in3 * wi[6+2];
00571 ts[(17-2)*SBLIMIT] = out1[17-2] + in3 * wi[11-2];
00572
00573 ts[(6+0)*SBLIMIT] = out1[6+0] + in0 * wi[0];
00574 ts[(11-0)*SBLIMIT] = out1[11-0] + in0 * wi[5-0];
00575 ts[(6+2)*SBLIMIT] = out1[6+2] + in4 * wi[2];
00576 ts[(11-2)*SBLIMIT] = out1[11-2] + in4 * wi[5-2];
00577 }
00578
00579 in++;
00580
00581 {
00582 float in0,in1,in2,in3,in4,in5;
00583 register float *out2 = rawout2;
00584
00585 DCT12_PART1
00586
00587 {
00588 float tmp0,tmp1 = (in0 - in4);
00589 {
00590 float tmp2 = (in1 - in5) * mpeg3_tfcos12[1];
00591 tmp0 = tmp1 + tmp2;
00592 tmp1 -= tmp2;
00593 }
00594 out2[5-1] = tmp0 * wi[11-1];
00595 out2[0+1] = tmp0 * wi[6+1];
00596 ts[(12+1)*SBLIMIT] += tmp1 * wi[1];
00597 ts[(17-1)*SBLIMIT] += tmp1 * wi[5-1];
00598 }
00599
00600 DCT12_PART2
00601
00602 out2[5-0] = in2 * wi[11-0];
00603 out2[0+0] = in2 * wi[6+0];
00604 out2[0+2] = in3 * wi[6+2];
00605 out2[5-2] = in3 * wi[11-2];
00606
00607 ts[(12+0)*SBLIMIT] += in0 * wi[0];
00608 ts[(17-0)*SBLIMIT] += in0 * wi[5-0];
00609 ts[(12+2)*SBLIMIT] += in4 * wi[2];
00610 ts[(17-2)*SBLIMIT] += in4 * wi[5-2];
00611 }
00612
00613 in++;
00614
00615 {
00616 float in0,in1,in2,in3,in4,in5;
00617 register float *out2 = rawout2;
00618 out2[12]=out2[13]=out2[14]=out2[15]=out2[16]=out2[17]=0.0;
00619
00620 DCT12_PART1
00621
00622 {
00623 float tmp0,tmp1 = (in0 - in4);
00624 {
00625 float tmp2 = (in1 - in5) * mpeg3_tfcos12[1];
00626 tmp0 = tmp1 + tmp2;
00627 tmp1 -= tmp2;
00628 }
00629 out2[11-1] = tmp0 * wi[11-1];
00630 out2[6 +1] = tmp0 * wi[6+1];
00631 out2[0+1] += tmp1 * wi[1];
00632 out2[5-1] += tmp1 * wi[5-1];
00633 }
00634
00635 DCT12_PART2
00636
00637 out2[11-0] = in2 * wi[11-0];
00638 out2[6 +0] = in2 * wi[6+0];
00639 out2[6 +2] = in3 * wi[6+2];
00640 out2[11-2] = in3 * wi[11-2];
00641
00642 out2[0+0] += in0 * wi[0];
00643 out2[5-0] += in0 * wi[5-0];
00644 out2[0+2] += in4 * wi[2];
00645 out2[5-2] += in4 * wi[5-2];
00646 }
00647 return 0;
00648 }