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

📄 mmxdct.cpp

📁 这是G.723和G.729的音频编解码的源代码
💻 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 + -