#include "StdAfx.h" #include "AssemUtil.h" //#include //#include //#include "SISBuffer.h" extern "C"{ void Byte_To_Short(unsigned char* pSrc, short* pDest, int nSize); __int64 CheckPitchAsm(__int64 iPitch16, __int64 DPC_SUPPRESS, BYTE *pData, __int64 buffWidth , __int64 left, __int64 top, __int64 width, __int64 height ); __int64 CheckPitchAsmVert(__int64 iPitch16, __int64 DPC_SUPPRESS, BYTE *pData, __int64 buffWidth , __int64 left, __int64 top, __int64 width, __int64 height ); __int64 CheckPitchAsmVTD(__int64 BuffWidth, __int64 tilt16, BYTE* pData, __int64 iPitch16 , __int64 left, __int64 right, __int64 top, __int64 bottom , short* pConBuff, short* pConBuff2 ); __int64 CheckPitchAsmVTD_BOE(__int64 BuffWidth, __int64 tilt16, BYTE* pData, __int64 iPitch16 , __int64 left, __int64 right, __int64 top, __int64 bottom , __int64 nMAXImgAddr, __int64 *pResult, short* pConBuff, short* pConBuff2 ); }; // Not Use Below extern "C"{ __int64 CheckPitchPixelAsm(__int64 startPitch, __int64 endPitch, BYTE *pData, __int64 buffWidth , __int64 left, __int64 top, __int64 width, __int64 height , __int64 DPC_SUPPRESS); __int64 CheckPitchAsmEcho(__int64 iPitch, __int64 Spr, __int64 fSpr, __int64 sSpr , __int64 left, __int64 right, __int64 top, __int64 bottom , BYTE *pData, __int64 buffWidth, __int64 DPC_SUPPRESS); __int64 CheckPitchAsmFast(__int64 StartSpr, __int64 EndSpr, BYTE *pData, __int64 buffWidth , __int64 left, __int64 top, __int64 width, __int64 height , __int64 DPC_SUPPRESS); }; void CAssemUtil::ByteToShort(unsigned char* pSrc, short* pDest, int nSize) { Byte_To_Short(pSrc, pDest, nSize); } void CAssemUtil::CheckPitchPixel(int startPitch, int endPitch, int left, int top, int width, int height, BYTE *pData, int buffWidth, int Dpc_suppress, int &iPitch) { __int64 minConvSum= 0x0FFFFFFFFFFFFFFF; __int64 ConvSum= 0; __int64 sPitch; int i; for(i= startPitch; i<= endPitch; i++) { sPitch= i*16; ConvSum= CheckPitchAsm(i, Dpc_suppress, pData, buffWidth, left, top, width, height); if(ConvSum < minConvSum) { minConvSum= ConvSum; iPitch= (int)(i/16); } } } void CAssemUtil::CheckPitchSmall16(__int64 pitch16, int searchCount, int left, int top, int width, int height, BYTE *pData, int buffWidth, int Dpc_suppress, int &findPitch16, int &fiPitch, int &fspr) { __int64 minConvSum= 0x0FFFFFFFFFFFFFFF; __int64 ConvSum= 0; __int64 sPitch, ePitch, iPitch, spr; sPitch= pitch16- searchCount; ePitch= pitch16+ searchCount; for(; sPitch <= ePitch; sPitch++) { ConvSum= CheckPitchAsm(sPitch, Dpc_suppress, pData, buffWidth, left, top, width, height); if(ConvSum < minConvSum) { minConvSum= ConvSum; findPitch16= (int)sPitch; iPitch= sPitch/16; spr= sPitch%16; fiPitch= (int)iPitch; fspr= (int)spr; } } } void CAssemUtil::CheckPitchSmallVert16(__int64 pitch16, int searchCount, int left, int top, int width, int height, BYTE *pData, int buffWidth, int Dpc_suppress, int &findPitch16, int &fiPitch, int &fspr) { __int64 minConvSum= 0x0FFFFFFFFFFFFFFF; __int64 ConvSum= 0; __int64 sPitch, ePitch, iPitch, spr; sPitch= pitch16- searchCount; ePitch= pitch16+ searchCount; for(; sPitch <= ePitch; sPitch++) { ConvSum= CheckPitchAsmVert(sPitch, (__int64)Dpc_suppress, pData, (__int64)buffWidth, (__int64)left, (__int64)top, (__int64)width, (__int64)height); if(ConvSum < minConvSum) { minConvSum= ConvSum; findPitch16= (int)sPitch; iPitch= sPitch/16; spr= sPitch%16; fiPitch= (int)iPitch; fspr= (int)spr; } } } void CAssemUtil::CheckPitchSmallVPT16(int pitchStart16, int pitchEnd16, int tiltStart16, int tiltEnd16, int left, int right, int top, int bottom, BYTE *pData, int buffWidth, int Dpc_suppress, short* conBuff, short* conBuff2, int &findPitch16, int &findTilt16) { __int64 minConvSum= 0x0FFFFFFFFFFFFFFF; __int64 ConvSum= 0; int tilt, pitch; for(pitch= pitchStart16 ; pitch <= pitchEnd16; pitch++) { for(tilt= tiltStart16; tilt <= tiltEnd16; tilt++) { ConvSum= CheckPitchAsmVTD((__int64)buffWidth, (__int64)tilt, pData, (__int64)pitch, (__int64)left, (__int64)right, (__int64)top, (__int64)bottom, conBuff, conBuff2); if(ConvSum < minConvSum) { minConvSum= ConvSum; findTilt16= tilt; findPitch16= pitch; } } } } void CAssemUtil::CheckPitchSmallVP_T16(int pitch16, int tiltStart16, int tiltEnd16, int left, int right, int top, int bottom, BYTE *pData, int buffWidth, int Dpc_suppress, short* conBuff, short* conBuff2, int &findTilt16) { __int64 minConvSum= 0x0FFFFFFFFFFFFFFF; __int64 ConvSum= 0; int tilt; for(tilt= tiltStart16; tilt <= tiltEnd16; tilt++) { ConvSum= CheckPitchAsmVTD((__int64)buffWidth, (__int64)tilt, pData, (__int64)pitch16, (__int64)left, (__int64)right, (__int64)top, (__int64)bottom, conBuff, conBuff2); if(ConvSum < minConvSum) { minConvSum= ConvSum; findTilt16= tilt; } } } void CAssemUtil::CheckPitchSmallVT_P16(int pitchStart16, int pitchEnd16, int Tilt16, int left, int right, int top, int bottom, BYTE *pData, int buffWidth, int Dpc_suppress, short* conBuff, short* conBuff2, int &findPitch16) { __int64 minConvSum= 0x0FFFFFFFFFFFFFFF; __int64 ConvSum= 0; int pitch; for(pitch= pitchStart16 ; pitch <= pitchEnd16; pitch++) { ConvSum= CheckPitchAsmVTD((__int64)buffWidth, (__int64)Tilt16, pData, (__int64)pitch, (__int64)left, (__int64)right, (__int64)top, (__int64)bottom, conBuff, conBuff2); if(ConvSum < minConvSum) { minConvSum= ConvSum; findPitch16= pitch; } } } int CAssemUtil::CheckPitchSmallVT_P16_BOE(int pitchStart16, int pitchEnd16, int Tilt16, int left, int right, int top, int bottom, BYTE *pData, int buffWidth, int buffHeight, int Dpc_suppress, short* conBuff, short* conBuff2, int &findPitch16) { __int64 minConvSum= 0x0FFFFFFFFFFFFFFF; __int64 ConvSum= 0; int pitch; __int64 MaxImgAddr = (__int64)(pData + buffWidth * buffHeight); __int64 nResult = -1; for(pitch= pitchStart16 ; pitch <= pitchEnd16; pitch++) { ConvSum= CheckPitchAsmVTD_BOE((__int64)buffWidth, (__int64)Tilt16, pData, (__int64)pitch, (__int64)left, (__int64)right, (__int64)top, (__int64)bottom, MaxImgAddr,(__int64*)&nResult, conBuff, conBuff2); if(nResult != -1) return (int)nResult; if(ConvSum < minConvSum) { minConvSum= ConvSum; findPitch16= pitch; } } return (int)nResult; } /* void CAssemUtil::CheckPitchSmall(int StartPitch, int EndPitch, int Spr, int fSpr, int sSpr, int left, int top, int width, int height, BYTE *pData, int buffWidth, int Dpc_suppress, int &rPitch, int &rfSpr) { __int64 minConvSum= 0x0FFFFFFFFFFFFFFF; __int64 ConvSum= 0; int iPitch=0; int iSpr=0; if(StartPitch == EndPitch) { iPitch= StartPitch; for(iSpr= sSpr; iSpr >= fSpr; iSpr--) { ConvSum= CheckPitchAsm((__int64)iPitch, (__int64)Spr, (__int64)iSpr, (__int64)(Spr- iSpr), (__int64)left, (__int64)(left+ width), (__int64)top, (__int64)(top+ height), pData, (__int64)buffWidth, (__int64)Dpc_suppress); if(ConvSum < minConvSum) { minConvSum= ConvSum; rfSpr= iSpr; rPitch= iPitch; } } return; } iPitch= StartPitch; for(iSpr= sSpr; iSpr > 0; iSpr--) { ConvSum= CheckPitchAsm((__int64)iPitch, (__int64)Spr, (__int64)iSpr, (__int64)(Spr- iSpr), (__int64)left, (__int64)(left+ width), (__int64)top, (__int64)(top+ height), pData, (__int64)buffWidth, (__int64)Dpc_suppress); if(ConvSum < minConvSum) { minConvSum= ConvSum; rfSpr= iSpr; rPitch= iPitch; } } for( iPitch= StartPitch+1; iPitch < EndPitch;iPitch++) { for(iSpr= Spr; iSpr > 0; iSpr--) { ConvSum= CheckPitchAsm((__int64)iPitch, (__int64)Spr, (__int64)iSpr, (__int64)(Spr- iSpr), (__int64)left, (__int64)(left+ width), (__int64)top, (__int64)(top+ height), pData, (__int64)buffWidth, (__int64)Dpc_suppress); if(ConvSum < minConvSum) { minConvSum= ConvSum; rfSpr= iSpr; rPitch= iPitch; } } } iPitch= EndPitch; for(iSpr= Spr; iSpr >= fSpr; iSpr--) { ConvSum= CheckPitchAsm((__int64)iPitch, (__int64)Spr, (__int64)iSpr, (__int64)(Spr- iSpr), (__int64)left, (__int64)(left+ width), (__int64)top, (__int64)(top+ height), pData, (__int64)buffWidth, (__int64)Dpc_suppress); if(ConvSum < minConvSum) { minConvSum= ConvSum; rfSpr= iSpr; rPitch= iPitch; } } } void CAssemUtil::CheckPitch(int StartPitch, int EndPitch, int Spr, int left, int top, int width, int height, BYTE *pData, int buffWidth, int Dpc_suppress, int &rPitch, int &rfSpr) { __int64 minConvSum= 0x0FFFFFFFFFFFFFFF; __int64 ConvSum= 0; int iPitch=0; int iSpr=0; for( iPitch= StartPitch; iPitch <= EndPitch;iPitch++) { for(iSpr= Spr; iSpr > 0; iSpr--) { ConvSum= CheckPitchAsm((__int64)iPitch, (__int64)Spr, (__int64)iSpr, (__int64)(Spr- iSpr), (__int64)left, (__int64)(left+ width), (__int64)top, (__int64)(top+ height), pData, (__int64)buffWidth, (__int64)Dpc_suppress); if(ConvSum < minConvSum) { minConvSum= ConvSum; rfSpr= iSpr; rPitch= iPitch; } } } } */