📄 ff_kerneldeint.cpp
字号:
//; - *(curPrevPtr+U1*prevPitch )
//#define SOURCE SRC_PREV
//#define TARGET mm0
//#define DIRECTION U1
DeinterlaceLoad<U1,SRC_PREV>(eax,esi,ecx,edi,mm0,EAX_INVERTED);// #include "include\DeinterlaceLoad.cpp"
movq (mm1,mm0);
punpcklbw (mm0,mm6);
punpckhbw (mm1,mm6);
psubsw (mm4,mm0);
psubsw (mm5,mm1);
//; - *(curPrevPtr+D1*prevPitch );
//#define SOURCE SRC_PREV
//#define TARGET mm0
//#define DIRECTION D1
DeinterlaceLoad<D1,SRC_PREV>(eax,esi,ecx,edi,mm0,EAX_INVERTED);// #include "include\DeinterlaceLoad.cpp"
movq (mm1,mm0);
punpcklbw (mm0,mm6);
punpckhbw (mm1,mm6);
psubsw (mm4,mm0);
psubsw (mm5,mm1);
if (EAX_INVERTED)
eax=-eax;
}else{// defined TWOWAY
//; intVal=+8*( *(curSrcPtr +ASD1*srcPitch)
//#define SOURCE SRC_CUR
//#define TARGET mm0
//#define DIRECTION ASD1
bool EAX_INVERTED=false;
DeinterlaceLoad<ASD1,SRC_CUR>(eax,esi,ecx,edi,mm0,EAX_INVERTED);// #include "include\DeinterlaceLoad.cpp"
movq (mm1,mm0);
punpcklbw (mm0,mm6);
punpckhbw (mm1,mm6);
//; +*(curSrcPtr +ASU1*srcPitch))
//#define SOURCE SRC_CUR
//#define TARGET mm4
//#define DIRECTION ASU1
DeinterlaceLoad<ASU1,SRC_CUR>(eax,esi,ecx,edi,mm4,EAX_INVERTED);// #include "include\DeinterlaceLoad.cpp"
movq (mm5,mm4);
punpcklbw (mm4,mm6);
punpckhbw (mm5,mm6);
paddsw (mm4,mm0);
paddsw (mm5,mm1);
psllw (mm4,3);
psllw (mm5,3);
//; +2*( *(curNextPtr )
//#define SOURCE SRC_NEXT
//#define TARGET mm0
//#define DIRECTION 0
DeinterlaceLoad<0,SRC_NEXT>(eax,esi,ecx,edi,mm0,EAX_INVERTED);// #include "include\DeinterlaceLoad.cpp"
movq (mm1,mm0);
punpcklbw (mm0,mm6);
punpckhbw (mm1,mm6);
//; +*(curPrevPtr ))
//#define SOURCE SRC_PREV
//#define TARGET mm2
//#define DIRECTION 0
DeinterlaceLoad<0,SRC_PREV>(eax,esi,ecx,edi,mm2,EAX_INVERTED);// #include "include\DeinterlaceLoad.cpp"
movq (mm3,mm2);
punpcklbw (mm2,mm6);
punpckhbw (mm3,mm6);
paddsw (mm2,mm0);
paddsw (mm3,mm1);
psllw (mm2,1);
psllw (mm3,1);
paddsw (mm4,mm2);
paddsw (mm5,mm3);
//; - *(curNextPtr+U1*nextPitch )
//#define SOURCE SRC_NEXT
//#define TARGET mm0
//#define DIRECTION U1
DeinterlaceLoad<U1,SRC_NEXT>(eax,esi,ecx,edi,mm0,EAX_INVERTED);// #include "include\DeinterlaceLoad.cpp"
movq (mm1,mm0);
punpcklbw (mm0,mm6);
punpckhbw (mm1,mm6);
psubsw (mm4,mm0);
psubsw (mm5,mm1);
//; - *(curNextPtr+D1*nextPitch )
//#define SOURCE SRC_NEXT
//#define TARGET mm0
//#define DIRECTION D1
DeinterlaceLoad<D1,SRC_NEXT>(eax,esi,ecx,edi,mm0,EAX_INVERTED);// #include "include\DeinterlaceLoad.cpp"
movq (mm1,mm0);
punpcklbw (mm0,mm6);
punpckhbw (mm1,mm6);
psubsw (mm4,mm0);
psubsw (mm5,mm1);
//; - *(curPrevPtr+D1*prevPitch )
//#define SOURCE SRC_PREV
//#define TARGET mm0
//#define DIRECTION D1
DeinterlaceLoad<D1,SRC_PREV>(eax,esi,ecx,edi,mm0,EAX_INVERTED);// #include "include\DeinterlaceLoad.cpp"
movq (mm1,mm0);
punpcklbw (mm0,mm6);
punpckhbw (mm1,mm6);
psubsw (mm4,mm0);
psubsw (mm5,mm1);
//; - *(curPrevPtr+U1*prevPitch );
//#define SOURCE SRC_PREV
//#define TARGET mm0
//#define DIRECTION U1
DeinterlaceLoad<U1,SRC_PREV>(eax,esi,ecx,edi,mm0,EAX_INVERTED);// #include "include\DeinterlaceLoad.cpp"
movq (mm1,mm0);
punpcklbw (mm0,mm6);
punpckhbw (mm1,mm6);
psubsw (mm4,mm0);
psubsw (mm5,mm1);
if (EAX_INVERTED)
eax=-eax;
}
//; dstVal/=16;
psraw (mm4,4);
psraw (mm5,4);
}else{// defined SHARP
if (!TWOWAY){
//; lIntVal=+17236*( *(curSrcPtr +ASD1*srcPitch)
//#define SOURCE SRC_CUR
//#define TARGET mm0
//#define DIRECTION ASD1
bool EAX_INVERTED=false;
DeinterlaceLoad<ASD1,SRC_CUR>(eax,esi,ecx,edi,mm0,EAX_INVERTED);// #include "include\DeinterlaceLoad.cpp"
movq (mm1,mm0);
punpcklbw (mm0,mm0);// Byte XX -> Word XXXX
punpckhbw (mm1,mm1);// (more accurate than XX00)
psrlw (mm0,2);
psrlw (mm1,2);
//; +*(curSrcPtr +ASU1*srcPitch))
//#define SOURCE SRC_CUR
//#define TARGET mm4
//#define DIRECTION ASU1
DeinterlaceLoad<ASU1,SRC_CUR>(eax,esi,ecx,edi,mm4,EAX_INVERTED);// #include "include\DeinterlaceLoad.cpp"
movq (mm5,mm4);
punpcklbw (mm4,mm4);
punpckhbw (mm5,mm5);
psrlw (mm4,2);
psrlw (mm5,2);
paddsw (mm4,mm0);
paddsw (mm5,mm1);
//;mov ebx,043544354h ; 32768*0.526
//;movd mm2,ebx
//;punpcklwd mm2,mm2
movq (mm2,qword_4354h);
pmulhw (mm4,mm2);
pmulhw (mm5,mm2);
//; + 5570*( *(curPrevPtr ))
//#define SOURCE SRC_PREV
//#define TARGET mm0
//#define DIRECTION 0
DeinterlaceLoad<0,SRC_PREV>(eax,esi,ecx,edi,mm0,EAX_INVERTED);// #include "include\DeinterlaceLoad.cpp"
movq (mm1,mm0);
punpcklbw (mm0,mm0);
punpckhbw (mm1,mm1);
psrlw (mm0,2);
psrlw (mm1,2);
//;mov ebx,015c215c2h ; 32768*0.170
//;movd mm2,ebx
//;punpcklwd mm2,mm2
movq (mm2,qword_15c2h);
pmulhw (mm0,mm2);
pmulhw (mm1,mm2);
paddsw (mm4,mm0);
paddsw (mm5,mm1);
//; - 3801*( *(curPrevPtr+U1*prevPitch )
//#define SOURCE SRC_PREV
//#define TARGET mm0
//#define DIRECTION U1
DeinterlaceLoad<U1,SRC_PREV>(eax,esi,ecx,edi,mm0,EAX_INVERTED);// #include "include\DeinterlaceLoad.cpp"
movq (mm1,mm0);
punpcklbw (mm0,mm0);
punpckhbw (mm1,mm1);
psrlw (mm0,2);
psrlw (mm1,2);
//; +*(curPrevPtr+D1*prevPitch ))
//#define SOURCE SRC_PREV
//#define TARGET mm2
//#define DIRECTION D1
DeinterlaceLoad<D1,SRC_PREV>(eax,esi,ecx,edi,mm2,EAX_INVERTED);// #include "include\DeinterlaceLoad.cpp"
movq (mm3,mm2);
punpcklbw (mm2,mm2);
punpckhbw (mm3,mm3);
psrlw (mm2,2);
psrlw (mm3,2);
paddsw (mm0,mm2);
paddsw (mm1,mm3);
//;mov ebx,00ed90ed9h ; 32768*0.116
//;movd mm2,ebx
//;punpcklwd mm2,mm2
movq (mm2,qword_0ed9h);
pmulhw (mm0,mm2);
pmulhw (mm1,mm2);
psubsw (mm4,mm0);
psubsw (mm5,mm1);
//; - 852*( *(curSrcPtr +ASD2*srcPitch)
//#define SOURCE SRC_CUR
//#define TARGET mm0
//#define DIRECTION ASD2
DeinterlaceLoad<ASD2,SRC_CUR>(eax,esi,ecx,edi,mm0,EAX_INVERTED);// #include "include\DeinterlaceLoad.cpp"
movq (mm1,mm0);
punpcklbw (mm0,mm0);
punpckhbw (mm1,mm1);
psrlw (mm0,2);
psrlw (mm1,2);
//; +*(curSrcPtr +ASU2*srcPitch))
//#define SOURCE SRC_CUR
//#define TARGET mm2
//#define DIRECTION ASU2
DeinterlaceLoad<ASU2,SRC_CUR>(eax,esi,ecx,edi,mm2,EAX_INVERTED);// #include "include\DeinterlaceLoad.cpp"
movq (mm3,mm2);
punpcklbw (mm2,mm2);
punpckhbw (mm3,mm3);
psrlw (mm2,2);
psrlw (mm3,2);
paddsw (mm0,mm2);
paddsw (mm1,mm3);
//;mov ebx,003540354h ; 32768*0.026
//;movd mm2,ebx
//;punpcklwd mm2,mm2
movq (mm2,qword_0354h);
pmulhw (mm0,mm2);
pmulhw (mm1,mm2);
psubsw (mm4,mm0);
psubsw (mm5,mm1);
//; + 1016*( *(curPrevPtr+U2*prevPitch )
//#define SOURCE SRC_PREV
//#define TARGET mm0
//#define DIRECTION U2
DeinterlaceLoad<U2,SRC_PREV>(eax,esi,ecx,edi,mm0,EAX_INVERTED);// #include "include\DeinterlaceLoad.cpp"
movq (mm1,mm0);
punpcklbw (mm0,mm0);
punpckhbw (mm1,mm1);
psrlw (mm0,2);
psrlw (mm1,2);
//; +*(curPrevPtr+D2*prevPitch ));
//#define SOURCE SRC_PREV
//#define TARGET mm2
//#define DIRECTION D2
DeinterlaceLoad<D2,SRC_PREV>(eax,esi,ecx,edi,mm2,EAX_INVERTED);// #include "include\DeinterlaceLoad.cpp"
movq (mm3,mm2);
punpcklbw (mm2,mm2);
punpckhbw (mm3,mm3);
psrlw (mm2,2);
psrlw (mm3,2);
paddsw (mm0,mm2);
paddsw (mm1,mm3);
//;mov ebx,003f803f8h ; 32768*0.031
//;movd mm2,ebx
//;punpcklwd mm2,mm2
movq (mm2,qword_03f8h);
pmulhw (mm0,mm2);
pmulhw (mm1,mm2);
paddsw (mm4,mm0);
paddsw (mm5,mm1);
//; Word XXYY -> Byte XX via XXYY-00XX
//; (result closer to C++ implementation)
movq (mm0,mm4);
movq (mm1,mm5);
psraw (mm0,8);
psraw (mm1,8);
psubsw (mm4,mm0);
psubsw (mm5,mm1);
if (EAX_INVERTED)
eax=-eax;
// intVal=lIntVal/16384;
psraw (mm4,5);
psraw (mm5,5);
}else{// ; defined TWOWAY
//; lIntVal=+17236*( *(curSrcPtr +ASD1*srcPitch)
//#define SOURCE SRC_CUR
//#define TARGET mm0
//#define DIRECTION ASD1
bool EAX_INVERTED=false;
DeinterlaceLoad<ASD1,SRC_CUR>(eax,esi,ecx,edi,mm0,EAX_INVERTED);// #include "include\DeinterlaceLoad.cpp"
movq (mm1,mm0);
punpcklbw (mm0,mm0);
punpckhbw (mm1,mm1);
psrlw (mm0,3);
psrlw (mm1,3);
//; +*(curSrcPtr +ASU1*srcPitch))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -