# HG changeset patch # User Peter Meerwald # Date 1209661941 -7200 # Node ID 6f5fea21a43cf124968da8053d83d369d7202a4f # Parent a5249f7d45f71794c89a501462e87744ae057cd1 NxM DCT speedup diff -r a5249f7d45f7 -r 6f5fea21a43c Meerwald/dct.c --- 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)); }