Mercurial > hg > wm
diff 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 |
line wrap: on
line diff
--- a/Meerwald/dct.c Thu May 01 18:19:13 2008 +0200 +++ b/Meerwald/dct.c Thu May 01 19:12:21 2008 +0200 @@ -388,28 +388,41 @@ for (i = 1; i < N; i++) { t = 0.0; - for (x = 0; x < N; x++) - for (y = 0; y < M; y++) - t += ((int) pixels[y][x] - 128) * dct_NxM_costable_x[x][i]; + for (x = 0; x < N; x++) { + double s = 0.0; + for (y = 0; y < M; y++) { + s += ((int) pixels[y][x] - 128); + } + t += s * dct_NxM_costable_x[x][i]; + } dcts[0][i] = cy0 * t; } for (j = 1; j < M; j++) { t = 0.0; - for (x = 0; x < N; x++) - for (y = 0; y < M; y++) - t += ((int) pixels[y][x] - 128) * dct_NxM_costable_y[y][j]; + for (y = 0; y < M; y++) { + double s = 0.0; + for (x = 0; x < N; x++) { + s += ((int) pixels[y][x] - 128); + } + t += s * dct_NxM_costable_y[y][j]; + } dcts[j][0] = cx0 * t; } - for (i = 1; i < N; i++) - for (j = 1; j < M; j++) { + for (i = 1; i < N; i++) { + for (j = 1; j < M; j++) { t = 0.0; - for (x = 0; x < N; x++) - for (y = 0; y < M; y++) - t += ((int) pixels[y][x] - 128) * dct_NxM_costable_x[x][i] * dct_NxM_costable_y[y][j]; + for (x = 0; x < N; x++) { + double s = 0; + for (y = 0; y < M; y++) { + s += ((int) pixels[y][x] - 128) * dct_NxM_costable_y[y][j]; + } + t += s * dct_NxM_costable_x[x][i]; + } dcts[j][i] = t; } + } } void idct_NxM(double **dcts, gray **pixels) { @@ -430,9 +443,13 @@ for (j = 1; j < M; j++) t += cx0 * dcts[j][0] * dct_NxM_costable_y[y][j]; - for (i = 1; i < N; i++) - for (j = 1; j < M; j++) - t += dcts[j][i] * dct_NxM_costable_x[x][i] * dct_NxM_costable_y[y][j]; + for (i = 1; i < N; i++) { + double s = 0.0; + for (j = 1; j < M; j++) { + s += dcts[j][i] * dct_NxM_costable_y[y][j]; + } + t += s * dct_NxM_costable_x[x][i]; + } pixels[y][x] = PIXELRANGE((int) (t + 128.5)); }