#pragma once #include "AssemParam.h" #include "BlobStorage.h" #include "AssemUtil.h" #include "MosisStrg.h" #include "CompareAverage.h" #define ASSEM_CONVBUFFER_SIZE 1024*1024 class CBlobStorage; class CMosisAssem; class AFX_EXT_CLASS CAssemControl { int m_nThread; int m_nSpace; CMosisAssem *m_pMosisAssem; public: CAssemControl(); virtual ~CAssemControl(); public: int InitAssemControl(int nThread, int maxDefect= 10000); void ResetReinspectCount(); public: DIT_RESULT Inspect_Rect(int iThread, CConvParam *pParam, BOOL bAsg= FALSE);//, class CDefectStorage *pDefectStorage, int iFrame, int iScan, int iModel, BOOL bCosmicFiler); DIT_RESULT Inspect_Trapezium(int iThread, CConvParam *pParam);//, class CDefectStorage *pDefectStorage, int iFrame, int iScan, int iModel, BOOL bCosmicFiler); DIT_RESULT Inspect_ASG(int iThread, CConvParam *pParam); DIT_RESULT ASGVertConvolution(int iThread, CConvParam *pParam); public: CMosisAssem* GetMosisAssem(int iThread); }; // CMosisAssem ³»¿¡¼­ ÁÖ¾îÁø °Ë»ç ¿µ¿ªÀ» ºÐÇÒÇØ Thread ºÐÇÒ °Ë»ç¸¦ ½Ç½ÃÇÑ´Ù. class CAssemThreadControl { int m_nThread; int m_nSpace; CMosisAssem *m_pMosisAssem; public: CAssemThreadControl(); virtual ~CAssemThreadControl(); int GetThreadCount(){return m_nThread;} BOOL InitAssemThreadControl(int nThread, int maxDefect); DIT_RESULT Inspect_RectThread(int iThread, CConvParam *pParam);//, class CDefectStorage *pDefectStorage, int iFrame, int iScan, int iModel, BOOL bCosmicFiler); CMosisAssem* GetMosisAssemThread(int iThread); }; class AFX_EXT_CLASS CMosisAssem : public CBlobStorage { public: CAssemThreadControl *m_pAssemControl; int m_iThread; // BOOL m_bNowInspect; double m_ConvTime; int m_cReinspect; protected: CMosisBlock m_ConvBlock; CMosisBlock m_ConvBlock2; CMosisBlock<__int64> m_int64Block; CCompareAverage m_AvgIns; public: CMosisAssem(void); virtual ~CMosisAssem(void); public: BOOL InitAssem(int iThread, int maxDefect); void ResetReinspectCount() {m_cReinspect= 0;} void ResetMosisAssem(); // Inspect_Pre(); ¸¦ ResetMosisAssem()À¸·Î ¸íÀǺ¯°æÇÑ´Ù. void InspectPAD_Clear(); BOOL EnableInternalThread(int nThrea, int maxDefect); public: // ¿ÜºÎ¿¡¼­ °Ë»ç½Ã È£ÃâÇÏ´Â ½ÇÁ¦ ÀÎÅÍÆäÀ̽º[ÀÏ·ÃÀÇ °Ë»ç °úÁ¤(Reset, Check Validity, Inspect, PostProcess..]À» ³»ºÎ¿¡¼­ Æ÷ÇÔÇÑ´Ù] DIT_RESULT Inspect_Rect(CConvParam *pParam); DIT_RESULT Inspect_RectThread(CConvParam *pParam); DIT_RESULT Inspect_Trapezium(CConvParam *pParam); DIT_RESULT Inspect_ASG(CConvParam *pParam); // Asg¿¡ Zone °Ë»ç°¡ Ãß°¡µÇ¸é¼­ Inspect °è¿­¿¡ Inspect_ASG() Ãß°¡ public: void CountReinspect() {m_cReinspect++;} public: DIT_RESULT CheckParameter(BOOL &bNoInspect); DIT_RESULT CheckParameter_Vert(BOOL &bNoInspect); public:// Assem È£ÃâÀ» ÅëÇØ ½ÇÁ¦ °Ë»ç ControlÇÏ´Â ÇÔ¼öµé. Assemµî ½ÇÁ¦ °Ë»ç ·çƾÀ» Ãß°¡ ÇÏ·Á°Åµç ÀÌÂÊ °è¿­·Î »ç¿ëÇÑ´Ù. int Compare_Float(); int Compare_Pixel(); void Compare_Zone(); // Compare_Zone2(); ·Î ´ëü int Compare_Zone2(); // Zone º° ´ÙÀ̳ª¹Í Threshold Ãß°¡µÈ ¹öÀü. void Compare_Trapezium(); int Compare_ASGZone(); int BinalizeInspection(); int CompareAverage(); protected:// °Ë»ç¿¡ »ç¿ëµÉ À̹ÌÁö¸¦ À§ÇÑ Áß°£ ¹öÆÛ Control void ResetConBuff(int &InspSize); // ¼¼·Î¹æÇâ ºñ±³¸¦ À§ÇØ 16¹èÀÇ °ø°£ »ç¿ë short* GetConBuffComp(){return m_ConvBlock.GetDataAddr();}; short* GetConBuffComp2(){return m_ConvBlock2.GetDataAddr();}; void GetInt64BuffComp(int nSize); __int64* GetInt64BuffComp(){return m_int64Block.GetDataAddr();}; public: DIT_RESULT ASGVertConvolution(CConvParam *pParam); protected: int Inspect_FreeForm(int &nEndLine); //Core ¾È¿¡ Unpair °áÇÔ JumpFilter°¡ µé¾î°¡ ÀÖ´Ù. int ConvFloatVJF_Intrin(CRect rtROI, int &nEndLine); int ConvFloatVJF_Cpp(CRect rtROI, int &nEndLine); BOOL MakeFrameRegion(CPoint *pptPoly, int nPolyCount, CRect rtROI, int &nRectCount, CRect **prtOutput); BOOL ExtractRectInRgn(CRgn &rgnInput, int &nRectCount, CRect **prtOutput); public: int BinalizeInspection(BYTE *pSrc, int nThresS, int nThresE, CRect rtROI ,int nWidth, CDefectPair *pDefectdPair, int nStartPair, int nMaxPair ,int &nEndLine); int ConvFloatVert_Intrin(BYTE* pImgBuff, short* pConBuff, __int64 maxDefect, __int64 nDefect , __int64 left, __int64 right, __int64 top, __int64 bottom , int* DefectX, int* DefectY, short* DefectT, short* DefectValue , CDefectPair *pDefectdPair, __int64 nPair, __int64 MaxPair, __int64 PairSize , __int64 frameWidth, __int64 iPitch16, __int64 Threshold, __int64 Suppress , int* pGraySrc, int* pGrayCmp, int* pZoneID, int* pZoneTh , __int64 i2Pitch16, __int64 bReverseFilter, __int64 ThresholdSlide, int* endLine ); int ConvFloatVTD_Intrin(BYTE* pImgBuff, short* pConBuff, __int64 maxDefect, __int64 nDefect , __int64 left, __int64 right, __int64 top, __int64 bottom , int* DefectX, int* DefectY, short* DefectType, short* DefectValue , CDefectPair *pDefectdPair, __int64 nPair, __int64 MaxPair, __int64 PairSize , __int64 frameWidth, __int64 iPitch16, __int64 Threshold, __int64 Suppress , short* i2Pitch16, __int64 tilt16, int* PitchBuff, __int64 ThresholdSlide , int* pGraySrc, int* pGrayCmp, int* pZoneID, int* pZoneTh , int* endLine ); int ConvZoneVert2S_Intrin(BYTE *pImgBuff, __int64 Threshold, __int64 maxDefect, __int64 nDefect , __int64 left, __int64 right, __int64 top, __int64 bottom , int* DefectX, int* DefectY, short* DefectT, short* DefectValue , int* pGraySrc, int* pGrayCmp, int* pZoneID, int* pZoneTh , __int64 frameWidth, __int64 iPitch16, __int64 fSPR, __int64 sSPR , short* ZoneThTable, short* ZoneIdTable, __int64 ZoneTableWidth, void* pMatchTable , CDefectPair *pDefectdPair, __int64 StartPair, __int64 MaxPair, __int64 PairSize , __int64 dxPattern, __int64 dyPattern, __int64 yZoneByte, __int64 bReverseFilter , short* ZoneAddTable, short* pConBuff, __int64 bUseUnpair, int* endLine , __int64 ExTh, __int64 Suppress ); int ConvZoneVert2S_TSP_Intrin(BYTE *pImgBuff, __int64 Threshold, __int64 maxDefect, __int64 nDefect , __int64 left, __int64 right, __int64 top, __int64 bottom , int* DefectX, int* DefectY, short* DefectT, short* DefectValue , int* pGraySrc, int* pGrayCmp, int* pZoneID, int* pZoneTh , __int64 frameWidth, __int64 iPitch16, __int64 fSPR, __int64 sSPR , short* ZoneThTable, short* ZoneIdTable, __int64 ZoneTableWidth, void* pMatchTable , CDefectPair *pDefectdPair, __int64 StartPair, __int64 MaxPair, __int64 PairSize , __int64 dxPattern, __int64 dyPattern, __int64 yZoneByte, __int64 bReverseFilter , short* ZoneAddTable, short* pConBuff, __int64 bUseUnpair, int* endLine , __int64 ExTh, __int64 Suppress ); int ConvZoneVert2S_BlackFilter(BYTE *pImgBuff, __int64 Threshold, __int64 maxDefect, __int64 nDefect , __int64 left, __int64 right, __int64 top, __int64 bottom , int* DefectX, int* DefectY, short* DefectT, short* DefectValue , int* pGraySrc, int* pGrayCmp, int* pZoneID, int* pZoneTh , __int64 frameWidth, __int64 iPitch16, __int64 fSPR, __int64 sSPR , short* ZoneThTable, short* ZoneIdTable, __int64 ZoneTableWidth, void* pMatchTable , CDefectPair *pDefectdPair, __int64 StartPair, __int64 MaxPair, __int64 PairSize , __int64 dxPattern, __int64 dyPattern, __int64 yZoneByte, __int64 bReverseFilter , short* ZoneAddTable, short* pConBuff, __int64 bUseUnpair, int* endLine , __int64 ExTh, __int64 Suppress ); int ConvZoneVTD_Intrin(BYTE *pImgBuff, __int64 Threshold, __int64 maxDefect, __int64 nDefect , __int64 left, __int64 right, __int64 top, __int64 bottom , int* DefectX, int* DefectY, short* DefectT, short* DefectValue , int* pGraySrc, int* pGrayCmp, int* pZoneID, int* pZoneTh , __int64 frameWidth, int* piPitch16, __int64 iPitch16, __int64 sSPR , short* ZoneThTable, short* ZoneIdTable, __int64 ZoneTableWidth, void* pMatchTable , CDefectPair *pDefectdPair, __int64 StartPair, __int64 MaxPair, __int64 PairSize , __int64 dxPattern, __int64 dyPattern, __int64 yZoneByte, __int64 bReverseFilter , short* ZoneAddTable, __int64 Tilt16, __int64 bUseUnpair, int* endLine , __int64 ExTh, __int64 Suppress ); int ConvPixelVertS_Intrin(BYTE *pImgBuff, __int64 Threshold, __int64 maxDefect, __int64 nDefect , __int64 left, __int64 right, __int64 top, __int64 bottom , int* DefectX, int* DefectY, short* DefectT, short* DefectValue , int* pGraySrc, int* pGrayCmp, int* pZoneID, int* pZoneTh , __int64 frameWidth, __int64 iPitch16, __int64 fSPR, __int64 sSPR , short* ZoneThTable, short* ZoneIdTable, __int64 ZoneTableWidth, void* pMatchTable , CDefectPair *pDefectdPair, __int64 StartPair, __int64 MaxPair, __int64 PairSize , __int64 dxPattern, __int64 dyPattern, __int64 yZoneByte, __int64 bReverseFilter , __int64 ThresholdSlide, __int64 ThresholdSuppress, __int64 bUseUnpair, short* pConBuff , int* endLine, __int64 ExTh); int ConvPixelVTDS_Intrin(BYTE *pImgBuff, __int64 Threshold, __int64 maxDefect, __int64 nDefect , __int64 left, __int64 right, __int64 top, __int64 bottom , int* DefectX, int* DefectY, short* DefectT, short* DefectValue , int* pGraySrc, int* pGrayCmp, int* pZoneID, int* pZoneTh , __int64 frameWidth, __int64 iPitch16, int* piPitch16, __int64 sSPR , short* ZoneThTable, short* ZoneIdTable, __int64 ZoneTableWidth, void* pMatchTable , CDefectPair *pDefectdPair, __int64 StartPair, __int64 MaxPair, __int64 PairSize , __int64 dxPattern, __int64 dyPattern, __int64 yZoneByte, __int64 bReverseFilter , __int64 ThresholdSlide, __int64 ThresholdSuppress, __int64 bUseUnpair, short* pConBuff , int* endLine, __int64 ExTh ); int ConvPixel_Intrin(BYTE *pImgBuff, __int64 Threshold, __int64 maxDefect, __int64 nDefect , __int64 left, __int64 right, __int64 top, __int64 bottom , int* DefectX, int* DefectY, short* DefectT, short* DefectValue , int* pGraySrc, int* pGrayCmp, int* pZoneID, int* pZoneTh , __int64 frameWidth, __int64 iPitch, __int64 fSPR, __int64 sSPR , short* ZoneThTable, short* ZoneIdTable, __int64 ZoneTableWidth, void* pMatchTable , CDefectPair *pDefectdPair, __int64 StartPair, __int64 MaxPair, __int64 PairSize , __int64 dxPattern, __int64 dyPattern, __int64 yZoneByte, __int64 bReverseFilter , __int64 ThresholdSlide, __int64 ThresholdSuppress, __int64 bUseUnpair, int* endLine ); int ConvPixel_Intrin_Twice(BYTE *pImgBuff, __int64 Threshold, __int64 maxDefect, __int64 nDefect , __int64 left, __int64 right, __int64 top, __int64 bottom , int* DefectX, int* DefectY, short* DefectT, short* DefectValue , int* pGraySrc, int* pGrayCmp, int* pZoneID, int* pZoneTh , __int64 frameWidth, __int64 iPitch, __int64 fSPR, __int64 sSPR , short* ZoneThTable, short* ZoneIdTable, __int64 ZoneTableWidth, void* pMatchTable , CDefectPair *pDefectdPair, __int64 StartPair, __int64 MaxPair, __int64 PairSize , __int64 dxPattern, __int64 dyPattern, __int64 yZoneByte, __int64 bReverseFilter , __int64 ThresholdSlide, __int64 ThresholdSuppress, __int64 bUseUnpair, int* endLine , __int64 iPitch2, __int64 Threshold2, __int64 ThresholdSlide2); int ConvPixelVertS_Intrin_Twice(BYTE *pImgBuff, __int64 Threshold, __int64 maxDefect, __int64 nDefect , __int64 left, __int64 right, __int64 top, __int64 bottom , int* DefectX, int* DefectY, short* DefectT, short* DefectValue , int* pGraySrc, int* pGrayCmp, int* pZoneID, int* pZoneTh , __int64 frameWidth, __int64 iPitch16, __int64 fSPR, __int64 sSPR , short* ZoneThTable, short* ZoneIdTable, __int64 ZoneTableWidth, void* pMatchTable , CDefectPair *pDefectdPair, __int64 StartPair, __int64 MaxPair, __int64 PairSize , __int64 dxPattern, __int64 dyPattern, __int64 yZoneByte, __int64 bReverseFilter , __int64 ThresholdSlide, __int64 ThresholdSuppress, __int64 bUseUnpair, short* pConBuff , int* endLine, __int64 ExTh, __int64 iPitch2, __int64 Threshold2 , __int64 ThresholdSlide2); };