📄 mmxdct.cpp
字号:
#include "stdafx.h"
#include "color.h"
#include "sactable.h"
#include "CBitstream.h"
#include "sac.h"
#include "Ch263class.h"
#include "commonvar.h"
extern "C"
{ void idct8x8aan(short* dctcoeffshort);
void PrevIDCTShift(short* dctcoeffshort);
void MatrixMulti(short *src1,short *src2,short *Result);
void MatrixTrans(short *Src);
}
//short DCTCoeff[68],*DCTCoeffPtr;
short DCTA[64]={11585,11585,11585,11585,11585,11585,11585,11585,
16069,13623,9102,3196,-3196,-9102,-13623,-16069,
15137,6270,-6270,-15137,-15137,-6270,6270,15137,
13623,-3196,-16067,-9102,9102,16069,3196,-13623,
11585,-11585,-11585,11585,11585,-11585,-11585,11585,
9102,-16069,3196,13623,-13623,-3196,16069,-9102,
6270,-15137,15137,-6270,-6270,15137,-15137,6270,
3196,-9102,13623,-16069,16069,-13623,9102,-3196
};
short IDCTA[64]={11585,16069,15137,13623,11585,9102,6270,3196,
11585,13623,6270,-3196,-11585,-16069,-15137,-9102,
11585,9102,-6270,-16069,-11585,3196,15137,13623,
11585,3196,-15137,-9102,11585,13623,-6270,-16069,
11585,-3196,-15137,9102,11585,-13623,-6270,16069,
11585,-9102,-6270,16069,-11585,-3196,15137,-13623,
11585,-13623,6270,3196,-11585,16069,-15137,9102,
11585,-16069,15137,-13623,11585,-9102,6270,-3196
};
/*void InitDCT(void)
{
if ((DWORD)DCTCoeff%8)
DCTCoeffPtr=DCTCoeff+(4-(DWORD)DCTCoeff%8/2);
else
DCTCoeffPtr=DCTCoeff;
memcpy(DCTCoeffPtr,DCTA,sizeof(short)*64);
}
*/
void CH263MB::Dct(short *block, short *coeff)
{
MatrixMulti(block,DCTA,coeff);
MatrixTrans(coeff);
MatrixMulti(coeff,DCTA,block);
coeff[ 0]=block[ 0];coeff[ 1]=block[ 8];
coeff[ 5]=block[16];coeff[ 6]=block[24];
coeff[14]=block[32];coeff[15]=block[40];
coeff[27]=block[48];coeff[28]=block[56];
coeff[ 2]=block[ 1];coeff[ 4]=block[ 9];
coeff[ 7]=block[17];coeff[13]=block[25];
coeff[16]=block[33];coeff[26]=block[41];
coeff[29]=block[49];coeff[42]=block[57];
coeff[ 3]=block[ 2];coeff[ 8]=block[10];
coeff[12]=block[18];coeff[17]=block[26];
coeff[25]=block[34];coeff[30]=block[42];
coeff[41]=block[50];coeff[43]=block[58];
coeff[ 9]=block[ 3];coeff[11]=block[11];
coeff[18]=block[19];coeff[24]=block[27];
coeff[31]=block[35];coeff[40]=block[43];
coeff[44]=block[51];coeff[53]=block[59];
coeff[10]=block[ 4];coeff[19]=block[12];
coeff[23]=block[20];coeff[32]=block[28];
coeff[39]=block[36];coeff[45]=block[44];
coeff[52]=block[52];coeff[54]=block[60];
coeff[20]=block[ 5];coeff[22]=block[13];
coeff[33]=block[21];coeff[38]=block[29];
coeff[46]=block[37];coeff[51]=block[45];
coeff[55]=block[53];coeff[60]=block[61];
coeff[21]=block[ 6];coeff[34]=block[14];
coeff[37]=block[22];coeff[47]=block[30];
coeff[50]=block[38];coeff[56]=block[46];
coeff[59]=block[54];coeff[61]=block[62];
coeff[35]=block[ 7];coeff[36]=block[15];
coeff[48]=block[23];coeff[49]=block[31];
coeff[57]=block[39];coeff[58]=block[47];
coeff[62]=block[55];coeff[63]=block[63];
}
void CH263MB::idct(short *coeff,short *block)
{
block[0] =coeff[0]; block[1] =coeff[2];
block[2] =coeff[3]; block[3] =coeff[9];
block[4] =coeff[10]; block[5] =coeff[20];
block[6] =coeff[21]; block[7] =coeff[35];
block[8] =coeff[1]; block[9] =coeff[4];
block[10]=coeff[8]; block[11]=coeff[11];
block[12]=coeff[19]; block[13]=coeff[22];
block[14]=coeff[34]; block[15]=coeff[36];
block[16]=coeff[5]; block[17]=coeff[7];
block[18]=coeff[12]; block[19]=coeff[18];
block[20]=coeff[23]; block[21]=coeff[33];
block[22]=coeff[37]; block[23]=coeff[48];
block[24]=coeff[6]; block[25]=coeff[13];
block[26]=coeff[17]; block[27]=coeff[24];
block[28]=coeff[32]; block[29]=coeff[38];
block[30]=coeff[47]; block[31]=coeff[49];
block[32]=coeff[14]; block[33]=coeff[16];
block[34]=coeff[25]; block[35]=coeff[31];
block[36]=coeff[39]; block[37]=coeff[46];
block[38]=coeff[50]; block[39]=coeff[57];
block[40]=coeff[15]; block[41]=coeff[26];
block[42]=coeff[30]; block[43]=coeff[40];
block[44]=coeff[45]; block[45]=coeff[51];
block[46]=coeff[56]; block[47]=coeff[58];
block[48]=coeff[27]; block[49]=coeff[29];
block[50]=coeff[41]; block[51]=coeff[44];
block[52]=coeff[52]; block[53]=coeff[55];
block[54]=coeff[59]; block[55]=coeff[62];
block[56]=coeff[28]; block[57]=coeff[42];
block[58]=coeff[43]; block[59]=coeff[53];
block[60]=coeff[54]; block[61]=coeff[60];
block[62]=coeff[61]; block[63]=coeff[63];
// prepare the input operands to the MMX iDCT
// shift the 12 bits to the higher part
PrevIDCTShift(block);
// add 0.5 to the DC value
block[0] +=64;
idct8x8aan(block);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -