; ConvZoneVTD [ Vertical Tilt Dynamic Pitch] ; Vertical °Ë»ç¿¡ Tilt ¿¬»ê ¹× DynamicPitch±â´É Ãß°¡, ; 2011.09.20 : Vertical Pitch Ãß°¡ ; 2011.09.21 : Tilt Ãß°¡Áغñ. .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 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 xxfSprT equ xmm12 xxsSprT equ xmm13 xxSupp equ xmm14 ; ÆÄ¶ó¹ÌÅÍ 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] piPitch16Ori equ qword ptr[rbp+ 98h] iPitch 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] ZoneAddAddrPr equ qword ptr[rbp+ 110h] Tilt16 equ qword ptr[rbp+ 118h] bUseUnpair equ qword ptr[rbp+ 120h] endLine equ qword ptr[rbp+ 128h] ExTh equ qword ptr[rbp+ 130h] ThSuppress equ qword ptr[rbp+ 138h] ; ·ÎÄà º¯¼ö ; Function Start ----------------------------------ConvZoneVTD-------- ConvZoneVTD_BOE PROC local maxDefect : qword local ImgAddrOri : qword local ZoneThAddr : qword local ZoneIdAddr : qword local ZoneAddAddr : qword local ZoneThAddr1 : qword local ZoneIdAddr1 : qword local ZoneAddAddr1 : qword local ZoneTableW2 : qword local pMatch1 : qword local exPtrn : qword local eyPtrn : qword local eyPtrn1 : qword local ConPitch : qword local pairTop : qword local pairBottom : qword local iPitchHUp : qword local iPitch16 : qword local cDpc : qword local piPitch16 : 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, 08h ; ADD rbp, 0b8h mov ImgAddrOri, rcx ; Parameter -> Register mov maxDefect, r8 mov rax, ThSuppress ; Suppress movd xxSupp, eax movdqa xxTemp, xxSupp punpcklwd xxTemp, xxSupp pshufd xxSupp, xxTemp, 0 mov rax, Tilt16 ; Tilt Setting and rax, 0fh movd xxsSprT, rax movdqa xxTemp, xxsSprT punpcklwd xxTemp, xxsSprT pshufd xxsSprT, xxTemp, 0 mov rcx, SprMulti sub rcx, rax movd xxfSprT, rcx movdqa xxTemp, xxfSprT punpcklwd xxTemp, xxfSprT pshufd xxFSprT, xxTemp, 0 mov rax, Tilt16 sar rax, SprShift mov Tilt16, rax mov rcx, iPitch ; Pitch Setting 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 ;¼­Å§·¯¿¡¼­ Á׾ Bottom ¿¡¼­ 1 »©ÁØ´Ù.(BOE) mov rcx, InspBottom sub rcx, 1 mov InspBottom, rcx 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 ConPitch, 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 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 mov rdx, ZoneAddAddrPr add rdx, rax mov ZoneAddAddr, rdx mov ZoneAddAddr1, rdx pxor xmm0, xmm0 LOOP_1: jmp LOOP_1_CHECK LOOP_1_TAIL: jmp PAIRING_VERT _return_PAIRING_VERT: add ix, 010h mov rax, eyPtrn1 mov eyPtrn, rax mov rax, pMatch1 mov pMatch, rax add ZoneThAddr1, 020h mov rax, ZoneThAddr1 mov ZoneThAddr, rax add ZoneIdAddr1, 020h mov rax, ZoneIdAddr1 mov ZoneIdAddr, rax add ZoneAddAddr1, 020h mov rax, ZoneAddAddr1 mov ZoneAddAddr, rax 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 mov piPitch16, 0 ; DPC Address Set cmp piPitch16Ori, 0 je DPC_PASS mov rax, iy sar rax, 4 sal rax, 2 add rax, piPitch16Ori mov piPitch16, rax DPC_PASS: cmp ix, exPtrn ; ÆÐÅÏ °Ë»ç BD_RD Check jge CHECK_1_BOUND _return_CHECK_1_BOUND: LOOP_2: mov cDpc, 010h jmp LOOP_2_CHECK LOOP_2_TAIL: inc iy add rrImgAddr, BuffWidth mov rax, ZoneTableW2 add ZoneThAddr, rax add ZoneIdAddr, rax add ZoneAddAddr, 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: cmp piPitch16, 0 je XMM_MAKE jmp DPC_MAKE _return_DPC_MAKE: inc cDpc 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 mov rdx, ZoneAddAddrPr add rdx, rax mov ZoneAddAddr, rdx mov ZoneAddAddr1, 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 rdx, ZoneIdAddrPr add rdx, rax mov ZoneIdAddr, rdx mov rdx, ZoneAddAddrPr add rdx, rax mov ZoneAddAddr, rdx _return _return_CHECK_2_BOUND DPC_MAKE: ; verticla Àº 16¹ø¿¡ Çѹø¾¿¸¸ ·ÎµùÇÑ´Ù. cDpc Ä«¿îÆ®, µ¿ÀÏ Pitch ÆÇ´ÜÈÄ Pass ±â´É cmp cDpc, 010h jne _return_DPC_MAKE mov cDpc, 0 mov rax, piPitch16 movsxd rax, dword ptr[rax] add piPitch16, 4 cmp iPitch16, rax je _return_DPC_MAKE mov iPitch16, rax mov rcx, rax and rcx, 0fh shr rax, SprShift mov iPitch, rax mul BuffWidth mov ConPitch, rax mov rdx, 010h sub rdx, rcx movd xxsSpr, rcx movdqa xxTemp, xxsSpr punpcklwd xxTemp, xxsSpr pshufd xxsSpr, xxTemp, 0 movd xxfSpr, rdx movdqa xxTemp, xxfSpr punpcklwd xxTemp, xxfSpr pshufd xxfSpr, xxTemp, 0 jmp _return_DPC_MAKE XMM_MAKE: mov rax, rrImgAddr ; Compare Pixel add rax, ConPitch movdqu xxCmp1, [rax] ; 1 Compare movdqa xxCmp2, xxCmp1 punpcklbw xxCmp1, xmm0 punpckhbw xxCmp2, xmm0 pmullw xxCmp1, xxfSprT ; Compare SPR (fSPR, sSPR) pmullw xxCmp2, xxfSprT movdqu xxSrc2, [rax+ 1] ; 2 Compare movdqa xxSrc1, xxSrc2 punpcklbw xxSrc1, xmm0 punpckhbw xxSrc2, xmm0 pmullw xxSrc1, xxsSprT pmullw xxSrc2, xxsSprT paddw xxCmp1, xxSrc1 ; 1+ 2 , >>4, *fSpr paddw xxCmp2, xxSrc2 psrlw xxCmp1, SprShift psrlw xxCmp2, SprShift pmullw xxCmp1, xxfSpr pmullw xxCmp2, xxfSpr add rax, BuffWidth ; 3 Compare movdqu xxSrc2, [rax] movdqa xxSrc1, xxSrc2 punpcklbw xxSrc1, xmm0 punpckhbw xxSrc2, xmm0 pmullw xxSrc1, xxfSprT pmullw xxSrc2, xxfSprT movdqu xxTemp, [rax+ 1] ; 4 Compare movdqa xxZId, xxTemp punpcklbw xxTemp, xmm0 punpckhbw xxZId, xmm0 pmullw xxTemp, xxsSprT pmullw xxZId, xxsSprT paddw xxSrc1, xxTemp ; 3+ 4, >>4, *sSpr paddw xxSrc2, xxZId psrlw xxSrc1, SprShift psrlw xxSrc2, SprShift pmullw xxSrc1, xxsSpr pmullw xxSrc2, xxsSpr paddw xxCmp1, xxSrc1 paddw xxCmp2, xxSrc2 psrlw xxCmp1, SprShift psrlw xxCmp2, SprShift movdqu xxSrc1, [rrImgAddr] ; Source Pixel movdqa xxSrc2, xxSrc1 punpcklbw xxSrc1, xmm0 punpckhbw xxSrc2, xmm0 _return _return_XMM_MAKE XMM_COMPARE_END: sub ix, 10h sub ZoneThAddr, 010h sub ZoneIdAddr, 010h sub ZoneAddAddr, 010h _return _return_XMM_COMPARE 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 add ZoneAddAddr, 010h ;jmp _XMM_COMPARE_8PIXEL ; RD _XMM_COMPARE_8PIXEL: mov rax, ZoneThAddr movdqu xxTemp, [rax] mov rax, ZoneAddAddr movdqu xxZId, [rax] pminuw xxSrc1, xxSupp pminuw xxCmp1, xxSupp movdqa xxZTh, xxSrc1 pmaxuw xxZTh, xxCmp1 pmullw xxZTh, xxZId psrlw xxZTh, 8 paddw xxZTh, xxTemp 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 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, 1 jne LOOP_PAIR_NUM movsx rcx, word ptr[rrPoD+ 2*iy] cmp rcx, ExTh jle 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, 1 jne LOOP_PAIR_NUM movsx rcx, word ptr[rrPoD+ 2*iy] cmp rcx, ExTh jle 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 ;°áÇÔŸÀÔ ¹ö±× ¼öÁ¤(BOE) movsx edx, word ptr[rrToD+ 2*iy] 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: add ix32, 10h mov rax, endLine mov [rax], ix32 mov rax, nPair ; return rrNoD pop rbx pop rsi pop rdi pop r15 pop r14 pop r13 pop r12 pop r11 pop r10 ; pop rbp RET ConvZoneVTD_BOE ENDP ; Function End ----------------------------------ConvZoneVTD-------- end