📄 recon.cc
字号:
"addl %3, %4\n" "pavgusb %%mm3, %%mm1\n" "movq %%mm0, (%2)\n" "pavgusb %%mm7, %%mm1\n" "movq %%mm6, %%mm2\n" "movq %%mm7, %%mm3\n" "movq %%mm1, 8(%2)\n" "movq %%mm4, %%mm0\n" "movq %%mm5, %%mm1\n" "addl %3, %2\n" "loop 1b\n" : : "c" (h), "r" (s), "r" (d), "r" (lx2), "r" (s +lx) );}inline void rec4ac(unsigned char *s,unsigned char *d, int lx, int lx2, int h){ __asm__ __volatile__( "movq (%1), %%mm0\n" /* 8 s */ "movq 1(%1), %%mm2\n" /* 8 s +1*/ ".align 8\n" "1:" "movq (%4), %%mm4\n" /* 8 s+lx */ "pavgusb %%mm2, %%mm0\n" "movq 1(%4), %%mm6\n" /* 8 s+lx +1*/ "pavgusb %%mm4, %%mm0\n" "movq (%2), %%mm1\n" /* 8 d */ "pavgusb %%mm6, %%mm0\n" "addl %3, %4\n" "pavgusb %%mm1, %%mm0\n" "movq %%mm6, %%mm2\n" "movq %%mm0, (%2)\n" "movq %%mm4, %%mm0\n" "addl %3, %2\n" "loop 1b\n" : : "c" (h), "r" (s), "r" (d), "r" (lx2), "r" (s +lx) );}#endifvoid recon_comp(unsigned char *src, unsigned char *dst, int lx, int lx2, int w, int h, int x, int y, int dx, int dy, int addflag){// int xint, xh, yint, yh; int switcher; unsigned char *s, *d; /* half pel scaling */// xint = dx>>1;// xh = dx & 1;// yint = dy>>1;// yh = dy & 1;// switcher = (dx & 1) << 3 | (dy & 1) << 2 | (w !=8) & 1; switcher = (dx & 1) << 3 | (dy & 1) << 2 | w; if (addflag) switcher |= 2; /* origins */ s = src + lx*(y+(dy>>1)) + x + (dx>>1); d = dst + lx*y + x; switch (switcher) { case 0x3: reca(s,d,lx2,h); break; case 0x2: recac(s,d,lx2,h); break; case 0x1: rec(s,d,lx2,h); break; case 0x0: recc(s,d,lx2,h); break; case 0x7: recva(s,d,lx,lx2,h); break; case 0x6: recvac(s,d,lx,lx2,h); break; case 0x5: recv(s,d,lx,lx2,h); break; case 0x4: recvc(s,d,lx,lx2,h); break; case 0xb: recha(s,d,lx2,h); break; case 0xa: rechac(s,d,lx2,h); break; case 0x9: rech(s,d,lx2,h); break; case 0x8: rechc(s,d,lx2,h); break; case 0xf: rec4a(s,d,lx,lx2,h); break; case 0xe: rec4ac(s,d,lx,lx2,h); break; case 0xd: rec4(s,d,lx,lx2,h); break; case 0xc: rec4c(s,d,lx,lx2,h); break; }#if 0 if (!xh && !yh) if (addflag){ if (w!=8) reca(s,d,lx2,h); else recac(s,d,lx2,h); } else { if (w!=8) rec(s,d,lx2,h); else recc(s,d,lx2,h); } else if (!xh && yh) if (addflag){ if (w!=8) recva(s,d,lx,lx2,h); else recvac(s,d,lx,lx2,h); } else { if (w!=8) recv(s,d,lx,lx2,h); else recvc(s,d,lx,lx2,h); } else if (xh && !yh) if (addflag){ if (w!=8) recha(s,d,lx2,h); else rechac(s,d,lx2,h); } else { if (w!=8) rech(s,d,lx2,h); else rechc(s,d,lx2,h); } else /* if (xh && yh) */ if (addflag){ if (w!=8) rec4a(s,d,lx,lx2,h); else rec4ac(s,d,lx,lx2,h); } else { if (w!=8) rec4(s,d,lx,lx2,h); else rec4c(s,d,lx,lx2,h); }#endif}#ifndef HAVE_MMXinline void recva(unsigned char *s, unsigned char *d, int lx, int lx2, int h){ unsigned char *dp,*sp,*sp2; sp = s; sp2 = s+lx; dp = d; for (int j=0; j<h; j++){ dp[0] = (dp[0] + ((unsigned int)(sp[0]+sp2[0]+1)>>1) + 1)>>1; dp[1] = (dp[1] + ((unsigned int)(sp[1]+sp2[1]+1)>>1) + 1)>>1; dp[2] = (dp[2] + ((unsigned int)(sp[2]+sp2[2]+1)>>1) + 1)>>1; dp[3] = (dp[3] + ((unsigned int)(sp[3]+sp2[3]+1)>>1) + 1)>>1; dp[4] = (dp[4] + ((unsigned int)(sp[4]+sp2[4]+1)>>1) + 1)>>1; dp[5] = (dp[5] + ((unsigned int)(sp[5]+sp2[5]+1)>>1) + 1)>>1; dp[6] = (dp[6] + ((unsigned int)(sp[6]+sp2[6]+1)>>1) + 1)>>1; dp[7] = (dp[7] + ((unsigned int)(sp[7]+sp2[7]+1)>>1) + 1)>>1; dp[8] = (dp[8] + ((unsigned int)(sp[8]+sp2[8]+1)>>1) + 1)>>1; dp[9] = (dp[9] + ((unsigned int)(sp[9]+sp2[9]+1)>>1) + 1)>>1; dp[10] = (dp[10] + ((unsigned int)(sp[10]+sp2[10]+1)>>1) + 1)>>1; dp[11] = (dp[11] + ((unsigned int)(sp[11]+sp2[11]+1)>>1) + 1)>>1; dp[12] = (dp[12] + ((unsigned int)(sp[12]+sp2[12]+1)>>1) + 1)>>1; dp[13] = (dp[13] + ((unsigned int)(sp[13]+sp2[13]+1)>>1) + 1)>>1; dp[14] = (dp[14] + ((unsigned int)(sp[14]+sp2[14]+1)>>1) + 1)>>1; dp[15] = (dp[15] + ((unsigned int)(sp[15]+sp2[15]+1)>>1) + 1)>>1; sp+= lx2; sp2+= lx2; dp+= lx2; }}inline void recvac(unsigned char *s, unsigned char *d, int lx,int lx2, int h){ unsigned char *dp,*sp,*sp2; sp = s; sp2 = s+lx; dp = d; for (int j=0; j<h; j++){ dp[0] = (dp[0] + ((unsigned int)(sp[0]+sp2[0]+1)>>1) + 1)>>1; dp[1] = (dp[1] + ((unsigned int)(sp[1]+sp2[1]+1)>>1) + 1)>>1; dp[2] = (dp[2] + ((unsigned int)(sp[2]+sp2[2]+1)>>1) + 1)>>1; dp[3] = (dp[3] + ((unsigned int)(sp[3]+sp2[3]+1)>>1) + 1)>>1; dp[4] = (dp[4] + ((unsigned int)(sp[4]+sp2[4]+1)>>1) + 1)>>1; dp[5] = (dp[5] + ((unsigned int)(sp[5]+sp2[5]+1)>>1) + 1)>>1; dp[6] = (dp[6] + ((unsigned int)(sp[6]+sp2[6]+1)>>1) + 1)>>1; dp[7] = (dp[7] + ((unsigned int)(sp[7]+sp2[7]+1)>>1) + 1)>>1; sp+= lx2; sp2+= lx2; dp+= lx2; }}inline void rech(unsigned char *s, unsigned char *d, int lx2, int h){ unsigned char *dp,*sp; unsigned int s1,s2; sp = s; dp = d; for (int j=0; j<h; j++){ s1=sp[0]; dp[0] = (unsigned int)(s1+(s2=sp[1])+1)>>1; dp[1] = (unsigned int)(s2+(s1=sp[2])+1)>>1; dp[2] = (unsigned int)(s1+(s2=sp[3])+1)>>1; dp[3] = (unsigned int)(s2+(s1=sp[4])+1)>>1; dp[4] = (unsigned int)(s1+(s2=sp[5])+1)>>1; dp[5] = (unsigned int)(s2+(s1=sp[6])+1)>>1; dp[6] = (unsigned int)(s1+(s2=sp[7])+1)>>1; dp[7] = (unsigned int)(s2+(s1=sp[8])+1)>>1; dp[8] = (unsigned int)(s1+(s2=sp[9])+1)>>1; dp[9] = (unsigned int)(s2+(s1=sp[10])+1)>>1; dp[10] = (unsigned int)(s1+(s2=sp[11])+1)>>1; dp[11] = (unsigned int)(s2+(s1=sp[12])+1)>>1; dp[12] = (unsigned int)(s1+(s2=sp[13])+1)>>1; dp[13] = (unsigned int)(s2+(s1=sp[14])+1)>>1; dp[14] = (unsigned int)(s1+(s2=sp[15])+1)>>1; dp[15] = (unsigned int)(s2+sp[16]+1)>>1; sp+= lx2; dp+= lx2; }}inline void rechc(unsigned char *s,unsigned char *d, int lx2, int h){ unsigned char *dp,*sp; unsigned int s1,s2; sp = s; dp = d; for (int j=0; j<h; j++){ s1=sp[0]; dp[0] = (unsigned int)(s1+(s2=sp[1])+1)>>1; dp[1] = (unsigned int)(s2+(s1=sp[2])+1)>>1; dp[2] = (unsigned int)(s1+(s2=sp[3])+1)>>1; dp[3] = (unsigned int)(s2+(s1=sp[4])+1)>>1; dp[4] = (unsigned int)(s1+(s2=sp[5])+1)>>1; dp[5] = (unsigned int)(s2+(s1=sp[6])+1)>>1; dp[6] = (unsigned int)(s1+(s2=sp[7])+1)>>1; dp[7] = (unsigned int)(s2+sp[8]+1)>>1; sp+= lx2; dp+= lx2; }}#endif#ifndef HAVE_3Dnowinline void recha(unsigned char *s, unsigned char *d,int lx2, int h){ unsigned char *dp,*sp; unsigned int s1,s2; sp = s; dp = d; for (int j=0; j<h; j++){ s1=sp[0]; dp[0] = (dp[0] + ((unsigned int)(s1+(s2=sp[1])+1)>>1) + 1)>>1; dp[1] = (dp[1] + ((unsigned int)(s2+(s1=sp[2])+1)>>1) + 1)>>1; dp[2] = (dp[2] + ((unsigned int)(s1+(s2=sp[3])+1)>>1) + 1)>>1; dp[3] = (dp[3] + ((unsigned int)(s2+(s1=sp[4])+1)>>1) + 1)>>1; dp[4] = (dp[4] + ((unsigned int)(s1+(s2=sp[5])+1)>>1) + 1)>>1; dp[5] = (dp[5] + ((unsigned int)(s2+(s1=sp[6])+1)>>1) + 1)>>1; dp[6] = (dp[6] + ((unsigned int)(s1+(s2=sp[7])+1)>>1) + 1)>>1; dp[7] = (dp[7] + ((unsigned int)(s2+(s1=sp[8])+1)>>1) + 1)>>1; dp[8] = (dp[8] + ((unsigned int)(s1+(s2=sp[9])+1)>>1) + 1)>>1; dp[9] = (dp[9] + ((unsigned int)(s2+(s1=sp[10])+1)>>1) + 1)>>1; dp[10] = (dp[10] + ((unsigned int)(s1+(s2=sp[11])+1)>>1) + 1)>>1; dp[11] = (dp[11] + ((unsigned int)(s2+(s1=sp[12])+1)>>1) + 1)>>1; dp[12] = (dp[12] + ((unsigned int)(s1+(s2=sp[13])+1)>>1) + 1)>>1; dp[13] = (dp[13] + ((unsigned int)(s2+(s1=sp[14])+1)>>1) + 1)>>1; dp[14] = (dp[14] + ((unsigned int)(s1+(s2=sp[15])+1)>>1) + 1)>>1; dp[15] = (dp[15] + ((unsigned int)(s2+sp[16]+1)>>1) + 1)>>1; sp+= lx2; dp+= lx2; }}inline void rechac(unsigned char *s,unsigned char *d, int lx2, int h){ unsigned char *dp,*sp; unsigned int s1,s2; sp = s; dp = d; for (int j=0; j<h; j++){ s1=sp[0]; dp[0] = (dp[0] + ((unsigned int)(s1+(s2=sp[1])+1)>>1) + 1)>>1; dp[1] = (dp[1] + ((unsigned int)(s2+(s1=sp[2])+1)>>1) + 1)>>1; dp[2] = (dp[2] + ((unsigned int)(s1+(s2=sp[3])+1)>>1) + 1)>>1; dp[3] = (dp[3] + ((unsigned int)(s2+(s1=sp[4])+1)>>1) + 1)>>1; dp[4] = (dp[4] + ((unsigned int)(s1+(s2=sp[5])+1)>>1) + 1)>>1; dp[5] = (dp[5] + ((unsigned int)(s2+(s1=sp[6])+1)>>1) + 1)>>1; dp[6] = (dp[6] + ((unsigned int)(s1+(s2=sp[7])+1)>>1) + 1)>>1; dp[7] = (dp[7] + ((unsigned int)(s2+sp[8]+1)>>1) + 1)>>1; sp+= lx2; dp+= lx2; }}inline void rec4(unsigned char *s, unsigned char *d, int lx, int lx2, int h){ unsigned char *dp,*sp,*sp2; unsigned int s1,s2,s3,s4; sp = s; sp2 = s+lx; dp = d; for (int j=0; j<h; j++){ s1=sp[0]; s3=sp2[0]; dp[0] = (unsigned int)(s1+(s2=sp[1])+s3+(s4=sp2[1])+2)>>2; dp[1] = (unsigned int)(s2+(s1=sp[2])+s4+(s3=sp2[2])+2)>>2; dp[2] = (unsigned int)(s1+(s2=sp[3])+s3+(s4=sp2[3])+2)>>2; dp[3] = (unsigned int)(s2+(s1=sp[4])+s4+(s3=sp2[4])+2)>>2; dp[4] = (unsigned int)(s1+(s2=sp[5])+s3+(s4=sp2[5])+2)>>2; dp[5] = (unsigned int)(s2+(s1=sp[6])+s4+(s3=sp2[6])+2)>>2; dp[6] = (unsigned int)(s1+(s2=sp[7])+s3+(s4=sp2[7])+2)>>2; dp[7] = (unsigned int)(s2+(s1=sp[8])+s4+(s3=sp2[8])+2)>>2; dp[8] = (unsigned int)(s1+(s2=sp[9])+s3+(s4=sp2[9])+2)>>2; dp[9] = (unsigned int)(s2+(s1=sp[10])+s4+(s3=sp2[10])+2)>>2; dp[10] = (unsigned int)(s1+(s2=sp[11])+s3+(s4=sp2[11])+2)>>2; dp[11] = (unsigned int)(s2+(s1=sp[12])+s4+(s3=sp2[12])+2)>>2; dp[12] = (unsigned int)(s1+(s2=sp[13])+s3+(s4=sp2[13])+2)>>2; dp[13] = (unsigned int)(s2+(s1=sp[14])+s4+(s3=sp2[14])+2)>>2; dp[14] = (unsigned int)(s1+(s2=sp[15])+s3+(s4=sp2[15])+2)>>2; dp[15] = (unsigned int)(s2+sp[16]+s4+sp2[16]+2)>>2; sp+= lx2; sp2+= lx2; dp+= lx2; }}inline void rec4c(unsigned char *s,unsigned char *d, int lx, int lx2, int h){ unsigned char *dp,*sp,*sp2; unsigned int s1,s2,s3,s4; sp = s; sp2 = s+lx; dp = d; for (int j=0; j<h; j++){ s1=sp[0]; s3=sp2[0]; dp[0] = (unsigned int)(s1+(s2=sp[1])+s3+(s4=sp2[1])+2)>>2; dp[1] = (unsigned int)(s2+(s1=sp[2])+s4+(s3=sp2[2])+2)>>2; dp[2] = (unsigned int)(s1+(s2=sp[3])+s3+(s4=sp2[3])+2)>>2; dp[3] = (unsigned int)(s2+(s1=sp[4])+s4+(s3=sp2[4])+2)>>2; dp[4] = (unsigned int)(s1+(s2=sp[5])+s3+(s4=sp2[5])+2)>>2; dp[5] = (unsigned int)(s2+(s1=sp[6])+s4+(s3=sp2[6])+2)>>2; dp[6] = (unsigned int)(s1+(s2=sp[7])+s3+(s4=sp2[7])+2)>>2; dp[7] = (unsigned int)(s2+sp[8]+s4+sp2[8]+2)>>2; sp+= lx2; sp2+= lx2; dp+= lx2; }}inline void rec4a(unsigned char *s,unsigned char *d, int lx, int lx2, int h){ unsigned char *dp=d, *sp=s, *sp2=s+lx; unsigned int s1, s2, s3, s4;/* sp = s; sp2 = s+lx; dp = d;*/ for (int j=0; j<h; j++){ s1=sp[0]; s3=sp2[0]; dp[0] = (dp[0] + ((unsigned int)(s1+(s2=sp[1])+s3+(s4=sp2[1])+2)>>2) + 1)>>1; dp[1] = (dp[1] + ((unsigned int)(s2+(s1=sp[2])+s4+(s3=sp2[2])+2)>>2) + 1)>>1; dp[2] = (dp[2] + ((unsigned int)(s1+(s2=sp[3])+s3+(s4=sp2[3])+2)>>2) + 1)>>1; dp[3] = (dp[3] + ((unsigned int)(s2+(s1=sp[4])+s4+(s3=sp2[4])+2)>>2) + 1)>>1; dp[4] = (dp[4] + ((unsigned int)(s1+(s2=sp[5])+s3+(s4=sp2[5])+2)>>2) + 1)>>1; dp[5] = (dp[5] + ((unsigned int)(s2+(s1=sp[6])+s4+(s3=sp2[6])+2)>>2) + 1)>>1; dp[6] = (dp[6] + ((unsigned int)(s1+(s2=sp[7])+s3+(s4=sp2[7])+2)>>2) + 1)>>1; dp[7] = (dp[7] + ((unsigned int)(s2+(s1=sp[8])+s4+(s3=sp2[8])+2)>>2) + 1)>>1; dp[8] = (dp[8] + ((unsigned int)(s1+(s2=sp[9])+s3+(s4=sp2[9])+2)>>2) + 1)>>1; dp[9] = (dp[9] + ((unsigned int)(s2+(s1=sp[10])+s4+(s3=sp2[10])+2)>>2) + 1)>>1; dp[10] = (dp[10] + ((unsigned int)(s1+(s2=sp[11])+s3+(s4=sp2[11])+2)>>2) + 1)>>1; dp[11] = (dp[11] + ((unsigned int)(s2+(s1=sp[12])+s4+(s3=sp2[12])+2)>>2) + 1)>>1; dp[12] = (dp[12] + ((unsigned int)(s1+(s2=sp[13])+s3+(s4=sp2[13])+2)>>2) + 1)>>1; dp[13] = (dp[13] + ((unsigned int)(s2+(s1=sp[14])+s4+(s3=sp2[14])+2)>>2) + 1)>>1; dp[14] = (dp[14] + ((unsigned int)(s1+(s2=sp[15])+s3+(s4=sp2[15])+2)>>2) + 1)>>1; dp[15] = (dp[15] + ((unsigned int)(s2+sp[16]+s4+sp2[16]+2)>>2) + 1)>>1; sp+= lx2; sp2+= lx2; dp+= lx2; }}inline void rec4ac(unsigned char *s,unsigned char *d, int lx, int lx2, int h){ unsigned char *dp=d, *sp=s, *sp2=s+lx; unsigned int s1,s2,s3,s4;/* sp = s; sp2 = s+lx; dp = d;*/ for (int j=0; j<h; j++){ s1=sp[0]; s3=sp2[0]; dp[0] = (dp[0] + ((unsigned int)(s1+(s2=sp[1])+s3+(s4=sp2[1])+2)>>2) + 1)>>1; dp[1] = (dp[1] + ((unsigned int)(s2+(s1=sp[2])+s4+(s3=sp2[2])+2)>>2) + 1)>>1; dp[2] = (dp[2] + ((unsigned int)(s1+(s2=sp[3])+s3+(s4=sp2[3])+2)>>2) + 1)>>1; dp[3] = (dp[3] + ((unsigned int)(s2+(s1=sp[4])+s4+(s3=sp2[4])+2)>>2) + 1)>>1; dp[4] = (dp[4] + ((unsigned int)(s1+(s2=sp[5])+s3+(s4=sp2[5])+2)>>2) + 1)>>1; dp[5] = (dp[5] + ((unsigned int)(s2+(s1=sp[6])+s4+(s3=sp2[6])+2)>>2) + 1)>>1; dp[6] = (dp[6] + ((unsigned int)(s1+(s2=sp[7])+s3+(s4=sp2[7])+2)>>2) + 1)>>1; dp[7] = (dp[7] + ((unsigned int)(s2+sp[8]+s4+sp2[8]+2)>>2) + 1)>>1; sp+= lx2; sp2+= lx2; dp+= lx2; }}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -