📄 idct.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 + -