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

📄 commonfunc.cpp

📁 这是G.723和G.729的音频编解码的源代码
💻 CPP
字号:

#include "stdafx.h"
#include "color.h"

extern "C"
{
	void YUVRGBTwoLine (BYTE *Y,BYTE *U,BYTE *V,
						BYTE *RGB,int Pixel,BYTE *LTemp);
	void MMXLoadBlock(BYTE *MBPtr,BYTE *ImgPtr,int pixel);
	void MMXLoadMB(BYTE *MBPtr,BYTE *ImgPtr,int pixel);
}


void ZeroVec(MotionVector &Vec)
{
	Vec.x = 0;
	Vec.y = 0;
	Vec.x_half = 0;
	Vec.y_half = 0;
}

void LoadRefer(BYTE *pInter,BYTE *pBlock,int y,int x,int pixels,int Block,AreaInt & StrPrevInt)
{	register int i;
	BYTE *Start;
	int HalfX,HalfY,IntX,IntY;

	IntX=x/2;
	if (x%2)
		HalfX=1;
	else
		HalfX=0;
	IntY=y/2;
	if (y%2)
		HalfY=1;
	else
		HalfY=0;
	if (HalfX && x<0)
		IntX-=1;
	if (HalfY && y<0)
		IntY-=1;


	pixels=pixels/2;
	if (HalfX || HalfY)
		Start=pInter+(HalfY*2+HalfX)*StrPrevInt.Lines*pixels
			+IntY*pixels+IntX;
	else
		Start=StrPrevInt.LumIntPel+IntY*pixels+IntX;

	if (Block==8)
		MMXLoadBlock(pBlock,Start,pixels);
	else if (Block==16)
		MMXLoadMB(pBlock,Start,pixels);
	else
		for (i=0;i<Block;i++)
			memcpy(pBlock+i*Block,Start+i*pixels,Block);

}

void LoadCBRefer(BYTE *pInter,BYTE *pBlock,int y,int x,int pixels,int Block,AreaInt & StrPrevInt)
{	register int i;
	BYTE *Start;
	int HalfX,HalfY,IntX,IntY;

	IntX=x/2;
	if (x%2)
		HalfX=1;
	else
		HalfX=0;
	IntY=y/2;
	if (y%2)
		HalfY=1;
	else
		HalfY=0;
	if (HalfX && x<0)
		IntX-=1;
	if (HalfY && y<0)
		IntY-=1;

	pixels=pixels/2;

	if (HalfX || HalfY)
		Start=pInter+(HalfY*2+HalfX)*StrPrevInt.Lines/2*pixels
			+IntY*pixels+IntX;
	else
		Start=StrPrevInt.CBIntPel+IntY*pixels+IntX;


	if (Block==8)
		MMXLoadBlock(pBlock,Start,pixels);
	else if (Block==16)
		MMXLoadMB(pBlock,Start,pixels);
	else
		for (i=0;i<Block;i++)
			memcpy(pBlock+i*Block,Start+i*pixels,Block);
}

void LoadCRRefer(BYTE *pInter,BYTE *pBlock,int y,int x,int pixels,int Block,AreaInt & StrPrevInt)
{	register int i;
	BYTE *Start;
	int HalfX,HalfY,IntX,IntY;

	IntX=x/2;
	if (x%2)
		HalfX=1;
	else
		HalfX=0;
	IntY=y/2;
	if (y%2)
		HalfY=1;
	else
		HalfY=0;
	if (HalfX && x<0)
		IntX-=1;
	if (HalfY && y<0)
		IntY-=1;

	pixels=pixels/2;

	if (HalfX || HalfY)
		Start=pInter+(HalfY*2+HalfX)*StrPrevInt.Lines/2*pixels
			+IntY*pixels+IntX;
	else
		Start=StrPrevInt.CRIntPel+IntY*pixels+IntX;


	if (Block==8)
		MMXLoadBlock(pBlock,Start,pixels);
	else if (Block==16)
		MMXLoadMB(pBlock,Start,pixels);
	else
		for (i=0;i<Block;i++)
			memcpy(pBlock+i*Block,Start+i*pixels,Block);
}

void YUV_RGB(YUVData DYUV,RGBPixel* DisplayRGB,int nWidth,int nHeight)
{
	int WIDTH=nWidth;
	int HEIGHT=nHeight;
	int IMAGESIZE=nWidth*nHeight;
	BYTE TempData[72],*Temp=TempData,*RGB=(BYTE *)DisplayRGB;
	if ((int)Temp%8)
		Temp+=(8-(int)Temp%8);
	register int i;
	for (i=0;i<HEIGHT;i+=2)
		YUVRGBTwoLine(
			DYUV.Y+i*WIDTH,
		    DYUV.U+i*WIDTH/4,
		    DYUV.V+i*WIDTH/4,
			RGB+IMAGESIZE*3-WIDTH*3-i*WIDTH*3,
			WIDTH,
			Temp);

}

⌨️ 快捷键说明

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