.data astPair STRUCT pos dword ? pair dword ? dtype dword ? peak dword ? x dword ? y dword ? src dword ? ref dword ? zone dword ? Thre dword ? astPair ENDS SprShift equ 4 SprMulti equ 16 _return equ jmp szxMatch equ 8 .code InspLeft equ qword ptr[rbp+ 30h] InspRight equ qword ptr[rbp+ 38h] InspTop equ qword ptr[rbp+ 40h] InspBottom equ qword ptr[rbp+ 48h] DefectX equ qword ptr[rbp+ 50h] DefectY equ qword ptr[rbp+ 58h] DefectType equ qword ptr[rbp+ 60h] DefectVal equ qword ptr[rbp+ 68h] GraySrc equ qword ptr[rbp+ 70h] GrayCmp equ qword ptr[rbp+ 78h] ZoneId equ qword ptr[rbp+ 80h] ZoneTh equ qword ptr[rbp+ 88h] BuffWidth equ qword ptr[rbp+ 90h] iPitch equ qword ptr[rbp+ 98h] fSPR equ qword ptr[rbp+ 0a0h] sSPR equ qword ptr[rbp+ 0a8h] ZoneThAddrPr equ qword ptr[rbp+ 0b0h] ZoneIdAddrPr equ qword ptr[rbp+ 0b8h] ZoneTableW equ qword ptr[rbp+ 0c0h] pMatch equ qword ptr[rbp+ 0c8h] PairAddr equ qword ptr[rbp+ 0d0h] ; ±âº»°Ë»ç WIDTH nPair equ qword ptr[rbp+ 0d8h] ; ±âº» °Ë»ç HEIGHT MaxPair equ qword ptr[rbp+ 0e0h] PairSize equ qword ptr[rbp+ 0e8h] dxPtrn equ qword ptr[rbp+ 0f0h] dyPtrn equ qword ptr[rbp+ 0f8h] szyMatch equ qword ptr[rbp+ 100h] bRFilter equ qword ptr[rbp+ 108h] DThSlide equ qword ptr[rbp+ 110h] ThSuppress equ qword ptr[rbp+ 118h] bUseUnpair equ qword ptr[rbp+ 120h] ix equ rsi iy equ rdi ix32 equ esi iy32 equ edi rrImgAddr equ r8 rdImgAddr equ r8d rwImgAddr equ r8w rrNoD equ r9 rrXoD equ r10 rrYoD equ r11 rrToD equ r12 rrPoD equ r13 rrSrcD equ r14 rrCmpD equ r15 xxTemp equ xmm1 xxZTh equ xmm2 xxZId equ xmm3 xxSrc1 equ xmm4 xxSrc2 equ xmm5 xxCmp1 equ xmm6 xxCmp2 equ xmm7 xxPeakS equ xmm8 xxPeakAbs equ xmm9 xxfSpr equ xmm10 xxsSpr equ xmm11 xxSrc3 equ xmm12 xxSrc4 equ xmm13 xxCmp3 equ xmm14 xxCmp4 equ xmm15 xxSupp equ xxSrc3 xxDStart equ xxSrc4 ; ÃʱâÄ¡ xxDSlide equ xxCmp4 ; ±â¿ï±â xxDMin equ xmm15 ; Àû¿ë ±¸°£ ÃÖ¼ÒÄ¡ ; ÆÄ¶ó¹ÌÅÍ ; ·ÎÄà º¯¼ö ConvPixelVert PROC local maxDefect : qword local ImgAddrOri : qword local ZoneThAddr : qword local ZoneIdAddr : qword local ZoneThAddr1 : qword local ZoneIdAddr1 : qword local ZoneTableW2 : qword local pMatch1 : qword local exPtrn : qword local eyPtrn : qword local eyPtrn1 : qword local ConvPitch : qword local pairTop : qword local pairBottom : qword local iPitchHUp : qword local c8Pixel : dword local xMatch : dword local yMatch : dword local xMatch2 : dword local yMatch2 : dword push rbp mov rbp, rsp push r10 push r11 push r12 push r13 push r14 push r15 push rdi push rsi push rbx ADD rbp, 98h mov ImgAddrOri, rcx mov maxDefect, r8 mov rax, ThSuppress ; Suppress movd xxSupp, eax movdqa xxTemp, xxSupp punpcklwd xxTemp, xxSupp pshufd xxSupp, xxTemp, 0 movd xxZTh, edx ; Threshold movdqa xxTemp, xxZTh punpcklwd xxTemp, xxZTh pshufd xxZTh, xxTemp, 0 movdqa xxDStart, xxZTh mov rax, DThSlide movd xxDSlide, eax movdqa xxTemp, xxDSlide punpcklwd xxTemp, xxDSlide pshufd xxDSlide, xxTemp, 0 mov rax, 0 movd xxZId, eax movdqa xxTemp, xxZId punpcklwd xxTemp, xxZId pshufd xxZId, xxTemp, 0 mov rcx, iPitch and rcx, 0fh movd xxsSpr, ecx ; sSPR movdqa xxTemp, xxsSpr punpcklwd xxTemp, xxsSpr pshufd xxsSpr, xxTemp, 0 mov rax, SprMulti ; fSpr sub rax, rcx movd xxfSpr, eax movdqa xxTemp, xxfSpr punpcklwd xxTemp, xxfSpr pshufd xxfSpr, xxTemp, 0 mov xMatch2, 0 mov rax, iPitch ; iPitch sar rax, SprShift mov iPitch, rax cmp rcx, 8 jl PITCH_H_UP_PASS inc rax PITCH_H_UP_PASS: mov iPitchHUp, rax mov rcx, InspBottom sub rcx, iPitch sub rcx, 1 mov InspBottom, rcx sub rcx, iPitch mov pairBottom, rcx mov rax, InspTop add rax, iPitch mov pairTop, rax mov rax, iPitch mul BuffWidth mov ConvPitch, rax mov rax, ZoneTableW add rax, rax mov ZoneTableW2, rax mov ix, InspLeft mov iy, InspTop mov rax, InspRight sub rax, InspLeft ; add rax, 15 sar rax, 4 sal rax, 4 add rax, inspLeft mov InspRight, rax mov rrXoD, DefectX mov rrYoD, DefectY mov rrToD, DefectType mov rrPoD, DefectVal mov rrSrcD, GraySrc mov rrCmpD, GrayCmp jmp NOT_ZONE_PASS mov rcx, pMatch ; ´ÙÀ½ Zone offset±¸Çϱâ, pMatch, exPtrn, eyPtrn mov pMatch1, rcx ; ZoneThreshold Offset °è»ê(zOffset) mov rcx, szyMatch add pMatch, rcx ; ZoneThreshold Offset °è»ê(zOffset) mov rcx, pMatch movsxd rbx, dword ptr[rcx+ 4] mov yMatch, ebx mov rdx, dyPtrn add rdx, rbx mov eyPtrn, rdx ; eyPtrn mov eyPtrn1, rdx mov rax, iy sub rax, rbx mul ZoneTableW ; y*width movsxd rbx, dword ptr[rcx] mov xMatch, ebx mov rdx, dxPtrn add rdx, rbx mov exPtrn, rdx ; exPtrn mov rdx, ix sub rdx, rbx add rax, rdx ; offset= y*width+ x add rax, rax mov rdx, ZoneThAddrPr add rdx, rax mov ZoneThAddr, rdx mov ZoneThAddr1, rdx mov rdx, ZoneIdAddrPr add rdx, rax mov ZoneIdAddr, rdx mov ZoneIdAddr1, rdx NOT_ZONE_PASS: pxor xmm0, xmm0 LOOP_1: jmp LOOP_1_CHECK LOOP_1_TAIL: jmp PAIRING_VERT _return_PAIRING_VERT: add ix, 010h LOOP_1_CHECK: cmp ix, InspRight ; xÃà BED Check jge END_FUNC LOOP_1_BODY: mov iy, InspTop mov rax, BuffWidth ; À̹ÌÁö ¾îµå·¹½º Set mul iy add rax, ix add rax, ImgAddrOri mov rrImgAddr, rax ; cmp ix, exPtrn ; ÆÐÅÏ °Ë»ç BD_RD Check ; jge CHECK_1_BOUND _return_CHECK_1_BOUND: LOOP_2: jmp LOOP_2_CHECK LOOP_2_TAIL: inc iy add rrImgAddr, BuffWidth ; mov rax, ZoneTableW2 ; add ZoneThAddr, rax ; add ZoneIdAddr, rax LOOP_2_CHECK: cmp iy, InspBottom ; BED Check jge LOOP_1_TAIL ; cmp iy, eyPtrn ; BD_AD Check ; jge CHECK_2_BOUND _return_CHECK_2_BOUND: LOOP_2_BODY: jmp XMM_MAKE _return_XMM_MAKE: jmp XMM_COMPARE _return_XMM_COMPARE: jmp LOOP_2_TAIL ;;;;;;;================================================= CHECK_1_BOUND: ; ´ÙÀ½ Zone offset±¸Çϱâ, pMatch, exPtrn, eyPtrn add pMatch1, szxMatch ; ZoneThreshold Offset °è»ê(zOffset) mov rcx, pMatch1 add rcx, szyMatch mov pMatch, rcx ; ZoneThreshold Offset °è»ê(zOffset) movsxd rbx, dword ptr[rcx+ 4] mov yMatch, ebx mov rdx, dyPtrn add rdx, rbx mov eyPtrn, rdx ; eyPtrn mov eyPtrn1, rdx mov rax, iy sub rax, rbx mul ZoneTableW ; y*width movsxd rbx, dword ptr[rcx] mov xMatch, ebx mov rdx, dxPtrn ; exPtrn add rdx, rbx mov rcx, rdx add rcx, dxPtrn cmp rcx, InspRight jl EXCESS_1_BOUND_PASS mov rdx, rcx EXCESS_1_BOUND_PASS: mov exPtrn, rdx mov rdx, ix sub rdx, rbx add rax, rdx ; offset= y*width+ x add rax, rax mov rdx, ZoneThAddrPr add rdx, rax mov ZoneThAddr, rdx mov ZoneThAddr1, rdx mov rdx, ZoneIdAddrPr add rdx, rax mov ZoneIdAddr, rdx mov ZoneIdAddr1, rdx inc xMatch2 _return _return_CHECK_1_BOUND CHECK_2_BOUND: ; ´ÙÀ½ Zone offset±¸Çϱâ, eyPtrn, (exPtrnÀº LOOP_1 ¿¡¼­¸¸ ±¸ÇÔ) mov rcx, szyMatch add pMatch, rcx ; ZoneThreshold Offset °è»ê(zOffset) mov rcx, pMatch movsxd rbx, dword ptr[rcx+ 4] mov yMatch, ebx mov rdx, dyPtrn add rdx, rbx mov rax, rdx add rax, dyPtrn cmp rax, InspBottom jl EXCESS_2_BOUND_PASS mov rdx, rax EXCESS_2_BOUND_PASS: mov eyPtrn, rdx ; eyPtrn mov rax, iy sub rax, rbx mul ZoneTableW ; y*width movsxd rbx, dword ptr[rcx] mov xMatch, ebx mov rdx, ix sub rdx, rbx add rax, rdx ; offset= y*width+ x add rax, rax mov rdx, ZoneThAddrPr add rdx, rax mov ZoneThAddr, rdx ; mov ZoneThAddr1, rdx mov rdx, ZoneIdAddrPr add rdx, rax mov ZoneIdAddr, rdx ; mov ZoneIdAddr1, rdx _return _return_CHECK_2_BOUND XMM_MAKE: movdqu xxSrc1, [rrImgAddr] movdqa xxSrc2, xxSrc1 punpcklbw xxSrc1, xmm0 ; Unpack punpckhbw xxSrc2, xmm0 mov rax, rrImgAddr add rax, ConvPitch movdqu xxCmp1, [rax] ; movdqa xxCmp4, xxCmp1 movdqa xxCmp2, xxCmp1 punpcklbw xxCmp1, xmm0 ; Unpack punpckhbw xxCmp2, xmm0 pmullw xxCmp1, xxfSpr ; Compare SPR (fSPR, sSPR) pmullw xxCmp2, xxfSpr add rax, BuffWidth movdqu xxCmp3, [rax] movdqu xxTemp, xxCmp3 punpckhbw xxCmp3, xmm0 pmullw xxCmp3, xxsSpr paddw xxCmp2, xxCmp3 punpcklbw xxTemp, xmm0 pmullw xxTemp, xxsSpr paddw xxCmp1, xxTemp psrlw xxCmp1, SprShift psrlw xxCmp2, SprShift _return _return_XMM_MAKE XMM_COMPARE: mov c8Pixel, 0 jmp _XMM_COMPARE_8PIXEL _return_XMM_COMPARE_8PIXEL: cmp rrNoD, maxDefect ; BED Check jge PAIRING_VERT inc c8Pixel cmp c8Pixel, 2 je XMM_COMPARE_END ; BE_RD CHECK movdqa xxSrc1, xxSrc2 movdqa xxCmp1, xxCmp2 ; add ZoneThAddr, 010h ; add ZoneIdAddr, 010h ;jmp _XMM_COMPARE_8PIXEL ; RD _XMM_COMPARE_8PIXEL: ; mov rax, ZoneThAddr ; movdqu xxZTh, [rax] pminuw xxSrc1, xxSupp pminuw xxCmp1, xxSupp movdqa xxZTh, xxSrc1 ; Dynamic Threshold pmaxuw xxZTh, xxCmp1 pmullw xxZTh, xxDSlide psrlw xxZTh, 8 paddw xxZTh, xxDStart movdqa xxPeakS, xxSrc1 psubsw xxPeakS, xxCmp1 pabsw xxPeakAbs, xxPeakS movdqa xxTemp, xxPeakAbs pcmpgtw xxTemp, xxZTh pmovmskb rax, xxTemp cmp rax, 0 ; BD_E Check jne DEFECT_00 add ix, 8 _return _return_XMM_COMPARE_8PIXEL XMM_COMPARE_END: sub ix, 10h ; sub ZoneThAddr, 010h ; sub ZoneIdAddr, 010h _return _return_XMM_COMPARE _XMM_COMPARE_VERIFY: jmp DEFECT_00 cmp bRFilter, 1 jne DEFECT_00 ; ¼öÁ¤ÇØ¾ß µÈ´Ù.. xxSrc3À» ·ÎµùÇØ¾ßÇÑ´Ù. mov rax, rrImgAddr sub rax, BuffWidth movdqu xxSrc3, [rax] movdqa xxSrc4, xxSrc3 punpcklbw xxSrc3, xmm0 punpckhbw xxSrc4, xmm0 cmp c8Pixel, 1 jge COMPARE_VERIFY_LOAD_SECOND ; BD_AD Check movdqa xxCmp3, xxCmp4 punpcklbw xxCmp3, xmm0 jmp COMPARE_VERIFY_LOAD_END COMPARE_VERIFY_LOAD_SECOND: movdqa xxSrc3, xxSrc4 movdqa xxCmp3, xxCmp4 punpckhbw xxCmp3, xmm0 COMPARE_VERIFY_LOAD_END: pmullw xxSrc3, xxsSpr movdqa xxZId, xxfSpr pmullw xxZId, xxSrc1 paddw xxSrc3, xxZId psrlw xxSrc3, SprShift psubsw xxSrc3, xxCmp3 pabsw xxSrc3, xxSrc3 pcmpgtw xxSrc3, xxZTh pand xxTemp, xxSrc3 pmovmskb rax, xxTemp cmp rax, 0 jne DEFECT_00 add ix, 8 _return _return_XMM_COMPARE_8PIXEL DEFECT_00: ; mov rax, ZoneIdAddr ; movdqu xxZId, [rax] pextrw rax, xxTemp, 0h cmp rax, 0 je DEFECT_01 mov [rrXoD+ 4*rrNoD], ix32 mov [rrYoD+ 4*rrNoD], iy32 pextrw eax, xxSrc1, 0h mov [rrSrcD+ 4*rrNoD], eax pextrw eax, xxCmp1, 0h mov [rrCmpD+ 4*rrNoD], eax mov rcx, ZoneId pextrw eax, xxZId, 0h mov dword ptr [rcx+ 4*rrNoD], eax mov rcx, ZoneTh pextrw ebx, xxZTh, 0h mov dword ptr[rcx+ 4*rrNoD], ebx pextrw rax, xxPeakS, 0h cmp ax, 0 jg WHITE_00 mov word ptr[rrToD+ 2*rrNoD], 0 pextrw rax, xxPeakAbs, 0h sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD jmp DEFECT_01 WHITE_00: mov word ptr[rrToD+ 2*rrNoD], 1 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD DEFECT_01: inc ix pextrw rax, xxTemp, 1 cmp rax, 0 je DEFECT_02 mov [rrXoD+ 4*rrNoD], ix32 mov [rrYoD+ 4*rrNoD], iy32 pextrw eax, xxSrc1, 1 mov [rrSrcD+ 4*rrNoD], eax pextrw eax, xxCmp1, 1 mov [rrCmpD+ 4*rrNoD], eax mov rcx, ZoneId pextrw eax, xxZId, 1 mov dword ptr [rcx+ 4*rrNoD], eax mov rcx, ZoneTh pextrw rbx, xxZTh, 1 mov dword ptr[rcx+ 4*rrNoD], ebx pextrw rax, xxPeakS, 1 cmp ax, 0 jg WHITE_01 mov word ptr[rrToD+ 2*rrNoD], 0 pextrw rax, xxPeakAbs, 1 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD jmp DEFECT_02 WHITE_01: mov word ptr[rrToD+ 2*rrNoD], 1 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD DEFECT_02: inc ix pextrw rax, xxTemp, 2 cmp rax, 0 je DEFECT_03 mov [rrXoD+ 4*rrNoD], ix32 mov [rrYoD+ 4*rrNoD], iy32 pextrw eax, xxSrc1, 2 mov [rrSrcD+ 4*rrNoD], eax pextrw eax, xxCmp1, 2 mov [rrCmpD+ 4*rrNoD], eax mov rcx, ZoneId pextrw eax, xxZId, 2 mov dword ptr [rcx+ 4*rrNoD], eax mov rcx, ZoneTh pextrw rbx, xxZTh, 2 mov dword ptr[rcx+ 4*rrNoD], ebx pextrw rax, xxPeakS, 2 cmp ax, 0 jg WHITE_02 mov word ptr[rrToD+ 2*rrNoD], 0 pextrw rax, xxPeakAbs, 2 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD jmp DEFECT_03 WHITE_02: mov word ptr[rrToD+ 2*rrNoD], 1 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD DEFECT_03: inc ix pextrw rax, xxTemp, 3 cmp rax, 0 je DEFECT_04 mov [rrXoD+ 4*rrNoD], ix32 mov [rrYoD+ 4*rrNoD], iy32 pextrw eax, xxSrc1, 3 mov [rrSrcD+ 4*rrNoD], eax pextrw eax, xxCmp1, 3 mov [rrCmpD+ 4*rrNoD], eax mov rcx, ZoneId pextrw eax, xxZId, 3 mov dword ptr [rcx+ 4*rrNoD], eax mov rcx, ZoneTh pextrw rbx, xxZTh, 3 mov dword ptr[rcx+ 4*rrNoD], ebx pextrw rax, xxPeakS, 3 cmp ax, 0 jg WHITE_03 mov word ptr[rrToD+ 2*rrNoD], 0 pextrw rax, xxPeakAbs, 3 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD jmp DEFECT_04 WHITE_03: mov word ptr[rrToD+ 2*rrNoD], 1 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD DEFECT_04: inc ix pextrw rax, xxTemp, 4 cmp rax, 0 je DEFECT_05 mov [rrXoD+ 4*rrNoD], ix32 mov [rrYoD+ 4*rrNoD], iy32 pextrw eax, xxSrc1, 4 mov [rrSrcD+ 4*rrNoD], eax pextrw eax, xxCmp1, 4 mov [rrCmpD+ 4*rrNoD], eax mov rcx, ZoneId pextrw eax, xxZId, 4 mov dword ptr [rcx+ 4*rrNoD], eax mov rcx, ZoneTh pextrw rbx, xxZTh, 4 mov dword ptr[rcx+ 4*rrNoD], ebx pextrw rax, xxPeakS, 4 cmp ax, 0 jg WHITE_04 mov word ptr[rrToD+ 2*rrNoD], 0 pextrw rax, xxPeakAbs, 4 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD jmp DEFECT_05 WHITE_04: mov word ptr[rrToD+ 2*rrNoD], 1 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD DEFECT_05: inc ix pextrw rax, xxTemp, 5 cmp rax, 0 je DEFECT_06 mov [rrXoD+ 4*rrNoD], ix32 mov [rrYoD+ 4*rrNoD], iy32 pextrw eax, xxSrc1, 5 mov [rrSrcD+ 4*rrNoD], eax pextrw eax, xxCmp1, 5 mov [rrCmpD+ 4*rrNoD], eax mov rcx, ZoneId pextrw eax, xxZId, 5 mov dword ptr [rcx+ 4*rrNoD], eax mov rcx, ZoneTh pextrw rbx, xxZTh, 5 mov dword ptr[rcx+ 4*rrNoD], ebx pextrw rax, xxPeakS, 5 cmp ax, 0 jg WHITE_05 mov word ptr[rrToD+ 2*rrNoD], 0 pextrw rax, xxPeakAbs, 5 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD jmp DEFECT_06 WHITE_05: mov word ptr[rrToD+ 2*rrNoD], 1 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD DEFECT_06: inc ix pextrw rax, xxTemp, 6 cmp rax, 0 je DEFECT_07 mov [rrXoD+ 4*rrNoD], ix32 mov [rrYoD+ 4*rrNoD], iy32 pextrw eax, xxSrc1, 6 mov [rrSrcD+ 4*rrNoD], eax pextrw eax, xxCmp1, 6 mov [rrCmpD+ 4*rrNoD], eax mov rcx, ZoneId pextrw eax, xxZId, 6 mov dword ptr [rcx+ 4*rrNoD], eax mov rcx, ZoneTh pextrw rbx, xxZTh, 6 mov dword ptr[rcx+ 4*rrNoD], ebx pextrw rax, xxPeakS, 6 cmp ax, 0 jg WHITE_06 mov word ptr[rrToD+ 2*rrNoD], 0 pextrw rax, xxPeakAbs, 6 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD jmp DEFECT_07 WHITE_06: mov word ptr[rrToD+ 2*rrNoD], 1 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD DEFECT_07: inc ix pextrw rax, xxTemp, 7 cmp rax, 0 je DEFECT_08 mov [rrXoD+ 4*rrNoD], ix32 mov [rrYoD+ 4*rrNoD], iy32 pextrw eax, xxSrc1, 7 mov [rrSrcD+ 4*rrNoD], eax pextrw eax, xxCmp1, 7 mov [rrCmpD+ 4*rrNoD], eax mov rcx, ZoneId pextrw eax, xxZId, 7 mov dword ptr [rcx+ 4*rrNoD], eax mov rcx, ZoneTh pextrw rbx, xxZTh, 7 mov dword ptr[rcx+ 4*rrNoD], ebx pextrw rax, xxPeakS, 7 cmp ax, 0 jg WHITE_07 mov word ptr[rrToD+ 2*rrNoD], 0 pextrw rax, xxPeakAbs, 7 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD jmp DEFECT_08 WHITE_07: mov word ptr[rrToD+ 2*rrNoD], 1 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD DEFECT_08: inc ix _return _return_XMM_COMPARE_8PIXEL PAIRING_VERT: ; JMP _return_PAIRING_VERT mov iy, -1 LOOP_PAIR_NUM: inc iy cmp iy, rrNoD jge LOOP_PAIR_NUM_END mov rax, nPair cmp rax, MaxPair jge END_FUNC movsx rdx, word ptr [rrToD+ 2*iy] cmp rdx, 3 ; check type DEFTYPE_NODEFECT= 3, DEFTYPE_DELETE= 4 jge LOOP_PAIR_NUM mov rbx, iy movsxd rcx, dword ptr [rrYoD+ 4*iy] mov rax, rcx add rax, iPitchHUp ; mov yPlusPitch, rax movsxd rrImgAddr, dword ptr[rrXoD+ 4*iy] ; Filter_2_Pair_XPosition cmp rcx, pairBottom jg PAIR_BOTTOM cmp rcx, pairTop jge PAIR_CENTER PAIR_TOP: inc rbx cmp rbx, rrNoD jge PAIR_TOP_UNPAIR movsxd rdx, dword ptr[rrYoD+ 4*rbx] ; Filter_1_Pair_YPosition cmp rdx, rax ; cmp rdx, yPlusPitch jl PAIR_TOP jg PAIR_TOP_UNPAIR movsxd rcx, dword ptr[rrXoD+ 4*rbx] cmp rrImgAddr, rcx jne PAIR_TOP movzx rrImgAddr, word ptr[rrToD+ 2*rbx] ; Filter_3_TYPE_DELETE cmp rrImgAddr, 3 jge LOOP_PAIR_NUM ; jge PAIR_TOP ;Filte_1_ÀÇ Á¶°ÇÀÌ (+-1)·Î ¹Ù²ð °æ¿ì ¹Ù²¸¾ß ÇÑ´Ù. mov ax, word ptr[rrToD+ 2*iy] ; Filter_4_TYPE_PAIR cmp ax, rwImgAddr je LOOP_PAIR_NUM ; jge PAIR_TOP ;Filte_1_ÀÇ Á¶°ÇÀÌ ¹Ù²ð °æ¿ì ¹Ù²¸¾ß ÇÑ´Ù. mov word ptr [rrToD+ 2*rbx], 4 mov rax, PairAddr mov (astPair ptr [rax]).pos, 1 mov (astPair ptr [rax]).pair, 1 mov (astPair ptr [rax]).x, ecx mov (astPair ptr [rax]).y, edx mov (astPair ptr [rax]).dtype, rdImgAddr movsx edx, word ptr[rrPoD+ 2*rbx] mov (astPair ptr [rax]).peak, edx mov edx, [rrSrcD+ 4*rbx] mov (astPair ptr [rax]).src, edx mov edx, [rrCmpD+ 4*rbx] mov (astPair ptr [rax]).ref, edx mov rdx, ZoneId mov edx, [rdx+ 4*rbx] mov (astPair ptr [rax]).zone, edx mov rdx, ZoneTh mov edx, [rdx+ 4*rbx] mov (astPair ptr [rax]).thre, edx add rax, PairSize mov PairAddr, rax inc nPair jmp LOOP_PAIR_NUM PAIR_TOP_UNPAIR: cmp bUseUnpair, 0 je LOOP_PAIR_NUM mov rcx, PairAddr mov (astPair ptr [rcx]).pos, 1 mov (astPair ptr [rcx]).pair, 5 mov (astPair ptr [rcx]).x, rdImgAddr sub rax, iPitchHUp mov (astPair ptr [rcx]).y, eax movzx edx, word ptr[rrToD+ 2*iy] mov (astPair ptr [rcx]).dtype, edx movsx edx, word ptr[rrPoD+ 2*iy] mov (astPair ptr [rcx]).peak, edx mov edx, [rrSrcD+ 4*iy] mov (astPair ptr [rcx]).src, edx mov edx, [rrCmpD+ 4*iy] mov (astPair ptr [rcx]).ref, edx mov rdx, ZoneId mov edx, [rdx+ 4*iy] mov (astPair ptr [rcx]).zone, edx mov rdx, ZoneTh mov edx, [rdx+ 4*iy] mov (astPair ptr [rcx]).thre, edx add rcx, PairSize mov PairAddr, rcx inc nPair jmp LOOP_PAIR_NUM PAIR_CENTER: inc rbx cmp rbx, rrNoD jge LOOP_PAIR_NUM movsxd rdx, dword ptr[rrYoD+ 4*rbx] ; Filter_1_Pair_YPosition cmp rdx, rax ; cmp rdx, yPlusPitch jl PAIR_CENTER jg LOOP_PAIR_NUM ; movsxd rrImgAddr, dword ptr[rrXoD+ 4*iy] ; Filter_2_Pair_XPosition movsxd rcx, dword ptr[rrXoD+ 4*rbx] cmp rrImgAddr, rcx jne PAIR_CENTER movzx rrImgAddr, word ptr[rrToD+ 2*rbx] ; Filter_3_TYPE_DELETE cmp rrImgAddr, 3 jge LOOP_PAIR_NUM ; jge PAIR_CENTER ;Filte_1_ÀÇ Á¶°ÇÀÌ (+-1)·Î ¹Ù²ð °æ¿ì ¹Ù²¸¾ß ÇÑ´Ù. mov ax, word ptr[rrToD+ 2*iy] ; Filter_4_TYPE_PAIR cmp ax, rwImgAddr je LOOP_PAIR_NUM ; jge PAIR_CENTER ;Filte_1_ÀÇ Á¶°ÇÀÌ ¹Ù²ð °æ¿ì ¹Ù²¸¾ß ÇÑ´Ù. mov word ptr [rrToD+ 2*rbx], 4 mov rax, PairAddr mov (astPair ptr [rax]).pos, 2 mov (astPair ptr [rax]).pair, 1 mov (astPair ptr [rax]).x, ecx mov (astPair ptr [rax]).y, edx mov (astPair ptr [rax]).dtype, rdImgAddr movsx edx, word ptr[rrPoD+ 2*rbx] mov (astPair ptr [rax]).peak, edx mov edx, [rrSrcD+ 4*rbx] mov (astPair ptr [rax]).src, edx mov edx, [rrCmpD+ 4*rbx] mov (astPair ptr [rax]).ref, edx mov rdx, ZoneId mov edx, [rdx+ 4*rbx] mov (astPair ptr [rax]).zone, edx mov rdx, ZoneTh mov edx, [rdx+ 4*rbx] mov (astPair ptr [rax]).thre, edx add rax, PairSize mov PairAddr, rax inc nPair jmp LOOP_PAIR_NUM PAIR_BOTTOM: ; ¾Õ¿¡¼­ pairingÀÌ µÇÁö ¾ÊÀ¸¸é ´õÀÌ»ó pairing ÇÒ ¼ö ¾ø´Ù. ¹«Á¶°Ç unpairÀÌ´Ù. cmp bUseUnpair, 0 je LOOP_PAIR_NUM mov rcx, PairAddr mov (astPair ptr [rcx]).pos, 3 mov (astPair ptr [rcx]).pair, 5 mov (astPair ptr [rcx]).x, rdImgAddr mov (astPair ptr [rcx]).y, eax inc edx and edx, 1 mov (astPair ptr [rcx]).dtype, edx movsx edx, word ptr[rrPoD+ 2*iy] mov (astPair ptr [rcx]).peak, edx mov edx, [rrSrcD+ 4*iy] mov (astPair ptr [rcx]).ref, edx mov edx, [rrCmpD+ 4*iy] mov (astPair ptr [rcx]).src, edx mov rdx, ZoneId mov edx, [rdx+ 4*iy] mov (astPair ptr [rcx]).zone, edx mov rdx, ZoneTh mov edx, [rdx+ 4*iy] mov (astPair ptr [rcx]).thre, edx add rcx, PairSize mov PairAddr, rcx inc nPair jmp LOOP_PAIR_NUM LOOP_PAIR_NUM_END: mov rrNoD, 0 jmp _return_PAIRING_VERT END_FUNC: ;mov rax, rrNoD ; return rrNoD mov rax, nPair ; return nPair pop rbx pop rsi pop rdi pop r15 pop r14 pop r13 pop r12 pop r11 pop r10 pop rbp RET ConvPixelVert ENDP ConvPixelVertTest PROC local maxDefect : qword local ImgAddrOri : qword local ZoneThAddr : qword local ZoneIdAddr : qword local ZoneThAddr1 : qword local ZoneIdAddr1 : qword local ZoneTableW2 : qword local pMatch1 : qword local exPtrn : qword local eyPtrn : qword local eyPtrn1 : qword local ConvPitch : qword local pairTop : qword local pairBottom : qword local iPitchHUp : qword local c8Pixel : dword local xMatch : dword local yMatch : dword local xMatch2 : dword local yMatch2 : dword push rbp mov rbp, rsp push r10 push r11 push r12 push r13 push r14 push r15 push rdi push rsi push rbx ADD rbp, 98h mov ImgAddrOri, rcx mov maxDefect, r8 mov rax, ThSuppress ; Suppress movd xxSupp, eax movdqa xxTemp, xxSupp punpcklwd xxTemp, xxSupp pshufd xxSupp, xxTemp, 0 movd xxZTh, edx ; Threshold movdqa xxTemp, xxZTh punpcklwd xxTemp, xxZTh pshufd xxZTh, xxTemp, 0 movdqa xxDStart, xxZTh mov rax, DThSlide movd xxDSlide, eax movdqa xxTemp, xxDSlide punpcklwd xxTemp, xxDSlide pshufd xxDSlide, xxTemp, 0 mov rax, 0 movd xxZId, eax movdqa xxTemp, xxZId punpcklwd xxTemp, xxZId pshufd xxZId, xxTemp, 0 mov rcx, iPitch and rcx, 0fh movd xxsSpr, ecx ; sSPR movdqa xxTemp, xxsSpr punpcklwd xxTemp, xxsSpr pshufd xxsSpr, xxTemp, 0 mov rax, SprMulti ; fSpr sub rax, rcx movd xxfSpr, eax movdqa xxTemp, xxfSpr punpcklwd xxTemp, xxfSpr pshufd xxfSpr, xxTemp, 0 mov xMatch2, 0 mov rax, iPitch ; iPitch sar rax, SprShift mov iPitch, rax cmp rcx, 8 jl PITCH_H_UP_PASS inc rax PITCH_H_UP_PASS: mov iPitchHUp, rax mov rcx, InspBottom sub rcx, iPitch sub rcx, 1 mov InspBottom, rcx sub rcx, iPitch mov pairBottom, rcx mov rax, InspTop add rax, iPitch mov pairTop, rax mov rax, iPitch mul BuffWidth mov ConvPitch, rax mov rax, ZoneTableW add rax, rax mov ZoneTableW2, rax mov ix, InspLeft mov iy, InspTop mov rax, InspRight sub rax, InspLeft ; add rax, 15 sar rax, 4 sal rax, 4 add rax, inspLeft mov InspRight, rax mov rrXoD, DefectX mov rrYoD, DefectY mov rrToD, DefectType mov rrPoD, DefectVal mov rrSrcD, GraySrc mov rrCmpD, GrayCmp pxor xmm0, xmm0 LOOP_1: jmp LOOP_1_CHECK LOOP_1_TAIL: add ix, 010h LOOP_1_CHECK: cmp ix, InspRight ; xÃà BED Check jge END_FUNC LOOP_1_BODY: mov iy, InspTop mov rax, BuffWidth ; À̹ÌÁö ¾îµå·¹½º Set mul iy add rax, ix add rax, ImgAddrOri mov rrImgAddr, rax LOOP_2: jmp LOOP_2_CHECK LOOP_2_TAIL: inc iy add rrImgAddr, BuffWidth LOOP_2_CHECK: cmp iy, InspBottom ; BED Check jge LOOP_1_TAIL LOOP_2_BODY: jmp XMM_MAKE _return_XMM_MAKE: jmp XMM_COMPARE _return_XMM_COMPARE: jmp LOOP_2_TAIL XMM_MAKE: XMM_COMPARE: END_FUNC: ret ConvPixelVertTest ENDP end