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

📄 deblockopt.cpp

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

                        movq      (      mm0, esi);
                        packuswb  (      mm0, esi + 8);

                        movq      (      ebp, mm0                                        );/* write des-4*Pitch */

                        movq      (      mm1, esi + 16);
                        packuswb  (      mm1, esi + 24);

                        movq      (      ebp+ecx , mm1                           );/* write des-3*Pitch */

                        movq      (      mm2, esi + 32);
                        packuswb  (      mm2, esi + 40);

                        movq      (      ebp+ecx*2 , mm2                 );/* write des-2*Pitch */

                        movq      (      mm3, esi + 48 );
                        packuswb  (      mm3, esi + 56 );

                        ebp= ebp+ecx*4;/* point to des0 */
                        movq   (         ebp+edx, mm3                            );/* write des-Pitch */

                        movq      (      mm0, esi + 64   );
                        packuswb  (      mm0, esi + 72   );

                        movq      (      ebp , mm0                                       );/* write des0 */

                        movq      (      mm1, esi + 80     );
                        packuswb  (      mm1, esi + 88     );

                        movq      (      ebp+ecx, mm1                            );/* write desPitch */

                        movq      (      mm2, esi + 96      );
                        packuswb  (      mm2, esi + 104     );

                        movq      (      ebp+ecx*2, mm2                  );/* write des2*Pitch */

                        movq      (      mm3, esi + 112     );
                        packuswb  (      mm3, esi + 120     );

                        ebp= ebp+ecx*2;/* point to des4*Pitch */
                        movq      (      ebp+ecx, mm3                            );/* write des3*Pitch */


                Var1 = Variance11[0]+ Variance11[1]+Variance11[2]+Variance11[3];
                Var1 += Variance11[4]+ Variance11[5]+Variance11[6]+Variance11[7];
                pbi->FragmentVariances[CurrentFrag] += Var1;

                Var2 = Variance21[0]+ Variance21[1]+Variance21[2]+Variance21[3];
                Var2 += Variance21[4]+ Variance21[5]+Variance21[6]+Variance21[7];
                pbi->FragmentVariances[CurrentFrag + FragAcross] += Var2;

        if(CurrentFrag==StartFrag)
                        CurrentFrag++;
                else
                {

                        Des=DesPtr-8*PlaneLineStep+8*(CurrentFrag-StartFrag);
                        Src=Des;

                        QStep = QuantScale[pbi->FragQIndex[CurrentFrag]];


                        for( j=0; j<8;j++)
                        {
                                Rows[j] = (short) (Src[-5+j*PlaneLineStep]);
                                Rows[72+j] = (short)(Src[4+j*PlaneLineStep]);
                        }

                                /* Calculate the FLimit and store FLimit and QStep */
                                eax1=    QStep;                           /* get QStep */
                                movd         (   mm0,    eax1                                    );/* mm0 = 0, 0, 0, Q */

                                punpcklwd    (   mm0,    mm0                                     );/* mm0 = 0, 0, Q, Q */
                                punpckldq    (   mm0,    mm0                                     );/* mm0 = Q, Q, Q, Q */

                movq      (  mm1,    mm0                 );/* mm1 = Q, Q, Q, Q */
                paddw     (  mm1,    mm0);


               paddw      (  mm1,    mm0);
               packuswb   (  mm0,    mm0);

                movq        (    QStepMmx,       mm0                             );/* write the Q step */
                                psraw       (    mm1,    2                                       );/* mm1 = FLimit */

                packuswb  (  mm1,    mm1                 );/* mm1 = FFFF FFFF */
                psubb     (  mm1,    Eight128c           );/* F-128 */

                movq      (      FLimitMmx, mm1                        );/* Save FLimit */

                                /* setup the pointers to data */

                                eax=    Src;/* eax = Src */
                                edx=0;/* clear edx */

                                eax-=    4;/* eax = Src-4 */
                                esi=    (uint8_t*)NewRows;/* esi = NewRows */
                                edi=    (uint8_t*)Rows;/* edi = Rows */

                                ecx=    PlaneLineStep;/* ecx = Pitch */
                                edx-=    ecx;/* edx = -Pitch */

                                /* Get the data to the intermediate buffer */

                                movq    (        mm0,    eax                           );/* mm0 = 07 06 05 04 03 02 01 00 */
                                movq    (        mm1,    eax+ecx                       );/* mm1 = 17 16 15 14 13 12 11 10 */

                                movq   (         mm2,    eax+ecx*2                     );/* mm2 = 27 26 25 24 23 22 21 20 */
                                eax=    eax+ecx*4;/* Go down four Rows */

                                movq        (    mm3,    eax+edx                       );/* mm3 = 37 36 35 34 33 32 31 30 */
                                movq        (    mm4,    mm0                                     );/* mm4 = 07 06 05 04 03 02 01 00 */

                                punpcklbw   (    mm0,    mm1                                     );/* mm0 = 13 03 12 02 11 01 10 00 */
                                punpckhbw   (    mm4,    mm1                                     );/* mm4 = 17 07 16 06 15 05 14 04 */

                                movq        (    mm5,    mm2                                     );/* mm5 = 27 26 25 24 23 22 21 20 */
                                punpcklbw   (    mm2,    mm3                                     );/* mm2 = 33 23 32 22 31 21 30 20 */

                                punpckhbw   (    mm5,    mm3                                     );/* mm5 = 37 27 36 26 35 25 34 24 */
                                movq        (    mm1,    mm0                                     );/* mm1 = 13 03 12 02 11 01 10 00 */

                                punpcklwd   (    mm0,    mm2                                     );/* mm0 = 31 21 11 01 30 20 10 00 */
                                punpckhwd   (    mm1,    mm2                                     );/* mm1 = 33 23 13 03 32 22 12 02 */

                                movq        (    mm2,    mm4                                     );/* mm2 = 17 07 16 06 15 05 14 04 */
                                punpckhwd   (    mm4,    mm5                                     );/* mm4 = 37 27 17 07 36 26 16 06 */

                                punpcklwd   (    mm2,    mm5                                     );/* mm2 = 35 25 15 05 34 24 14 04 */
                                pxor        (    mm7,    mm7                                     );/* clear mm7 */

                                movq        (    mm5,    mm0                                     );/* make a copy */
                                punpcklbw   (    mm0,    mm7                                     );/* mm0 = 30 20 10 00 */

                                movq        (    edi+16, mm0                           );/* write 00 10 20 30 */

                                punpckhbw   (    mm5,    mm7                                     );/* mm5 = 31 21 11 01 */

                                movq        (    mm0,    mm1                                     );/* mm0 =33 23 13 03 32 22 12 02 */
                                movq        (    edi+32, mm5                           );/* write 01 11 21 31 */

                                punpcklbw   (    mm1,    mm7                                     );/* mm1 = 32 22 12 02 */
                                punpckhbw   (    mm0,    mm7                                     );/* mm0 = 33 23 12 03 */

                                movq        (    edi+48, mm1                           );/* write 02 12 22 32 */
                                movq        (    mm3,    mm2                                     );/* mm3 = 35 25 15 05 34 24 14 04 */

                                movq        (    mm5,    mm4                                     );/* mm5 = 37 27 17 07 36 26 16 06 */
                                movq        (    edi+64, mm0                           );/* write 03 13 23 33 */


                                punpcklbw   (    mm2,    mm7                                     );/* mm2 = 34 24 14 04 */
                                punpckhbw   (    mm3,    mm7                                     );/* mm3 = 35 25 15 05 */

                                movq        (    edi+80, mm2                           );/* write 04 14 24 34 */
                                punpcklbw   (    mm4,    mm7                                     );/* mm4 = 36 26 16 06 */

                                punpckhbw   (    mm5,    mm7                                     );/* mm5 = 37 27 17 07 */
                                movq        (    edi+96, mm3                           );/* write 05 15 25 35 */

                                movq        (    mm0,    eax                           );/* mm0 = 47 46 45 44 43 42 41 40 */
                                movq        (    mm1,    eax + ecx             );/* mm1 = 57 56 55 54 53 52 51 50 */

                                movq        (    edi+112, mm4                          );/* write 06 16 26 37 */
                                movq        (    mm2,    eax+ecx*2                     );/* mm2 = 67 66 65 64 63 62 61 60 */

                                eax=    eax+ ecx*4;/* Go down four rows */
                                movq          (  edi+128, mm5                          );/* write 07 17 27 37 */

                                movq          (  mm4,    mm0                                     );/* mm4 = 47 46 45 44 43 42 41 40 */
                                movq          (  mm3,    eax+edx                       );/* mm3 = 77 76 75 74 73 72 71 70 */

                                punpcklbw     (  mm0,    mm1                                     );/* mm0 = 53 43 52 42 51 41 50 40 */
                                punpckhbw     (  mm4,    mm1                                     );/* mm4 = 57 57 56 46 55 45 54 44 */

                                movq          (  mm5,    mm2                                     );/* mm5 = 67 66 65 64 63 62 61 60 */
                                punpcklbw     (  mm2,    mm3                                     );/* mm2 = 73 63 72 62 71 61 70 60 */

                                punpckhbw     (  mm5,    mm3                                     );/* mm5 = 77 67 76 66 75 65 74 64 */
                                movq          (  mm1,    mm0                                     );/* mm1 = 53 43 52 42 51 41 50 40 */

                                punpcklwd     (  mm0,    mm2                                     );/* mm0 = 71 61 51 41 70 60 50 40 */
                                punpckhwd     (  mm1,    mm2                                     );/* mm1 = 73 63 53 43 72 62 52 42 */

                                movq          (  mm2,    mm4                                     );/* mm2 = 57 57 56 46 55 45 54 44 */
                                punpckhwd     (  mm4,    mm5                                     );/* mm4 = 77 67 57 47 76 66 56 46 */

                                punpcklwd     (  mm2,    mm5                                     );/* mm2 = 75 65 55 45 74 64 54 44 */

                                movq          (  mm5,    mm0                                     );/* make a copy */
                                punpcklbw     (  mm0,    mm7                                     );/* mm0 = 70 60 50 40 */

                                movq          (  edi+24, mm0                           );/* write 40 50 60 70 */
                                punpckhbw     (  mm5,    mm7                                     );/* mm5 = 71 61 51 41 */

                                movq          (  mm0,    mm1                                     );/* mm0 = 73 63 53 43 72 62 52 42 */
                                movq          (  edi+40, mm5                           );/* write 41 51 61 71 */

                                punpcklbw     (  mm1,    mm7                                     );/* mm1 = 72 62 52 42 */
                                punpckhbw     (  mm0,    mm7                                     );/* mm0 = 73 63 53 43 */

                                movq          (  edi+56, mm1                           );/* write 42 52 62 72 */
                                movq          (  mm3,    mm2                                     );/* mm3 = 75 65 55 45 74 64 54 44 */

                                movq          (  mm5,    mm4                                     );/* mm5 = 77 67 57 47 76 66 56 46 */
                                movq          (  edi+72, mm0                           );/* write 43 53 63 73 */

                                punpcklbw     (  mm2,    mm7                                     );/* mm2 = 74 64 54 44 */
                                punpckhbw     (  mm3,    mm7                                     );/* mm3 = 75 65 55 45 */

                                movq          (  edi+88, mm2                           );/* write 44 54 64 74 */
                                punpcklbw     (  mm4,    mm7                                     );/* mm4 = 76 66 56 46 */

                                punpckhbw     (  mm5,    mm7                                     );/* mm5 = 77 67 57 47 */
                                movq          (  edi+104, mm3                          );/* write 45 55 65 75 */

                                movq          (  edi+120, mm4                          );/* write 46 56 66 76 */
                                movq          (  edi+136, mm5                          );/* write 47 57 67 77 */


                            /* Now, compute the variances for Pixel  1-4 and 5-8 */


                movq        (mm0,    edi               );/* S_5 */
                movq        (mm1,    edi+16            );/* S_4 */

                movq        (mm2,    edi+32            );/* S_3 */
                packuswb    (mm0,    edi+8     );

                packuswb    (mm1,    edi+24);

⌨️ 快捷键说明

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