?? predict.c
字號:
}
return;
}
if(w == 16)
{
_asm
{
mov esi, s ;// esi = s
mov edi, d ;// edi = d
mov edx, lx ;// edx = lx
mov ecx, h ;// ecx = h
pred_comp__l14:
movd mm0, [esi] ;// lower 4 bytes into mm0 = esi[0..3]
movd mm1, [esi+1] ;// lower 4 bytes into mm1 = esi[1..4]
movd mm2, [esi+edx] ;// lower 4 bytes into mm2 = (esi + edx)[0..3]
movd mm3, [esi+edx+1] ;// lower 4 bytes into mm3 = (esi + edx)[1..4]
movd mm4, [esi+4] ;// lower 4 bytes into mm4 = esi[4..7]
movd mm5, [esi+5] ;// lower 4 bytes into mm5 = esi[5..8]
movd mm6, [esi+edx+4] ;// lower 4 bytes into mm6 = (esi + edx)[4..7]
movd mm7, [esi+edx+5] ;// lower 4 bytes into mm7 = (esi + edx)[5..8]
punpcklbw mm0, PACKED_0 ;// unpack the lower 4 bytes into mm0
punpcklbw mm1, PACKED_0 ;// unpack the lower 4 bytes into mm1
punpcklbw mm2, PACKED_0 ;// unpack the lower 4 bytes into mm2
punpcklbw mm3, PACKED_0 ;// unpack the lower 4 bytes into mm3
punpcklbw mm4, PACKED_0 ;// unpack the lower 4 bytes into mm4
punpcklbw mm5, PACKED_0 ;// unpack the lower 4 bytes into mm5
punpcklbw mm6, PACKED_0 ;// unpack the lower 4 bytes into mm6
punpcklbw mm7, PACKED_0 ;// unpack the lower 4 bytes into mm7
paddw mm0, mm1
paddw mm2, mm3
paddw mm4, mm5
paddw mm6, mm7
paddw mm0, mm2 ;// mm0 += mm1 + mm2 + mm3
paddw mm4, mm6 ;// mm4 += mm5 + mm6 + mm7
movd mm1, [edi] ;// lower 4 bytes into mm1 = edi[0..3]
movd mm5, [edi+4] ;// lower 4 bytes into mm5 = edi[4..7]
paddw mm0, PACKED_2 ;// mm0 += (2, 2, 2, 2)
paddw mm4, PACKED_2 ;// mm4 += (2, 2, 2, 2)
punpcklbw mm1, PACKED_0 ;// unpack the lower 4 bytes into mm1
punpcklbw mm5, PACKED_0 ;// unpack the lower 4 bytes into mm5
psrlw mm0, 2
psrlw mm4, 2
paddw mm0, PACKED_1
paddw mm4, PACKED_1
paddw mm0, mm1
paddw mm4, mm5
psrlw mm0, 1 ;// mm0 = (mm0 >> 2) + (1, 1, 1, 1) + mm1
psrlw mm4, 1 ;// mm4 = (mm4 >> 2) + (1, 1, 1, 1) + mm5
packuswb mm0, mm4 ;// pack mm0 and mm4
movq [edi], mm0 ;// store mm0 into edi[0..7]
movd mm0, [esi+8] ;// lower 4 bytes into mm0 = esi[8..11]
movd mm1, [esi+9] ;// lower 4 bytes into mm1 = esi[9..12]
movd mm2, [esi+edx+8] ;// lower 4 bytes into mm2 = (esi + edx)[8..11]
movd mm3, [esi+edx+9] ;// lower 4 bytes into mm3 = (esi + edx)[9..12]
movd mm4, [esi+12] ;// lower 4 bytes into mm4 = esi[12..15]
movd mm5, [esi+13] ;// lower 4 bytes into mm5 = esi[13..16]
movd mm6, [esi+edx+12] ;// lower 4 bytes into mm6 = (esi + edx)[12..15]
movd mm7, [esi+edx+13] ;// lower 4 bytes into mm7 = (esi + edx)[13..16]
punpcklbw mm0, PACKED_0 ;// unpack the lower 4 bytes into mm0
punpcklbw mm1, PACKED_0 ;// unpack the lower 4 bytes into mm1
punpcklbw mm2, PACKED_0 ;// unpack the lower 4 bytes into mm2
punpcklbw mm3, PACKED_0 ;// unpack the lower 4 bytes into mm3
punpcklbw mm4, PACKED_0 ;// unpack the lower 4 bytes into mm4
punpcklbw mm5, PACKED_0 ;// unpack the lower 4 bytes into mm5
punpcklbw mm6, PACKED_0 ;// unpack the lower 4 bytes into mm6
punpcklbw mm7, PACKED_0 ;// unpack the lower 4 bytes into mm7
paddw mm0, mm1
paddw mm2, mm3
paddw mm4, mm5
paddw mm6, mm7
paddw mm0, mm2 ;// mm0 += mm1 + mm2 + mm3
paddw mm4, mm6 ;// mm4 += mm5 + mm6 + mm7
movd mm1, [edi+8] ;// lower 4 bytes into mm1 = edi[8..11]
movd mm5, [edi+12] ;// lower 4 bytes into mm5 = edi[12..15]
paddw mm0, PACKED_2 ;// mm0 += (2, 2, 2, 2)
paddw mm4, PACKED_2 ;// mm4 += (2, 2, 2, 2)
punpcklbw mm1, PACKED_0 ;// unpack the lower 4 bytes into mm1
punpcklbw mm5, PACKED_0 ;// unpack the lower 4 bytes into mm5
psrlw mm0, 2
psrlw mm4, 2
paddw mm0, PACKED_1
paddw mm4, PACKED_1
paddw mm0, mm1
paddw mm4, mm5
psrlw mm0, 1 ;// mm0 = (mm0 >> 2) + (1, 1, 1, 1) + mm1
psrlw mm4, 1 ;// mm4 = (mm4 >> 2) + (1, 1, 1, 1) + mm5
packuswb mm0, mm4 ;// pack mm0 and mm4
movq [edi+8], mm0 ;// store mm0 into edi[8..15]
add esi, edx ;// esi += edx
add edi, edx ;// edi += edx
dec ecx ;// decrement ecx
jnz pred_comp__l14 ;// loop while not zero
emms ;// empty MMX state
}
return;
}
}
for (j=0; j<h; j++) { for (i=0; i<w; i++) d[i] = (d[i] + ((unsigned int)(s[i]+s[i+1]+s[i+lx]+s[i+lx+1]+2)>>2)+1)>>1;
s+= lx; d+= lx; }
} else
{
if(cpu_MMX)
{
if(w == 8)
{
_asm
{
mov esi, s ;// esi = s
mov edi, d ;// edi = d
mov edx, lx ;// edx = lx
mov ecx, h ;// ecx = h
pred_comp__l15:
movd mm0, [esi] ;// lower 4 bytes into mm0 = esi[0..3]
movd mm1, [esi+1] ;// lower 4 bytes into mm1 = esi[1..4]
movd mm2, [esi+edx] ;// lower 4 bytes into mm2 = (esi + edx)[0..3]
movd mm3, [esi+edx+1] ;// lower 4 bytes into mm3 = (esi + edx)[1..4]
movd mm4, [esi+4] ;// lower 4 bytes into mm4 = esi[4..7]
movd mm5, [esi+5] ;// lower 4 bytes into mm5 = esi[5..8]
movd mm6, [esi+edx+4] ;// lower 4 bytes into mm6 = (esi + edx)[4..7]
movd mm7, [esi+edx+5] ;// lower 4 bytes into mm7 = (esi + edx)[5..8]
punpcklbw mm0, PACKED_0 ;// unpack the lower 4 bytes into mm0
punpcklbw mm1, PACKED_0 ;// unpack the lower 4 bytes into mm1
punpcklbw mm2, PACKED_0 ;// unpack the lower 4 bytes into mm2
punpcklbw mm3, PACKED_0 ;// unpack the lower 4 bytes into mm3
punpcklbw mm4, PACKED_0 ;// unpack the lower 4 bytes into mm4
punpcklbw mm5, PACKED_0 ;// unpack the lower 4 bytes into mm5
punpcklbw mm6, PACKED_0 ;// unpack the lower 4 bytes into mm6
punpcklbw mm7, PACKED_0 ;// unpack the lower 4 bytes into mm7
paddw mm0, mm1
paddw mm2, mm3
paddw mm4, mm5
paddw mm6, mm7
paddw mm0, mm2 ;// mm0 += mm1 + mm2 + mm3
paddw mm4, mm6 ;// mm4 += mm5 + mm6 + mm7
paddw mm0, PACKED_2 ;// mm0 += (2, 2, 2, 2)
paddw mm4, PACKED_2 ;// mm4 += (2, 2, 2, 2)
psrlw mm0, 2 ;// mm0 >>= 2
psrlw mm4, 2 ;// mm4 >>= 2
packuswb mm0, mm4 ;// pack mm0 and mm4
movq [edi], mm0 ;// store mm0 into edi[0..7]
add esi, edx ;// esi += edx
add edi, edx ;// edi += edx
dec ecx ;// decrement ecx
jnz pred_comp__l15 ;// loop while not zero
emms ;// empty MMX state
}
return;
}
if(w == 16)
{
_asm
{
mov esi, s ;// esi = s
mov edi, d ;// edi = d
mov edx, lx ;// edx = lx
mov ecx, h ;// ecx = h
pred_comp__l16:
movd mm0, [esi] ;// lower 4 bytes into mm0 = esi[0..3]
movd mm1, [esi+1] ;// lower 4 bytes into mm1 = esi[1..4]
movd mm2, [esi+edx] ;// lower 4 bytes into mm2 = (esi + edx)[0..3]
movd mm3, [esi+edx+1] ;// lower 4 bytes into mm3 = (esi + edx)[1..4]
movd mm4, [esi+4] ;// lower 4 bytes into mm4 = esi[4..7]
movd mm5, [esi+5] ;// lower 4 bytes into mm5 = esi[5..8]
movd mm6, [esi+edx+4] ;// lower 4 bytes into mm6 = (esi + edx)[4..7]
movd mm7, [esi+edx+5] ;// lower 4 bytes into mm7 = (esi + edx)[5..8]
punpcklbw mm0, PACKED_0 ;// unpack the lower 4 bytes into mm0
punpcklbw mm1, PACKED_0 ;// unpack the lower 4 bytes into mm1
punpcklbw mm2, PACKED_0 ;// unpack the lower 4 bytes into mm2
punpcklbw mm3, PACKED_0 ;// unpack the lower 4 bytes into mm3
punpcklbw mm4, PACKED_0 ;// unpack the lower 4 bytes into mm4
punpcklbw mm5, PACKED_0 ;// unpack the lower 4 bytes into mm5
punpcklbw mm6, PACKED_0 ;// unpack the lower 4 bytes into mm6
punpcklbw mm7, PACKED_0 ;// unpack the lower 4 bytes into mm7
paddw mm0, mm1
paddw mm2, mm3
paddw mm4, mm5
paddw mm6, mm7
paddw mm0, mm2 ;// mm0 += mm1 + mm2 + mm3
paddw mm4, mm6 ;// mm4 += mm5 + mm6 + mm7
paddw mm0, PACKED_2 ;// mm0 += (2, 2, 2, 2)
paddw mm4, PACKED_2 ;// mm4 += (2, 2, 2, 2)
psrlw mm0, 2 ;// mm0 >>= 2
psrlw mm4, 2 ;// mm4 >>= 2
packuswb mm0, mm4 ;// pack mm0 and mm4
movq [edi], mm0 ;// store mm0 into edi[0..7]
movd mm0, [esi+8] ;// lower 4 bytes into mm0 = esi[8..11]
movd mm1, [esi+9] ;// lower 4 bytes into mm1 = esi[9..12]
movd mm2, [esi+edx+8] ;// lower 4 bytes into mm2 = (esi + edx)[8..11]
movd mm3, [esi+edx+9] ;// lower 4 bytes into mm3 = (esi + edx)[9..12]
movd mm4, [esi+12] ;// lower 4 bytes into mm4 = esi[12..15]
movd mm5, [esi+13] ;// lower 4 bytes into mm5 = esi[13..16]
movd mm6, [esi+edx+12] ;// lower 4 bytes into mm6 = (esi + edx)[12..15]
movd mm7, [esi+edx+13] ;// lower 4 bytes into mm7 = (esi + edx)[13..16]
punpcklbw mm0, PACKED_0 ;// unpack the lower 4 bytes into mm0
punpcklbw mm1, PACKED_0 ;// unpack the lower 4 bytes into mm1
punpcklbw mm2, PACKED_0 ;// unpack the lower 4 bytes into mm2
punpcklbw mm3, PACKED_0 ;// unpack the lower 4 bytes into mm3
punpcklbw mm4, PACKED_0 ;// unpack the lower 4 bytes into mm4
punpcklbw mm5, PACKED_0 ;// unpack the lower 4 bytes into mm5
punpcklbw mm6, PACKED_0 ;// unpack the lower 4 bytes into mm6
punpcklbw mm7, PACKED_0 ;// unpack the lower 4 bytes into mm7
paddw mm0, mm1
paddw mm2, mm3
paddw mm4, mm5
paddw mm6, mm7
paddw mm0, mm2 ;// mm0 += mm1 + mm2 + mm3
paddw mm4, mm6 ;// mm4 += mm5 + mm6 + mm7
paddw mm0, PACKED_2 ;// mm0 += (2, 2, 2, 2)
paddw mm4, PACKED_2 ;// mm4 += (2, 2, 2, 2)
psrlw mm0, 2 ;// mm0 >>= 2
psrlw mm4, 2 ;// mm0 >>= 2
packuswb mm0, mm4 ;// pack mm0 and mm4
movq [edi+8], mm0 ;// store mm0 into edi[8..15]
add esi, edx ;// esi += edx
add edi, edx ;// edi += edx
dec ecx ;// decrement ecx
jnz pred_comp__l16 ;// loop while not zero
emms ;// empty MMX state
}
return;
}
}
for (j=0; j<h; j++) { for (i=0; i<w; i++) d[i] = (unsigned int)(s[i]+s[i+1]+s[i+lx]+s[i+lx+1]+2)>>2;
s+= lx; d+= lx; }
}}static void calc_DMV(DMV,dmvector,mvx,mvy)int DMV[][2];int *dmvector;int mvx, mvy;{ if (pict_struct==FRAME_PICTURE) { if (topfirst) { /* vector for prediction of top field from bottom field */ DMV[0][0] = ((mvx +(mvx>0))>>1) + dmvector[0]; DMV[0][1] = ((mvy +(mvy>0))>>1) + dmvector[1] - 1; /* vector for prediction of bottom field from top field */ DMV[1][0] = ((3*mvx+(mvx>0))>>1) + dmvector[0]; DMV[1][1] = ((3*mvy+(mvy>0))>>1) + dmvector[1] + 1; } else { /* vector for prediction of top field from bottom field */ DMV[0][0] = ((3*mvx+(mvx>0))>>1) + dmvector[0]; DMV[0][1] = ((3*mvy+(mvy>0))>>1) + dmvector[1] - 1; /* vector for prediction of bottom field from top field */ DMV[1][0] = ((mvx +(mvx>0))>>1) + dmvector[0]; DMV[1][1] = ((mvy +(mvy>0))>>1) + dmvector[1] + 1; } } else { /* vector for prediction from field of opposite 'parity' */ DMV[0][0] = ((mvx+(mvx>0))>>1) + dmvector[0]; DMV[0][1] = ((mvy+(mvy>0))>>1) + dmvector[1]; /* correct for vertical field shift */ if (pict_struct==TOP_FIELD) DMV[0][1]--; else DMV[0][1]++; }}static void clearblock(cur,i0,j0)unsigned char *cur[];int i0, j0;{ int i, j, w, h; unsigned char *p; p = cur[0] + ((pict_struct==BOTTOM_FIELD) ? width : 0) + i0 + width2*j0; for (j=0; j<16; j++) { for (i=0; i<16; i++) p[i] = 128; p+= width2; } w = h = 16; if (chroma_format!=CHROMA444) { i0>>=1; w>>=1; } if (chroma_format==CHROMA420) { j0>>=1; h>>=1; } p = cur[1] + ((pict_struct==BOTTOM_FIELD) ? chrom_width : 0) + i0 + chrom_width2*j0; for (j=0; j<h; j++) { for (i=0; i<w; i++) p[i] = 128; p+= chrom_width2; } p = cur[2] + ((pict_struct==BOTTOM_FIELD) ? chrom_width : 0) + i0 + chrom_width2*j0; for (j=0; j<h; j++) { for (i=0; i<w; i++) p[i] = 128; p+= chrom_width2; }}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -