⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ff_kerneldeint.cpp

📁 从FFMPEG转换而来的H264解码程序,VC下编译..
💻 CPP
📖 第 1 页 / 共 5 页
字号:
                        //;            -    *(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 + -