📄 deblockopt.cpp
字号:
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 + -