⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dct.c

📁 DM642的mpeg4编码
💻 C
字号:
#include "dct.h"


#define USE_ACCURATE_ROUNDING

#define RIGHT_SHIFT(x, shft)  ((x) >> (shft))

#ifdef USE_ACCURATE_ROUNDING
#define ONE ((short) 1)
#define DESCALE(x, n)  RIGHT_SHIFT((x) + (ONE << ((n) - 1)), n)
#else
#define DESCALE(x, n)  RIGHT_SHIFT(x, n)
#endif

#define CONST_BITS  13
#define BITS2  2

#define CONST029  ((int)  2446)	/* FIX(0.298631336) */
#define CONST039  ((int)  3196)	/* FIX(0.390180644) */
#define CONST054  ((int)  4433)	/* FIX(0.541196100) */
#define CONST076  ((int)  6270)	/* FIX(0.765366865) */
#define CONST089  ((int)  7373)	/* FIX(0.899976223) */
#define CONST117  ((int)  9633)	/* FIX(1.175875602) */
#define CONST150  ((int) 12299)	/* FIX(1.501321110) */
#define CONST184  ((int) 15137)	/* FIX(1.847759065) */
#define CONST196 ((int) 16069)	/* FIX(1.961570560) */
#define CONST205  ((int) 16819)	/* FIX(2.053119869) */
#define CONST256  ((int) 20995)	/* FIX(2.562915447) */
#define CONST307  ((int) 25172)	/* FIX(3.072711026) */

/*
#pragma CODE_SECTION(fdct,".internal_code1");
void fdct(short* dct, short* pixel)
{
	int Dct0, Dct1, Dct2, Dct3, Dct4, Dct5, Dct6, Dct7;
	int Dct10, Dct11, Dct12, Dct13;
	int z1, z2, z3, z4, z5;
	short *temp;
	int *dataptr;
	int data[64];
	int i;

	dataptr = data;
	temp = pixel;
	for (i = 0; i < 8; i++)
	{
		Dct0 = temp[0] + temp[7];
		Dct7 = temp[0] - temp[7];
		Dct1 = temp[1] + temp[6];
		Dct6 = temp[1] - temp[6];
		Dct2 = temp[2] + temp[5];
		Dct5 = temp[2] - temp[5];
		Dct3 = temp[3] + temp[4];
		Dct4 = temp[3] - temp[4];

		Dct10 = Dct0 + Dct3;
		Dct13 = Dct0 - Dct3;
		Dct11 = Dct1 + Dct2;
		Dct12 = Dct1 - Dct2;

		dataptr[0] = (Dct10 + Dct11) << BITS2;
		dataptr[4] = (Dct10 - Dct11) << BITS2;

		z1 = (Dct12 + Dct13) * CONST054;
		dataptr[2] =
			DESCALE(z1 + Dct13 * CONST076, CONST_BITS - BITS2);
		dataptr[6] =
			DESCALE(z1 + Dct12 * (-CONST184), CONST_BITS - BITS2);	

		z1 = Dct4 + Dct7;
		z2 = Dct5 + Dct6;
		z3 = Dct4 + Dct6;
		z4 = Dct5 + Dct7;
		z5 = (z3 + z4) * CONST117;	

		Dct4 *= CONST029;	
		Dct5 *= CONST205;	
		Dct6 *= CONST307;	
		Dct7 *= CONST150;	
		z1 *= -CONST089;	
		z2 *= -CONST256;	
		z3 *= -CONST196;	
		z4 *= -CONST039;	

		z3 += z5;
		z4 += z5;

		dataptr[7] = DESCALE(Dct4 + z1 + z3, CONST_BITS - BITS2);
		dataptr[5] = DESCALE(Dct5 + z2 + z4, CONST_BITS - BITS2);
		dataptr[3] = DESCALE(Dct6 + z2 + z3, CONST_BITS - BITS2);
		dataptr[1] = DESCALE(Dct7 + z1 + z4, CONST_BITS - BITS2);

		dataptr += 8;			
		temp += 8;
	}


	dataptr = data;
	for (i = 0; i < 8; i++)
	{
		Dct0 = dataptr[0] + dataptr[56];
		Dct7 = dataptr[0] - dataptr[56];
		Dct1 = dataptr[8] + dataptr[48];
		Dct6 = dataptr[8] - dataptr[48];
		Dct2 = dataptr[16] + dataptr[40];
		Dct5 = dataptr[16] - dataptr[40];
		Dct3 = dataptr[24] + dataptr[32];
		Dct4 = dataptr[24] - dataptr[32];

	
		Dct10 = Dct0 + Dct3;
		Dct13 = Dct0 - Dct3;
		Dct11 = Dct1 + Dct2;
		Dct12 = Dct1 - Dct2;

		dataptr[0] = DESCALE(Dct10 + Dct11, BITS2);
		dataptr[32] = DESCALE(Dct10 - Dct11, BITS2);

		z1 = (Dct12 + Dct13) * CONST054;
		dataptr[16] =
			DESCALE(z1 + Dct13 * CONST076, CONST_BITS + BITS2);
		dataptr[48] =
			DESCALE(z1 + Dct12 * (-CONST184), CONST_BITS + BITS2);

	
		z1 = Dct4 + Dct7;
		z2 = Dct5 + Dct6;
		z3 = Dct4 + Dct6;
		z4 = Dct5 + Dct7;
		z5 = (z3 + z4) * CONST117;

		Dct4 *= CONST029;	
		Dct5 *= CONST205;	
		Dct6 *= CONST307;	
		Dct7 *= CONST150;
		z1 *= -CONST089;	
		z2 *= -CONST256;	
		z3 *= -CONST196;	
		z4 *= -CONST039;	

		z3 += z5;
		z4 += z5;

		dataptr[56] = DESCALE(Dct4 + z1 + z3, CONST_BITS + BITS2);
		dataptr[40] = DESCALE(Dct5 + z2 + z4, CONST_BITS + BITS2);
		dataptr[24] = DESCALE(Dct6 + z2 + z3, CONST_BITS + BITS2);
		dataptr[8] = DESCALE(Dct7 + z1 + z4, CONST_BITS + BITS2);

		dataptr++;			
	}

	for (i = 0; i < 64; i++)
		dct[i] = (short int) DESCALE(data[i], 3);
}


*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -