static void dequant_idct_block_8x8(int16_t *in_data, int16_t *out_data, float *quant_tbl) { float mb[8 * 8] __attribute((aligned(32))); float mb2[8 * 8] __attribute((aligned(32))); int i, v; for (i = 0; i < 64; ++i) { mb[i] = in_data[i]; } dequantize_block(mb, mb2, quant_tbl); scale_block(mb2, mb); /* Two 1D inverse DCT operations with transpose */ for (v = 0; v < 8; ++v) { dct_1d_general(mb + v * 8, mb2 + v * 8, dctlookup_trans); } transpose_block(mb2, mb); for (v = 0; v < 8; ++v) { dct_1d_general(mb + v * 8, mb2 + v * 8, dctlookup_trans); } transpose_block(mb2, mb); for (i = 0; i < 64; ++i) { out_data[i] = mb[i]; } }
// for debugging and profiling void rotate_core(int dim, pixel *src, pixel *dst, int D) { if (dim < 256) { #if DEBUG_PRINT log("doing improved naive rotate"); #endif new_rotate(dim, src, dst, D*2, D/2); } else { #if DEBUG_PRINT log("doing 2 step rotate on input size %d", dim); #endif #if DEBUG_PROFILE_TIME clock_t test, start, middle, end; test = clock(); copy_block(dim, src, dst, D); start = clock(); #elif DEBUG_PROFILE_TIMES unsigned test, start, middle, end; test = get_seconds(); copy_block(dim, src, dst, D); start = get_seconds(); #endif // transpose the image in src and store transpose_block(dim, src, dst, D); #if DEBUG_PROFILE_TIME middle = clock(); #elif DEBUG_PROFILE_TIMES middle = get_seconds(); #endif // perform row exchange on the transposed image flip_ip(dim, dst); #if DEBUG_PROFILE_TIME end = clock(); log("test took %u transpose took %u and flip took %u", (float)start - (float)test, (float)middle - (float)start, (float)end - (float)middle); #elif DEBUG_PROFILE_TIMES end = get_seconds(); log("test took %u transpose took %u and flip took %u", start - test, middle - start, end - middle); #endif } }