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

📄 idct.c

📁 代码实现了基于ARM7的MPEG-4视频解码器
💻 C
字号:
//*******************************************
//File name:  idct.c
//Author:     Author
//Date: 
//********************************************

#define C2 118//473//1892//30//1.847759065 Q4 Q10 Q8
#define C4 91//1448//23//1.414213562 
#define C6 49//196//784//12//0.765366864
#define Q  69//277//1108//17//C2-C6
#define R  167//669//2666//42//C2+C6

void idct (dct_buf1)
//extern void AAN_IDCT(dct_buf)

short dct_buf1[64];//dct_out[8][8];
{  
   int a0,a1,a2,a3,a4,a5,a6,a7,tmp1,tmp2,tmp3,tmp4;
	int i,j;
	
	short xs[8]={362,251,237,213,181,142,98,50}; //Q6
int dct_buf[8][8];
	for (i=0;i<8;i++)
	    for(j=0;j<8;j++)     
		{
		 	dct_buf[i][j]=(int)((dct_buf1[i*8+j]*xs[j]*xs[i])>>12); 
		}
		
		for(j=0;j<8;j++)
   {
	//step1
	 a0=dct_buf[0][j];
	 a1=dct_buf[4][j]<<1;
	 a2=(dct_buf[2][j]-dct_buf[6][j])<<1;
	 a3=(dct_buf[2][j]+dct_buf[6][j])<<1;
	 a4=(dct_buf[5][j]-dct_buf[3][j])<<1;
	 tmp1=(dct_buf[1][j]+dct_buf[7][j])<<1;
	 tmp2=(dct_buf[3][j]+dct_buf[5][j])<<1;
	 a5=tmp1-tmp2;
	 a6=(dct_buf[1][j]-dct_buf[7][j])<<1;
	 a7=tmp1+tmp2;
	 tmp4=(C6*(a4+a6))>>6;
	 //step2
	 a2=(a2*C4)>>6;
	 a4=-((Q*a4)>>6)-tmp4;
	 a5=(a5*C4)>>6;
	 a6=((R*a6)>>6)-tmp4;
	 //step3
	 tmp3=a6-a7;
	 a6=a3;
	 a2=a2-a3;
	 a3=a0+a1;
	 a1=a0-a1;
	 a0=tmp3-a5;
	 a5=a4;
	 a4=tmp3;
	 //step4
	 tmp1=a0;
	 tmp2=a4;
	 a0=a7;
	 a4=a3+a6;
	 a6=a3-a6;
	 a7=a5-tmp1;
	 a3=a1+a2;
	 a5=a1-a2;
	 a2=tmp2;
	 a1=tmp1;
	 //step 5
	 dct_buf[0][j]=(a4+a0);
	 dct_buf[1][j]=(a3+a2);
	 dct_buf[2][j]=(a5-a1);
	 dct_buf[3][j]=(a6-a7);
	 dct_buf[4][j]=(a6+a7);
	 dct_buf[5][j]=(a5+a1);
	 dct_buf[6][j]=(a3-a2);
	 dct_buf[7][j]=(a4-a0);
	}

	for(j=0;j<8;j++)
	{
	//step1
	 a0=dct_buf[j][0];
	 a1=dct_buf[j][4]<<1;
	 a2=(dct_buf[j][2]-dct_buf[j][6])<<1;
	 a3=(dct_buf[j][2]+dct_buf[j][6])<<1;
	 a4=(dct_buf[j][5]-dct_buf[j][3])<<1;
	 tmp1=(dct_buf[j][1]+dct_buf[j][7])<<1;
	 tmp2=(dct_buf[j][3]+dct_buf[j][5])<<1;
	 a5=tmp1-tmp2;
	 a6=(dct_buf[j][1]-dct_buf[j][7])<<1;
	 a7=tmp1+tmp2;
     tmp4=(C6*(a4+a6))>>6;
	 //step2
	 a2=(a2*C4)>>6;
	 a4=-((Q*a4)>>6)-tmp4;
	 a5=(a5*C4)>>6;
	 a6=((R*a6)>>6)-tmp4;
	 //step3
	 tmp3=a6-a7;
	 a6=a3;
	 a2=a2-a3;
	 a3=a0+a1;
	 a1=a0-a1;
	 a0=tmp3-a5;
	 a5=a4;
	 a4=tmp3;
	 //step4
	 tmp1=a0;
	 tmp2=a4;
	 a0=a7;
	 a4=a3+a6;
	 a6=a3-a6;
	 a7=a5-tmp1;
	 a3=a1+a2;
	 a5=a1-a2;
	 a2=tmp2;
	 a1=tmp1;
	 //step 5
	 dct_buf[j][0]=(a4+a0); //Q4
	 dct_buf[j][1]=(a3+a2);
	 dct_buf[j][2]=(a5-a1);
	 dct_buf[j][3]=(a6-a7);
	 dct_buf[j][4]=(a6+a7);
	 dct_buf[j][5]=(a5+a1);
	 dct_buf[j][6]=(a3-a2);
	 dct_buf[j][7]=(a4-a0);
	}
	for (i=0;i<8;i++)
	    for(j=0;j<8;j++)
		{
		    dct_buf1[i*8+j]=(short)((dct_buf[i][j]+128)>>8); 
		} 
}

⌨️ 快捷键说明

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