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

📄 deringopt.cpp

📁 从FFMPEG转换而来的H264解码程序,VC下编译..
💻 CPP
📖 第 1 页 / 共 5 页
字号:

                pmullw        (  mm1,    mm5                             );/* pu*au */
                movq          (  mm3,    mm2                             );/* make a copy of mm2 */

                punpcklbw     (  mm2,    mm7                             );/* lower four */
                movq          (  mm6,    eax+16                );/* ad */

                punpckhbw     (  mm3,    mm7                             );/* higher four */
                paddw         (  mm4,    mm6                             );/* au+ad */

                pmullw        (  mm2,    mm6                             );/* au*pu+ad*pd */
                movq          (  mm6,    eax+24                );/* ad */

                paddw         (  mm0,    mm2                     );
                paddw         (  mm5,    mm6                             );/* au+ad */

                pmullw        (  mm3,    mm6                             );/* ad*pd */
                movq          (  mm2,    esi-1                 );/* pixel to the left */

                paddw         (  mm1,    mm3                             );/* au*pu+ad*pd */
                movq          (  mm3,    mm2                             );/* make a copy of mm2 */

                punpcklbw     (  mm2,    mm7                             );/* four left pixels */
                movq          (  mm6,    ebx                   );/* al */

                punpckhbw     (  mm3,    mm7                             );/* four right pixels */
                paddw         (  mm4,    mm6                             );/* au + ad + al */

                pmullw        (  mm2,    mm6                             );/* pl * al */
                movq          (  mm6,    ebx+8                 );/* al */

                paddw         (  mm0,    mm2                             );/* au*pu+ad*pd+al*pl */
                paddw         (  mm5,    mm6                             );/* au+ad+al */

                pmullw        (  mm3,    mm6                             );/* al*pl */
                movq          (  mm2,    esi+1                 );/* pixel to the right */

                paddw         (  mm1,    mm3                             );/* au*pu+ad*pd+al*pl */
                movq          (  mm3,    mm2                             );/* make a copy of mm2 */

                punpcklbw     (  mm2,    mm7                             );/* four left pixels */
                movq          (  mm6,    ebx+128                       );/* ar */

                punpckhbw     (  mm3,    mm7                             );/* four right pixels */
                paddw         (  mm4,    mm6                             );/* au + ad + al + ar */

                pmullw        (  mm2,    mm6                             );/* pr * ar */
                movq          (  mm6,    ebx+136               );/* ar */

                paddw         (  mm0,    mm2                             );/* au*pu+ad*pd+al*pl+pr*ar */
                paddw         (  mm5,    mm6                             );/* au+ad+al+ar */

                pmullw        (  mm3,    mm6                             );/* ar*pr */
                movq          (  mm2,    esi                   );/* p */

                paddw         (  mm1,    mm3                             );/* au*pu+ad*pd+al*pl+ar*pr */
                movq          (  mm3,    mm2                             );/* make a copy of the pixel */

                /* mm0, mm1 ---  au*pu+ad*pd+al*pl+ar*pr */
                /* mm4, mm5     ---      au + ad + al + ar */

                punpcklbw    (   mm2,    mm7                             );/* left four pixels */
                movq         (   mm6,    Four128s                );/* 0080  0080 0080 0080 */

                punpckhbw    (   mm3,    mm7                             );/* right four pixels */
                psubw        (   mm6,    mm4                             );/* 128-(au+ad+al+ar) */

                pmullw       (   mm2,    mm6                             );/* p*(128-(au+ad+al+ar)) */
                movq         (   mm6,    Four128s                );/* 0080  0080 0080 0080 */

                paddw        (   mm0,    mm2                             );/* sum */
                psubw        (   mm6,    mm5                             );/* 128-(au+ad+al+ar) */

                pmullw       (   mm3,    mm6                             );/* p*(128-(au+ad+al+ar)) */
                movq         (   mm6,    Four64s                 );/* {64, 64, 64, 64 } */

                movq         (   mm7,    mm6                             );/* {64, 64, 64, 64} */
                paddw        (   mm0,    mm6                             );/* sum+B */

                paddw        (   mm1,    mm3                             );/* sum */
                psllw        (   mm7,    8                               );/* {16384, .. } */

                paddw        (   mm0,    mm7                             );/* clamping */
                paddw        (   mm1,    mm6                             );/* sum+B */

                paddw        (   mm1,    mm7                             );/* clamping */
                psubusw      (   mm0,    mm7                             );/* clamping */

                psubusw      (   mm1,    mm7                             );/* clamping */
                psrlw        (   mm0,    7                               );/* (sum+B)>>7 */

                psrlw        (   mm1,    7                               );/* (sum+B)>>7 */
                packuswb     (   mm0,    mm1                             );/* pack to 8 bytes */

                movq         (   edi,  mm0                             );/* write to destination */

                esi+=    ecx                             ;/* Src += Pitch */
                edi+=    ecx                             ;/* Des += Pitch */

                eax+=    16                              ;/* UDPointer += 8 */
                ebx+=    16              ;/* LPointer +=8 */


        /* Fifth Row */

                movq          (  mm0,    esi+edx               );/* mm0 = Pixels above */
                pxor          (  mm7,    mm7                             );/* clear mm7 */

                movq          (  mm1,    mm0                             );/* make a copy of mm0 */
                punpcklbw     (  mm0,    mm7                             );/* lower four pixels */

                movq          (  mm4,    eax                   );/* au */
                punpckhbw     (  mm1,    mm7                             );/* high four pixels */

                movq          (  mm5,    eax+8                 );/* au */

                pmullw        (  mm0,    mm4                             );/* pu*au */
                movq          (  mm2,    esi+ecx               );/* mm2 = pixels below */

                pmullw        (  mm1,    mm5                             );/* pu*au */
                movq          (  mm3,    mm2                             );/* make a copy of mm2 */

                punpcklbw     (  mm2,    mm7                             );/* lower four */
                movq          (  mm6,    eax+16                );/* ad */

                punpckhbw     (  mm3,    mm7                             );/* higher four */
                paddw         (  mm4,    mm6                             );/* au+ad */

                pmullw        (  mm2,    mm6                             );/* au*pu+ad*pd */
                movq          (  mm6,    eax+24                );/* ad */

                paddw         (  mm0,    mm2                     );
                paddw         (  mm5,    mm6                             );/* au+ad */

                pmullw        (  mm3,    mm6                             );/* ad*pd */
                movq          (  mm2,    esi-1                 );/* pixel to the left */

                paddw         (  mm1,    mm3                             );/* au*pu+ad*pd */
                movq          (  mm3,    mm2                             );/* make a copy of mm2 */

                punpcklbw     (  mm2,    mm7                             );/* four left pixels */
                movq          (  mm6,    ebx                   );/* al */

                punpckhbw     (  mm3,    mm7                             );/* four right pixels */
                paddw         (  mm4,    mm6                             );/* au + ad + al */

                pmullw        (  mm2,    mm6                             );/* pl * al */
                movq          (  mm6,    ebx+8                 );/* al */

                paddw         (  mm0,    mm2                             );/* au*pu+ad*pd+al*pl */
                paddw         (  mm5,    mm6                             );/* au+ad+al */

                pmullw        (  mm3,    mm6                             );/* al*pl */
                movq          (  mm2,    esi+1                 );/* pixel to the right */

                paddw         (  mm1,    mm3                             );/* au*pu+ad*pd+al*pl */
                movq          (  mm3,    mm2                             );/* make a copy of mm2 */

                punpcklbw     (  mm2,    mm7                             );/* four left pixels */
                movq          (  mm6,    ebx+128                       );/* ar */

                punpckhbw     (  mm3,    mm7                             );/* four right pixels */
                paddw         (  mm4,    mm6                             );/* au + ad + al + ar */

                pmullw        (  mm2,    mm6                             );/* pr * ar */
                movq          (  mm6,    ebx+136               );/* ar */

                paddw         (  mm0,    mm2                             );/* au*pu+ad*pd+al*pl+pr*ar */
                paddw         (  mm5,    mm6                             );/* au+ad+al+ar */

                pmullw        (  mm3,    mm6                             );/* ar*pr */
                movq          (  mm2,    esi                   );/* p */

                paddw         (  mm1,    mm3                             );/* au*pu+ad*pd+al*pl+ar*pr */
                movq          (  mm3,    mm2                             );/* make a copy of the pixel */

                /* mm0, mm1 ---  au*pu+ad*pd+al*pl+ar*pr */
                /* mm4, mm5     ---      au + ad + al + ar */

                punpcklbw  (     mm2,    mm7                             );/* left four pixels */
                movq       (     mm6,    Four128s                );/* 0080  0080 0080 0080 */

                punpckhbw  (     mm3,    mm7                             );/* right four pixels */
                psubw      (     mm6,    mm4                             );/* 128-(au+ad+al+ar) */

                pmullw     (     mm2,    mm6                             );/* p*(128-(au+ad+al+ar)) */
                movq       (     mm6,    Four128s                );/* 0080  0080 0080 0080 */

                paddw      (     mm0,    mm2                             );/* sum */
                psubw      (     mm6,    mm5                             );/* 128-(au+ad+al+ar) */

                pmullw     (     mm3,    mm6                             );/* p*(128-(au+ad+al+ar)) */
                movq       (     mm6,    Four64s                 );/* {64, 64, 64, 64 } */

                movq       (     mm7,    mm6                             );/* {64, 64, 64, 64} */
                paddw      (     mm0,    mm6                             );/* sum+B */

                paddw      (     mm1,    mm3                             );/* sum */
                psllw      (     mm7,    8                               );/* {16384, .. } */

                paddw      (     mm0,    mm7                             );/* clamping */
                paddw      (     mm1,    mm6                             );/* sum+B */

                paddw      (     mm1,    mm7                             );/* clamping */
                psubusw    (     mm0,    mm7                             );/* clamping */

                psubusw    (     mm1,    mm7                             );/* clamping */
                psrlw      (     mm0,    7                               );/* (sum+B)>>7 */

                psrlw      (     mm1,    7                               );/* (sum+B)>>7 */
                packuswb   (     mm0,    mm1                             );/* pack to 8 bytes */

                movq       (     edi,  mm0                             );/* write to destination */

                esi+=    ecx                             ;/* Src += Pitch */
                edi+=    ecx                             ;/* Des += Pitch */

                eax+=    16                              ;/* UDPointer += 8 */
                ebx+=    16              ;/* LPointer +=8 */


        /* Sixth Row */

                movq          (  mm0,    esi+edx               );/* mm0 = Pixels above */
                pxor          (  mm7,    mm7                             );/* clear mm7 */

                movq          (  mm1,    mm0                             );/* make a copy of mm0 */
                punpcklbw     (  mm0,    mm7                             );/* lower four pixels */

                movq          (  mm4,    eax                   );/* au */
                punpckhbw     (  mm1,    mm7                             );/* high four pixels */

                movq          (  mm5,    eax+8                 );/* au */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -