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

📄 recon.cc

📁 ac3的解码程序
💻 CC
📖 第 1 页 / 共 3 页
字号:
			"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 + -