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