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

📄 deblockopt.cpp

📁 从FFMPEG转换而来的H264解码程序,VC下编译..
💻 CPP
📖 第 1 页 / 共 5 页
字号:
                packuswb    (mm2,    edi+40);

                movq        (mm3,    edi+48            );/* S_2 */
                movq        (mm4,    edi+64            );/* S_1 */

                packuswb   ( mm3,    edi+56);
                packuswb   ( mm4,    edi+72);

                movq       ( mm5,    mm1                 );/* S_4 */
                movq       ( mm6,    mm2                 );/* S_3 */

                psubusb    ( mm5,    mm0                 );/* S_4 - S_5 */
                psubusb    ( mm0,    mm1                 );/* S_5 - S_4 */

                por        ( mm0,    mm5                 );/* abs(S_5-S_4) */
                psubusb    ( mm6,    mm1                 );/* S_3 - S_4 */

                psubusb    ( mm1,    mm2                 );/* S_4 - S_3 */
                movq       ( mm5,    mm3                 );/* S_2 */

                por        ( mm1,    mm6                 );/* abs(S_4-S_3) */
                psubusb    ( mm5,    mm2                 );/* S_2 - S_3 */

                psubusb    ( mm2,    mm3                 );/* S_3 - S_2 */
                movq       ( mm6,    mm4                 );/* S_1 */

                por        ( mm2,    mm5                 );/* abs(S_3-S_2) */
                psubusb    ( mm6,    mm3                 );/* S_1 - S_2 */

                psubusb    ( mm3,    mm4                 );/* S_2 - S_1 */
                por        ( mm3,    mm6                 );/* abs(S_2-S_1) */

                paddusb    (  mm0,    mm1                 );/* abs(S_5-S_4)+abs(S_4-S_3) */
                paddusb    (  mm2,    mm3                 );/* abs(S_3-S_2)+abs(S_2-S_1) */

                movq       ( mm7,    FLimitMmx              );/* FFFFF FFFF */
                paddusb    (  mm0,    mm2                 );/* abs(S_5-S_4)+abs(S_4-S_3)+abs(S_3-S_2)+abs(S_2-S_1) */

                movq       ( Variance11, mm0           );/* Save the variance */

                movq       ( mm6,    mm4                 );/* S_1 */
                psubb      ( mm0,    Eight128c           );/* abs(..) - 128 */
                pcmpgtb    ( mm7,    mm0                 );/* abs(S_5-S_4)+abs(S_4-S_3)+abs(S_3-S_2)+abs(S_2-S_1)<? */

                                movq (       mm5,    edi+80            );/* S0 */
                movq       ( mm1,    edi+96            );/* S1 */

                movq       ( mm2,    edi+112           );/* S2 */
                packuswb   ( mm5,    edi+88     );

                packuswb   ( mm1,    edi+104);
                packuswb   ( mm2,    edi+120);

                movq       ( mm3,    edi+128           );/* S3 */
                movq       ( mm4,    edi+144           );/* S4 */

                packuswb   ( mm3,    edi+136);
                packuswb   ( mm4,    edi+152);

                movq       ( mm0,    mm5                 );/* S0 */
                psubusb    ( mm5,    mm6                 );/* S0-S_1 */

                psubusb    ( mm6,    mm0                 );/* S_1-S0 */
                por        ( mm5,    mm6                 );/* abs(S_1-S0) */

                movq       ( mm6,    QStepMmx            );/* QQQQ QQQQ */
                pcmpgtb    ( mm6,    mm5                 );/* abs(S_1-S0)<QStep? */

                movq       ( mm5,    mm1                 );/* S1 */
                pand       ( mm7,    mm6                 );/* abs(S_1-S0)<QStep &&
                                                            abs(S_5-S_4)+abs(S_4-S_3)+abs(S_3-S_2)+abs(S_2-S_1)<FLimit? */
                movq       ( mm6,    mm2                 );/* S2 */
                psubusb    ( mm5,    mm0                 );/* S1 - S0 */

                psubusb    ( mm0,    mm1                 );/* S0 - S1*/

                por        ( mm0,    mm5                 );/* abs(S0-S1) */
                psubusb    ( mm6,    mm1                 );/* S2 - S1 */

                psubusb    ( mm1,    mm2                 );/* S1 - S2*/
                movq       ( mm5,    mm3                 );/* S3 */

                por        ( mm1,    mm6                 );/* abs(S1-S2) */
                psubusb    ( mm5,    mm2                 );/* S3 - S2 */

                psubusb    ( mm2,    mm3                 );/* S2 - S3 */
                movq       ( mm6,    mm4                 );/* S4 */

                por        ( mm2,    mm5                 );/* abs(S2-S3) */
                psubusb    ( mm6,    mm3                 );/* S4 - S3 */

                psubusb    ( mm3,    mm4                 );/* S3 - S4 */
                por        ( mm3,    mm6                 );/* abs(S3-S4) */

                paddusb    (  mm0,    mm1                 );/* abs(S0-S1)+abs(S1-S2) */
                paddusb    (  mm2,    mm3                 );/* abs(S2-S3)+abs(S3-S4) */

                movq       ( mm6,    FLimitMmx           );/* FFFFF FFFF */
                paddusb    (  mm0,    mm2                 );/* abs(S0-S1)+abs(S1-S2)+abs(S2-S3)+abs(S3-S4) */

                movq       ( Variance21, mm0           );/* Save the variance */

                psubb      (  mm0,    Eight128c            );/* abs(..) - 128 */
                pcmpgtb    ( mm6,    mm0                 );/* abs(S0-S1)+abs(S1-S2)+abs(S2-S3)+abs(S3-S4)<FLimit */
                pand       ( mm6,    mm7                 );/* Flag */

                movq       ( mm0,    mm6);
                movq       ( mm7,    mm6 );

                punpckhbw  ( mm0,    mm6);
                punpcklbw  ( mm7,    mm6);

                                /* mm0 and mm7 now are in use  */

                /* Let's do the filtering now */
                /* sum = x0 + x0 + x0 + x1 + x2 + x3 + x4 + 4; */

                movq     (       mm3,    edi                       );/* mm3 = -5 */
                movq     (       mm2,    edi+144                       );/* mm2 = 4 */

                movq     (       mm1,    mm3                                     );/* x0 = -4 */
                paddw    (       mm3,    mm3                                     );/* mm3 = x0 + x0 */

                movq     (       mm4,    edi+16                        );/* mm4 = x1 */
                paddw    (       mm3,    mm1                                     );/* mm3 = x0 + x0 + x0 */

                paddw    (       mm3,    edi+32                        );/* mm3 = x0+x0+x0+ x2 */
                paddw    (       mm4,    edi+48                        );/* mm4 = x1+x3 */

                paddw    (       mm3,    edi+64                        );/* mm3 += x4 */
                paddw    (       mm4,    FourFours                       );/* mm4 = x1 + x3 + 4 */

                paddw    (       mm3,    mm4                                     );/* mm3 = 3*x0+x1+x2+x3+x4+4 */

                /* Des-4*Pitch = (((sum + x1) >> 3; */

                movq   (         mm4,    mm3                                     );/* mm4 = mm3 */
                movq   (         mm5,    edi+16                        );/* mm5 = x1 */

                paddw  (         mm4,    mm5                                     );/* mm4 = sum+x1 */
                psraw  (         mm4,    3                                       );/* mm4 >>=3 */

                psubw  (         mm4,    mm5                                     );/* New Value - old Value */
                pand   (         mm4,    mm7                                     );/* And the flag */

                paddw  (         mm4,    mm5                                     );/* add the old value back */
                movq   (         esi,  mm4                                     );/* Write new x1 */

                /* sum += x5 -x0 */
                /* Des-3*Pitch=((sum+x2)>>3 */

                movq    (        mm5,    edi+32                        );/* mm5= x2 */
                psubw   (        mm3,    mm1                                     );/* sum=sum-x0 */

                paddw   (        mm3,    edi+80                        );/* sum=sum+x5 */
                movq    (        mm4,    mm5                                     );/* copy sum */

                paddw   (        mm4,    mm3                                     );/* mm4=sum+x2 */
                psraw   (        mm4,    3                                       );/* mm4=(sum+x2)>>3 */
                psubw   (        mm4,    mm5                                     );/* new value - old value        */

                pand    (        mm4,    mm7                                     );/* And the flag */
                paddw   (        mm4,    mm5                                     );/* add the old value back */

                movq    (        esi+16, mm4                           );/* write new x2 */

                /* sum += x6 - x0 */
                /* Des-2*Pitch=((sum+x3)>>3 */

                movq  (          mm5,    edi+48                        );/* mm5= x3 */
                psubw (          mm3,    mm1                                     );/* sum=sum-x0 */

                paddw (          mm3,    edi+96                        );/* sum=sum+x6 */
                movq  (          mm4,    mm5                                     );/* copy x3 */

                paddw (          mm4,    mm3                                     );/* mm4=sum+x3 */
                psraw (          mm4,    3                                       );/* mm4=(sum+x3)>>3 */

                psubw (          mm4,    mm5                                     );/* new value - old value        */
                pand  (          mm4,    mm7                                     );/* And the flag */

                paddw (          mm4,    mm5                                     );/* add the old value back */
                movq  (          esi+32, mm4                           );/* write new x3 */

                /* sum += x7 - x0 */
                /* Des-Pitch=(sum+x4)>>3 */

                movq      (      mm5,    edi+64                        );/* mm5 = x4 */
                psubw     (      mm3,    mm1                                     );/* sum = sum-x0 */

                paddw     (      mm3,    edi+112                       );/* sum = sum+x7 */
                movq      (      mm4,    mm5                                     );/* mm4 = x4 */

                paddw     (      mm4,    mm3                                     );/* mm4 = sum + x4 */
                psraw     (      mm4,    3                                       );/* >>=4 */

                psubw     (      mm4,    mm5                                     );/* -=x4 */
                pand      (      mm4,    mm7                                     );/* and flag */

                paddw     (      mm4,    mm5                                     );/* += x4 */
                movq      (      esi+48, mm4                           );/* write new x4 */

                /* sum+= x8-x1 */
                /* Des0=((sum+x5)>>3 */

                movq       (     mm5,    edi+80                        );/* mm5 = x5 */
                psubw      (     mm3,    edi+16                        );/* sum -= x1 */

                paddw      (     mm3,    edi+128                       );/* sub += x8 */
                movq       (     mm4,    mm5                                     );/* mm4 = x5 */

                paddw      (     mm4,    mm3                                     );/* mm4= sum+x5 */
                psraw      (     mm4,    3                                       );/* >>=4 */

                psubw      (     mm4,    mm5                                     );/* -=x5 */
                pand       (     mm4,    mm7                                     );/* and flag */

                paddw      (     mm4,    mm5                                     );/* += x5 */
                movq       (     esi+64, mm4                           );/* write new x5 */

                /* sum += x9 - x2 */
                /* DesPitch = ((sum+x6)>>3 */

                movq    (        mm5,    edi+96                        );/* mm5 = x6 */
                psubw   (        mm3,    edi+32                        );/* -= x2 */

                paddw   (        mm3,    mm2                                     );/* += x9 */
                movq    (        mm4,    mm5                                     );/* mm4 = x6 */

 

⌨️ 快捷键说明

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