📄 deringopt.cpp
字号:
/* Right Mod */
movq ( mm3, esi );/* read 8 pixels p */
movq ( mm4, esi+1 );/* Pixels on top pu */
movq ( mm5, mm3 );/* make a copy of p */
psubusb ( mm3, mm4 );/* p-pu */
psubusb ( mm4, mm5 );/* pu-p */
por ( mm3, mm4 );/* abs(p-pu) */
movq ( mm6, mm0 );/* 32+QValues */
movq ( mm4, mm0 );/* 32+QValues */
psubusb( mm6, mm3 );/* zero clampled TmpMod */
movq ( mm5, eight128s );/* 80 80 80 80 80 80 80 80 */
paddb ( mm4, eight64s );/* 32+QValues + 64 */
pxor ( mm4, mm5 );/* convert to a sign number */
pxor ( mm3, mm5 );/* convert to a sign number */
pcmpgtb( mm3, mm4 );/* 32+QValue- 2*abs(p-pu) <-64 ? */
pand ( mm3, mm2 );/* use sharpen */
paddsb ( mm6, mm1 );/* clamping to high */
psubsb ( mm6, mm1 );/* offset back */
por ( mm6, mm3 );/* Mod value to be stored */
pxor ( mm5, mm5 );/* clear mm5 */
pxor ( mm4, mm4 );/* clear mm4 */
punpcklbw ( mm5, mm6 );/* 03 xx 02 xx 01 xx 00 xx */
psraw ( mm5, 8 );/* sign extended */
movq ( eax+128, mm5 );/* writeout UDmod, low four */
punpckhbw ( mm4, mm6);
psraw ( mm4, 8);
movq ( eax+136, mm4 );/* writeout UDmod, high four */
esi+= ecx;
edi+= 16 ;
eax+= 16 ;
if (esi!=ebx)//cmp esi, ebx
goto /*jne */FillModLoop1;
/* last UDMod */
movq ( mm3, esi );/* read 8 pixels p */
movq ( mm4, esi+edx );/* Pixels on top pu */
movq ( mm5, mm3 );/* make a copy of p */
psubusb ( mm3, mm4 );/* p-pu */
psubusb ( mm4, mm5 );/* pu-p */
por ( mm3, mm4 );/* abs(p-pu) */
movq ( mm6, mm0 );/* 32+QValues */
movq ( mm4, mm0 );/* 32+QValues */
psubusb( mm6, mm3 );/* zero clampled TmpMod */
movq ( mm5, eight128s );/* 80 80 80 80 80 80 80 80 */
paddb ( mm4, eight64s );/* 32+QValues + 64 */
pxor ( mm4, mm5 );/* convert to a sign number */
pxor ( mm3, mm5 );/* convert to a sign number */
pcmpgtb( mm3, mm4 );/* 32+QValue- 2*abs(p-pu) <-64 ? */
pand ( mm3, mm2 );/* use sharpen */
paddsb ( mm6, mm1 );/* clamping to high */
psubsb ( mm6, mm1 );/* offset back */
por ( mm6, mm3 );/* Mod value to be stored */
pxor ( mm5, mm5 );/* clear mm5 */
pxor ( mm4, mm4 );/* clear mm4 */
punpcklbw ( mm5, mm6 );/* 03 xx 02 xx 01 xx 00 xx */
psraw ( mm5, 8 );/* sign extended */
movq ( edi, mm5 );/* writeout UDmod, low four */
punpckhbw ( mm4, mm6);
psraw ( mm4, 8);
movq ( edi+8, mm4 );/* writeout UDmod, high four */
esi= Src;
edi= Des;
eax= (uint8_t*)UDPointer;
ebx= (const uint8_t*)LRPointer;
/* First 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 */
/* Second 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 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -