Mercurial > hg > wm
comparison Meerwald/dct.c @ 12:6f5fea21a43c
NxM DCT speedup
| author | Peter Meerwald <pmeerw@cosy.sbg.ac.at> |
|---|---|
| date | Thu, 01 May 2008 19:12:21 +0200 |
| parents | f83ef905a63d |
| children | bd669312f068 |
comparison
equal
deleted
inserted
replaced
| 11:a5249f7d45f7 | 12:6f5fea21a43c |
|---|---|
| 386 t += ((int) pixels[y][x] - 128); | 386 t += ((int) pixels[y][x] - 128); |
| 387 dcts[0][0] = cx0 * cy0 * t; | 387 dcts[0][0] = cx0 * cy0 * t; |
| 388 | 388 |
| 389 for (i = 1; i < N; i++) { | 389 for (i = 1; i < N; i++) { |
| 390 t = 0.0; | 390 t = 0.0; |
| 391 for (x = 0; x < N; x++) | 391 for (x = 0; x < N; x++) { |
| 392 for (y = 0; y < M; y++) | 392 double s = 0.0; |
| 393 t += ((int) pixels[y][x] - 128) * dct_NxM_costable_x[x][i]; | 393 for (y = 0; y < M; y++) { |
| 394 s += ((int) pixels[y][x] - 128); | |
| 395 } | |
| 396 t += s * dct_NxM_costable_x[x][i]; | |
| 397 } | |
| 394 dcts[0][i] = cy0 * t; | 398 dcts[0][i] = cy0 * t; |
| 395 } | 399 } |
| 396 | 400 |
| 397 for (j = 1; j < M; j++) { | 401 for (j = 1; j < M; j++) { |
| 398 t = 0.0; | 402 t = 0.0; |
| 399 for (x = 0; x < N; x++) | 403 for (y = 0; y < M; y++) { |
| 400 for (y = 0; y < M; y++) | 404 double s = 0.0; |
| 401 t += ((int) pixels[y][x] - 128) * dct_NxM_costable_y[y][j]; | 405 for (x = 0; x < N; x++) { |
| 406 s += ((int) pixels[y][x] - 128); | |
| 407 } | |
| 408 t += s * dct_NxM_costable_y[y][j]; | |
| 409 } | |
| 402 dcts[j][0] = cx0 * t; | 410 dcts[j][0] = cx0 * t; |
| 403 } | 411 } |
| 404 | 412 |
| 405 for (i = 1; i < N; i++) | 413 for (i = 1; i < N; i++) { |
| 406 for (j = 1; j < M; j++) { | 414 for (j = 1; j < M; j++) { |
| 407 t = 0.0; | 415 t = 0.0; |
| 408 for (x = 0; x < N; x++) | 416 for (x = 0; x < N; x++) { |
| 409 for (y = 0; y < M; y++) | 417 double s = 0; |
| 410 t += ((int) pixels[y][x] - 128) * dct_NxM_costable_x[x][i] * dct_NxM_costable_y[y][j]; | 418 for (y = 0; y < M; y++) { |
| 419 s += ((int) pixels[y][x] - 128) * dct_NxM_costable_y[y][j]; | |
| 420 } | |
| 421 t += s * dct_NxM_costable_x[x][i]; | |
| 422 } | |
| 411 dcts[j][i] = t; | 423 dcts[j][i] = t; |
| 412 } | 424 } |
| 425 } | |
| 413 } | 426 } |
| 414 | 427 |
| 415 void idct_NxM(double **dcts, gray **pixels) { | 428 void idct_NxM(double **dcts, gray **pixels) { |
| 416 int x, y; | 429 int x, y; |
| 417 int i, j; | 430 int i, j; |
| 428 t += cy0 * dcts[0][i] * dct_NxM_costable_x[x][i]; | 441 t += cy0 * dcts[0][i] * dct_NxM_costable_x[x][i]; |
| 429 | 442 |
| 430 for (j = 1; j < M; j++) | 443 for (j = 1; j < M; j++) |
| 431 t += cx0 * dcts[j][0] * dct_NxM_costable_y[y][j]; | 444 t += cx0 * dcts[j][0] * dct_NxM_costable_y[y][j]; |
| 432 | 445 |
| 433 for (i = 1; i < N; i++) | 446 for (i = 1; i < N; i++) { |
| 434 for (j = 1; j < M; j++) | 447 double s = 0.0; |
| 435 t += dcts[j][i] * dct_NxM_costable_x[x][i] * dct_NxM_costable_y[y][j]; | 448 for (j = 1; j < M; j++) { |
| 449 s += dcts[j][i] * dct_NxM_costable_y[y][j]; | |
| 450 } | |
| 451 t += s * dct_NxM_costable_x[x][i]; | |
| 452 } | |
| 436 | 453 |
| 437 pixels[y][x] = PIXELRANGE((int) (t + 128.5)); | 454 pixels[y][x] = PIXELRANGE((int) (t + 128.5)); |
| 438 } | 455 } |
| 439 } | 456 } |
| 440 } | 457 } |
