45 #define C8_1R 0.49039264020161522456
46 #define C8_1I 0.09754516100806413392
47 #define C8_2R 0.46193976625564337806
48 #define C8_2I 0.19134171618254488586
49 #define C8_3R 0.41573480615127261854
50 #define C8_3I 0.27778511650980111237
51 #define C8_4R 0.35355339059327376220
52 #define W8_4R 0.70710678118654752440
55 void ddct8x8s(
int isgn,
double **a)
58 double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
62 for (j = 0; j <= 7; j++) {
63 x0r = a[0][j] + a[7][j];
64 x1r = a[0][j] - a[7][j];
65 x0i = a[2][j] + a[5][j];
66 x1i = a[2][j] - a[5][j];
67 x2r = a[4][j] + a[3][j];
68 x3r = a[4][j] - a[3][j];
69 x2i = a[6][j] + a[1][j];
70 x3i = a[6][j] - a[1][j];
73 a[0][j] = C8_4R * (xr + xi);
74 a[4][j] = C8_4R * (xr - xi);
77 a[2][j] = C8_2R * xr - C8_2I * xi;
78 a[6][j] = C8_2R * xi + C8_2I * xr;
79 xr = W8_4R * (x1i - x3i);
80 x1i = W8_4R * (x1i + x3i);
85 a[1][j] = C8_1R * x1r - C8_1I * x1i;
86 a[7][j] = C8_1R * x1i + C8_1I * x1r;
87 a[3][j] = C8_3R * x3r - C8_3I * x3i;
88 a[5][j] = C8_3R * x3i + C8_3I * x3r;
90 for (j = 0; j <= 7; j++) {
91 x0r = a[j][0] + a[j][7];
92 x1r = a[j][0] - a[j][7];
93 x0i = a[j][2] + a[j][5];
94 x1i = a[j][2] - a[j][5];
95 x2r = a[j][4] + a[j][3];
96 x3r = a[j][4] - a[j][3];
97 x2i = a[j][6] + a[j][1];
98 x3i = a[j][6] - a[j][1];
101 a[j][0] = C8_4R * (xr + xi);
102 a[j][4] = C8_4R * (xr - xi);
105 a[j][2] = C8_2R * xr - C8_2I * xi;
106 a[j][6] = C8_2R * xi + C8_2I * xr;
107 xr = W8_4R * (x1i - x3i);
108 x1i = W8_4R * (x1i + x3i);
113 a[j][1] = C8_1R * x1r - C8_1I * x1i;
114 a[j][7] = C8_1R * x1i + C8_1I * x1r;
115 a[j][3] = C8_3R * x3r - C8_3I * x3i;
116 a[j][5] = C8_3R * x3i + C8_3I * x3r;
119 for (j = 0; j <= 7; j++) {
120 x1r = C8_1R * a[1][j] + C8_1I * a[7][j];
121 x1i = C8_1R * a[7][j] - C8_1I * a[1][j];
122 x3r = C8_3R * a[3][j] + C8_3I * a[5][j];
123 x3i = C8_3R * a[5][j] - C8_3I * a[3][j];
128 x1i = W8_4R * (xr + xi);
129 x3r = W8_4R * (xr - xi);
130 xr = C8_2R * a[2][j] + C8_2I * a[6][j];
131 xi = C8_2R * a[6][j] - C8_2I * a[2][j];
132 x0r = C8_4R * (a[0][j] + a[4][j]);
133 x0i = C8_4R * (a[0][j] - a[4][j]);
147 for (j = 0; j <= 7; j++) {
148 x1r = C8_1R * a[j][1] + C8_1I * a[j][7];
149 x1i = C8_1R * a[j][7] - C8_1I * a[j][1];
150 x3r = C8_3R * a[j][3] + C8_3I * a[j][5];
151 x3i = C8_3R * a[j][5] - C8_3I * a[j][3];
156 x1i = W8_4R * (xr + xi);
157 x3r = W8_4R * (xr - xi);
158 xr = C8_2R * a[j][2] + C8_2I * a[j][6];
159 xi = C8_2R * a[j][6] - C8_2I * a[j][2];
160 x0r = C8_4R * (a[j][0] + a[j][4]);
161 x0i = C8_4R * (a[j][0] - a[j][4]);
211 #define C16_1R 0.35185093438159561476
212 #define C16_1I 0.03465429229977286565
213 #define C16_2R 0.34675996133053686546
214 #define C16_2I 0.06897484482073575308
215 #define C16_3R 0.33832950029358816957
216 #define C16_3I 0.10263113188058934529
217 #define C16_4R 0.32664074121909413196
218 #define C16_4I 0.13529902503654924610
219 #define C16_5R 0.31180625324666780814
220 #define C16_5I 0.16666391461943662432
221 #define C16_6R 0.29396890060483967924
222 #define C16_6I 0.19642373959677554532
223 #define C16_7R 0.27330046675043937206
224 #define C16_7I 0.22429189658565907106
226 #define W16_4R 0.92387953251128675613
227 #define W16_4I 0.38268343236508977173
228 #define W16_8R 0.70710678118654752440
231 void ddct16x16s(
int isgn,
double **a)
234 double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
235 double x4r, x4i, x5r, x5i, x6r, x6i, x7r, x7i;
239 for (j = 0; j <= 15; j++) {
240 x4r = a[0][j] - a[15][j];
241 xr = a[0][j] + a[15][j];
242 x4i = a[8][j] - a[7][j];
243 xi = a[8][j] + a[7][j];
246 x5r = a[2][j] - a[13][j];
247 xr = a[2][j] + a[13][j];
248 x5i = a[10][j] - a[5][j];
249 xi = a[10][j] + a[5][j];
252 x6r = a[4][j] - a[11][j];
253 xr = a[4][j] + a[11][j];
254 x6i = a[12][j] - a[3][j];
255 xi = a[12][j] + a[3][j];
258 x7r = a[6][j] - a[9][j];
259 xr = a[6][j] + a[9][j];
260 x7i = a[14][j] - a[1][j];
261 xi = a[14][j] + a[1][j];
266 a[0][j] = C16_8R * (xr + xi);
267 a[8][j] = C16_8R * (xr - xi);
270 a[4][j] = C16_4R * xr - C16_4I * xi;
271 a[12][j] = C16_4R * xi + C16_4I * xr;
272 x0r = W16_8R * (x1i - x3i);
273 x2r = W16_8R * (x1i + x3i);
276 a[2][j] = C16_2R * xr - C16_2I * xi;
277 a[14][j] = C16_2R * xi + C16_2I * xr;
280 a[6][j] = C16_6R * xr - C16_6I * xi;
281 a[10][j] = C16_6R * xi + C16_6I * xr;
282 xr = W16_8R * (x6r - x6i);
283 xi = W16_8R * (x6i + x6r);
288 xr = W16_4I * x7r - W16_4R * x7i;
289 xi = W16_4I * x7i + W16_4R * x7r;
290 x7r = W16_4R * x5r - W16_4I * x5i;
291 x7i = W16_4R * x5i + W16_4I * x5r;
298 a[1][j] = C16_1R * xr - C16_1I * xi;
299 a[15][j] = C16_1R * xi + C16_1I * xr;
302 a[7][j] = C16_7R * xr - C16_7I * xi;
303 a[9][j] = C16_7R * xi + C16_7I * xr;
306 a[5][j] = C16_5R * xr - C16_5I * xi;
307 a[11][j] = C16_5R * xi + C16_5I * xr;
310 a[3][j] = C16_3R * xr - C16_3I * xi;
311 a[13][j] = C16_3R * xi + C16_3I * xr;
313 for (j = 0; j <= 15; j++) {
314 x4r = a[j][0] - a[j][15];
315 xr = a[j][0] + a[j][15];
316 x4i = a[j][8] - a[j][7];
317 xi = a[j][8] + a[j][7];
320 x5r = a[j][2] - a[j][13];
321 xr = a[j][2] + a[j][13];
322 x5i = a[j][10] - a[j][5];
323 xi = a[j][10] + a[j][5];
326 x6r = a[j][4] - a[j][11];
327 xr = a[j][4] + a[j][11];
328 x6i = a[j][12] - a[j][3];
329 xi = a[j][12] + a[j][3];
332 x7r = a[j][6] - a[j][9];
333 xr = a[j][6] + a[j][9];
334 x7i = a[j][14] - a[j][1];
335 xi = a[j][14] + a[j][1];
340 a[j][0] = C16_8R * (xr + xi);
341 a[j][8] = C16_8R * (xr - xi);
344 a[j][4] = C16_4R * xr - C16_4I * xi;
345 a[j][12] = C16_4R * xi + C16_4I * xr;
346 x0r = W16_8R * (x1i - x3i);
347 x2r = W16_8R * (x1i + x3i);
350 a[j][2] = C16_2R * xr - C16_2I * xi;
351 a[j][14] = C16_2R * xi + C16_2I * xr;
354 a[j][6] = C16_6R * xr - C16_6I * xi;
355 a[j][10] = C16_6R * xi + C16_6I * xr;
356 xr = W16_8R * (x6r - x6i);
357 xi = W16_8R * (x6i + x6r);
362 xr = W16_4I * x7r - W16_4R * x7i;
363 xi = W16_4I * x7i + W16_4R * x7r;
364 x7r = W16_4R * x5r - W16_4I * x5i;
365 x7i = W16_4R * x5i + W16_4I * x5r;
372 a[j][1] = C16_1R * xr - C16_1I * xi;
373 a[j][15] = C16_1R * xi + C16_1I * xr;
376 a[j][7] = C16_7R * xr - C16_7I * xi;
377 a[j][9] = C16_7R * xi + C16_7I * xr;
380 a[j][5] = C16_5R * xr - C16_5I * xi;
381 a[j][11] = C16_5R * xi + C16_5I * xr;
384 a[j][3] = C16_3R * xr - C16_3I * xi;
385 a[j][13] = C16_3R * xi + C16_3I * xr;
388 for (j = 0; j <= 15; j++) {
389 x5r = C16_1R * a[1][j] + C16_1I * a[15][j];
390 x5i = C16_1R * a[15][j] - C16_1I * a[1][j];
391 xr = C16_7R * a[7][j] + C16_7I * a[9][j];
392 xi = C16_7R * a[9][j] - C16_7I * a[7][j];
397 x7r = C16_5R * a[5][j] + C16_5I * a[11][j];
398 x7i = C16_5R * a[11][j] - C16_5I * a[5][j];
399 xr = C16_3R * a[3][j] + C16_3I * a[13][j];
400 xi = C16_3R * a[13][j] - C16_3I * a[3][j];
409 x6r = W16_8R * (xi + xr);
410 x6i = W16_8R * (xi - xr);
415 x7r = W16_4I * x5r + W16_4R * x5i;
416 x7i = W16_4I * x5i - W16_4R * x5r;
417 x5r = W16_4R * xr + W16_4I * xi;
418 x5i = W16_4R * xi - W16_4I * xr;
419 xr = C16_4R * a[4][j] + C16_4I * a[12][j];
420 xi = C16_4R * a[12][j] - C16_4I * a[4][j];
421 x2r = C16_8R * (a[0][j] + a[8][j]);
422 x3r = C16_8R * (a[0][j] - a[8][j]);
427 x0i = C16_2R * a[2][j] + C16_2I * a[14][j];
428 x2i = C16_2R * a[14][j] - C16_2I * a[2][j];
429 x1i = C16_6R * a[6][j] + C16_6I * a[10][j];
430 x3i = C16_6R * a[10][j] - C16_6I * a[6][j];
435 x1i = W16_8R * (xi + xr);
436 x3i = W16_8R * (xi - xr);
462 for (j = 0; j <= 15; j++) {
463 x5r = C16_1R * a[j][1] + C16_1I * a[j][15];
464 x5i = C16_1R * a[j][15] - C16_1I * a[j][1];
465 xr = C16_7R * a[j][7] + C16_7I * a[j][9];
466 xi = C16_7R * a[j][9] - C16_7I * a[j][7];
471 x7r = C16_5R * a[j][5] + C16_5I * a[j][11];
472 x7i = C16_5R * a[j][11] - C16_5I * a[j][5];
473 xr = C16_3R * a[j][3] + C16_3I * a[j][13];
474 xi = C16_3R * a[j][13] - C16_3I * a[j][3];
483 x6r = W16_8R * (xi + xr);
484 x6i = W16_8R * (xi - xr);
489 x7r = W16_4I * x5r + W16_4R * x5i;
490 x7i = W16_4I * x5i - W16_4R * x5r;
491 x5r = W16_4R * xr + W16_4I * xi;
492 x5i = W16_4R * xi - W16_4I * xr;
493 xr = C16_4R * a[j][4] + C16_4I * a[j][12];
494 xi = C16_4R * a[j][12] - C16_4I * a[j][4];
495 x2r = C16_8R * (a[j][0] + a[j][8]);
496 x3r = C16_8R * (a[j][0] - a[j][8]);
501 x0i = C16_2R * a[j][2] + C16_2I * a[j][14];
502 x2i = C16_2R * a[j][14] - C16_2I * a[j][2];
503 x1i = C16_6R * a[j][6] + C16_6I * a[j][10];
504 x3i = C16_6R * a[j][10] - C16_6I * a[j][6];
509 x1i = W16_8R * (xi + xr);
510 x3i = W16_8R * (xi - xr);