Пример #1
0
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];
	}
}
Пример #2
0
// 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
    }
}