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

📄 display.c

📁 该源码可以将mpeg、mpg和m2v格式的视频文件解码成yuv、ppm、tga等格式文件
💻 C
📖 第 1 页 / 共 3 页
字号:
      y2 = *py2++;      u = *pu++ >> 1;      v = *pv++ >> 1;      *dst++  = pixel[ytab[((y+y2)>>1)]|utab[u]|vtab[v]];      *dst2++ = pixel[ytab[y2+12]|utab[u+12]|vtab[v+12]];      y = *py++;      y2 = *py2++;      if (chroma_format==CHROMA444)      {        u = *pu++ >> 1;        v = *pv++ >> 1;      }      *dst++  = pixel[ytab[((y+y2)>>1)+8]|utab[u+8]|vtab[v+8]];      *dst2++ = pixel[ytab[y2+4]|utab[u+4]|vtab[v+4]];      y = *py++;      y2 = *py2++;      u = *pu++ >> 1;      v = *pv++ >> 1;      *dst++  = pixel[ytab[((y+y2)>>1)+2]|utab[u+2]|vtab[v+2]];      *dst2++ = pixel[ytab[y2+14]|utab[u+14]|vtab[v+14]];      y = *py++;      y2 = *py2++;      if (chroma_format==CHROMA444)      {        u = *pu++ >> 1;        v = *pv++ >> 1;      }      *dst++  = pixel[ytab[((y+y2)>>1)+10]|utab[u+10]|vtab[v+10]];      *dst2++ = pixel[ytab[y2+6]|utab[u+6]|vtab[v+6]];    }    if (j==0)      py -= coded_picture_width;    else      py += coded_picture_width;    py2 += coded_picture_width;    dst += coded_picture_width;    dst2 += coded_picture_width;    if (chroma_format==CHROMA420)    {      pu -= chrom_width;      pv -= chrom_width;    }    else    {      pu += chrom_width;      pv += chrom_width;    }    /* line j + 2. j + 3 */    for (i=0; i<coded_picture_width; i+=4)    {      y = *py++;      y2 = *py2++;      u = *pu++ >> 1;      v = *pv++ >> 1;      *dst++  = pixel[ytab[((y+y2)>>1)+3]|utab[u+3]|vtab[v+3]];      *dst2++ = pixel[ytab[y2+15]|utab[u+15]|vtab[v+15]];      y = *py++;      y2 = *py2++;      if (chroma_format==CHROMA444)      {        u = *pu++ >> 1;        v = *pv++ >> 1;      }      *dst++  = pixel[ytab[((y+y2)>>1)+11]|utab[u+11]|vtab[v+11]];      *dst2++ = pixel[ytab[y2+7]|utab[u+7]|vtab[v+7]];      y = *py++;      y2 = *py2++;      u = *pu++ >> 1;      v = *pv++ >> 1;      *dst++  = pixel[ytab[((y+y2)>>1)+1]|utab[u+1]|vtab[v+1]];      *dst2++ = pixel[ytab[y2+13]|utab[u+13]|vtab[v+13]];      y = *py++;      y2 = *py2++;      if (chroma_format==CHROMA444)      {        u = *pu++ >> 1;        v = *pv++ >> 1;      }      *dst++  = pixel[ytab[((y+y2)>>1)+9]|utab[u+9]|vtab[v+9]];      *dst2++ = pixel[ytab[y2+5]|utab[u+5]|vtab[v+5]];    }    py += coded_picture_width;    py2 += coded_picture_width;    dst += coded_picture_width;    dst2 += coded_picture_width;    pu += chrom_width;    pv += chrom_width;  }}static void dithertop420(src,dst)unsigned char *src[];unsigned char *dst;{  int i,j;  int y1,u1,v1,y2,u2,v2;  unsigned char *py1,*pu1,*pv1,*py2,*pu2,*pv2,*dst2;  py1 = src[0];  pu1 = src[1];  pv1 = src[2];  py2 = py1 + (coded_picture_width<<1);  pu2 = pu1 + (chrom_width<<1);  pv2 = pv1 + (chrom_width<<1);  dst2 = dst + coded_picture_width;  for (j=0; j<coded_picture_height; j+=4)  {    /* line j + 0, j + 1 */    for (i=0; i<coded_picture_width; i+=4)    {      y1 = *py1++;      y2 = *py2++;      u1 = *pu1++ >> 1;      v1 = *pv1++ >> 1;      u2 = *pu2++ >> 1;      v2 = *pv2++ >> 1;      *dst++  = pixel[ytab[((3*y1+y2)>>2)]|utab[u1]|vtab[v1]];      *dst2++ = pixel[ytab[((y1+3*y2)>>2)+12]|utab[((3*u1+u2)>>2)+12]                                             |vtab[((3*v1+v2)>>2)+12]];      y1 = *py1++;      y2 = *py2++;      *dst++  = pixel[ytab[((3*y1+y2)>>2)+8]|utab[u1+8]|vtab[v1+8]];      *dst2++ = pixel[ytab[((y1+3*y2)>>2)+4]|utab[((3*u1+u2)>>2)+4]                                            |vtab[((3*v1+v2)>>2)+4]];      y1 = *py1++;      y2 = *py2++;      u1 = *pu1++ >> 1;      v1 = *pv1++ >> 1;      u2 = *pu2++ >> 1;      v2 = *pv2++ >> 1;      *dst++  = pixel[ytab[((3*y1+y2)>>2)+2]|utab[u1+2]|vtab[v1+2]];      *dst2++ = pixel[ytab[((y1+3*y2)>>2)+14]|utab[((3*u1+u2)>>2)+14]                                             |vtab[((3*v1+v2)>>2)+14]];      y1 = *py1++;      y2 = *py2++;      *dst++  = pixel[ytab[((3*y1+y2)>>2)+10]|utab[u1+10]|vtab[v1+10]];      *dst2++ = pixel[ytab[((y1+3*y2)>>2)+6]|utab[((3*u1+u2)>>2)+6]                                            |vtab[((3*v1+v2)>>2)+6]];    }    py1 += coded_picture_width;    if (j!=(coded_picture_height-4))      py2 += coded_picture_width;    else      py2 -= coded_picture_width;    pu1 -= chrom_width;    pv1 -= chrom_width;    pu2 -= chrom_width;    pv2 -= chrom_width;    dst  += coded_picture_width;    dst2 += coded_picture_width;    /* line j + 2, j + 3 */    for (i=0; i<coded_picture_width; i+=4)    {      y1 = *py1++;      y2 = *py2++;      u1 = *pu1++ >> 1;      v1 = *pv1++ >> 1;      u2 = *pu2++ >> 1;      v2 = *pv2++ >> 1;      *dst++  = pixel[ytab[((3*y1+y2)>>2)+3]|utab[((u1+u2)>>1)+3]                                            |vtab[((v1+v2)>>1)+3]];      *dst2++ = pixel[ytab[((y1+3*y2)>>2)+15]|utab[((u1+3*u2)>>2)+15]                                             |vtab[((v1+3*v2)>>2)+15]];      y1 = *py1++;      y2 = *py2++;      *dst++  = pixel[ytab[((3*y1+y2)>>2)+11]|utab[((u1+u2)>>1)+11]                                             |vtab[((v1+v2)>>1)+11]];      *dst2++ = pixel[ytab[((y1+3*y2)>>2)+7]|utab[((u1+3*u2)>>2)+7]                                            |vtab[((v1+3*v2)>>2)+7]];      y1 = *py1++;      y2 = *py2++;      u1 = *pu1++ >> 1;      v1 = *pv1++ >> 1;      u2 = *pu2++ >> 1;      v2 = *pv2++ >> 1;      *dst++  = pixel[ytab[((3*y1+y2)>>2)+1]|utab[((u1+u2)>>1)+1]                                            |vtab[((v1+v2)>>1)+1]];      *dst2++ = pixel[ytab[((y1+3*y2)>>2)+13]|utab[((u1+3*u2)>>2)+13]                                             |vtab[((v1+3*v2)>>2)+13]];      y1 = *py1++;      y2 = *py2++;      *dst++  = pixel[ytab[((3*y1+y2)>>2)+9]|utab[((u1+u2)>>1)+9]                                            |vtab[((v1+v2)>>1)+9]];      *dst2++ = pixel[ytab[((y1+3*y2)>>2)+5]|utab[((u1+3*u2)>>2)+5]                                            |vtab[((v1+3*v2)>>2)+5]];    }    py1 += coded_picture_width;    py2 += coded_picture_width;    pu1 += chrom_width;    pv1 += chrom_width;    if (j!=(coded_picture_height-8))    {      pu2 += chrom_width;      pv2 += chrom_width;    }    else    {      pu2 -= chrom_width;      pv2 -= chrom_width;    }    dst += coded_picture_width;    dst2+= coded_picture_width;  }}static void ditherbot420(src,dst)unsigned char *src[];unsigned char *dst;{  int i,j;  int y1,u1,v1,y2,u2,v2;  unsigned char *py1,*pu1,*pv1,*py2,*pu2,*pv2,*dst2;  py2 = py1 = src[0] + coded_picture_width;  pu2 = pu1 = src[1] + chrom_width;  pv2 = pv1 = src[2] + chrom_width;  dst2 = dst;  for (j=0; j<coded_picture_height; j+=4)  {    /* line j + 0, j + 1 */    for (i=0; i<coded_picture_width; i+=4)    {      y1 = *py1++;      y2 = *py2++;      u1 = *pu1++ >> 1;      v1 = *pv1++ >> 1;      u2 = *pu2++ >> 1;      v2 = *pv2++ >> 1;      *dst++  = pixel[ytab[((3*y1+y2)>>2)+15]|utab[((3*u1+u2)>>2)+15]                                             |vtab[((3*v1+v2)>>2)+15]];      *dst2++ = pixel[ytab[((y1+3*y2)>>2)]|utab[((u1+u2)>>1)]                                          |vtab[((v1+v2)>>1)]];      y1 = *py1++;      y2 = *py2++;      *dst++  = pixel[ytab[((3*y1+y2)>>2)+7]|utab[((3*u1+u2)>>2)+7]                                            |vtab[((3*v1+v2)>>2)+7]];      *dst2++ = pixel[ytab[((y1+3*y2)>>2)+8]|utab[((u1+u2)>>1)+8]                                            |vtab[((v1+v2)>>1)+8]];      y1 = *py1++;      y2 = *py2++;      u1 = *pu1++ >> 1;      v1 = *pv1++ >> 1;      u2 = *pu2++ >> 1;      v2 = *pv2++ >> 1;      *dst++  = pixel[ytab[((3*y1+y2)>>2)+13]|utab[((3*u1+u2)>>2)+13]                                             |vtab[((3*v1+v2)>>2)+13]];      *dst2++ = pixel[ytab[((y1+3*y2)>>2)+2]|utab[((u1+u2)>>1)+2]                                            |vtab[((v1+v2)>>1)+2]];      y1 = *py1++;      y2 = *py2++;      *dst++  = pixel[ytab[((3*y1+y2)>>2)+5]|utab[((3*u1+u2)>>2)+5]                                            |vtab[((3*v1+v2)>>2)+5]];      *dst2++ = pixel[ytab[((y1+3*y2)>>2)+10]|utab[((u1+u2)>>1)+10]                                             |vtab[((v1+v2)>>1)+10]];    }    if (j!=0)      py1 += coded_picture_width;    else      py1 -= coded_picture_width;    py2 += coded_picture_width;    pu1 -= chrom_width;    pv1 -= chrom_width;    pu2 -= chrom_width;    pv2 -= chrom_width;    if (j!=0)      dst  += coded_picture_width;    dst2 += coded_picture_width;    /* line j + 2, j + 3 */    for (i=0; i<coded_picture_width; i+=4)    {      y1 = *py1++;      y2 = *py2++;      u1 = *pu1++ >> 1;      v1 = *pv1++ >> 1;      u2 = *pu2++ >> 1;      v2 = *pv2++ >> 1;      *dst++  = pixel[ytab[((3*y1+y2)>>2)+12]|utab[((u1+3*u2)>>2)+12]                                             |vtab[((v1+3*v2)>>2)+12]];      *dst2++ = pixel[ytab[((y1+3*y2)>>2)+3]|utab[u2+3]                                            |vtab[v2+3]];      y1 = *py1++;      y2 = *py2++;      *dst++  = pixel[ytab[((3*y1+y2)>>2)+4]|utab[((u1+3*u2)>>2)+4]                                            |vtab[((v1+3*v2)>>2)+4]];      *dst2++ = pixel[ytab[((y1+3*y2)>>2)+11]|utab[u2+11]                                             |vtab[v2+11]];      y1 = *py1++;      y2 = *py2++;      u1 = *pu1++ >> 1;      v1 = *pv1++ >> 1;      u2 = *pu2++ >> 1;      v2 = *pv2++ >> 1;      *dst++  = pixel[ytab[((3*y1+y2)>>2)+14]|utab[((u1+3*u2)>>2)+14]                                             |vtab[((v1+3*v2)>>2)+14]];      *dst2++ = pixel[ytab[((y1+3*y2)>>2)+1]|utab[u2+1]                                            |vtab[v2+1]];      y1 = *py1++;      y2 = *py2++;      *dst++  = pixel[ytab[((3*y1+y2)>>2)+6]|utab[((u1+3*u2)>>2)+6]                                            |vtab[((v1+3*v2)>>2)+6]];      *dst2++ = pixel[ytab[((y1+3*y2)>>2)+9]|utab[u2+9]                                            |vtab[v2+9]];    }    py1 += coded_picture_width;    py2 += coded_picture_width;    if (j!=0)    {      pu1 += chrom_width;      pv1 += chrom_width;    }    else    {      pu1 -= chrom_width;      pv1 -= chrom_width;    }    pu2 += chrom_width;    pv2 += chrom_width;    dst += coded_picture_width;    dst2+= coded_picture_width;  }  py2 -= (coded_picture_width<<1);  pu2 -= (chrom_width<<1);  pv2 -= (chrom_width<<1);  /* dither last line */  for (i=0; i<coded_picture_width; i+=4)  {    y1 = *py1++;    y2 = *py2++;    u1 = *pu1++ >> 1;    v1 = *pv1++ >> 1;    u2 = *pu2++ >> 1;    v2 = *pv2++ >> 1;    *dst++  = pixel[ytab[((3*y1+y2)>>2)+15]|utab[((3*u1+u2)>>2)+15]                                           |vtab[((3*v1+v2)>>2)+15]];    y1 = *py1++;    y2 = *py2++;    *dst++  = pixel[ytab[((3*y1+y2)>>2)+7]|utab[((3*u1+u2)>>2)+7]                                          |vtab[((3*v1+v2)>>2)+7]];    y1 = *py1++;    y2 = *py2++;    u1 = *pu1++ >> 1;    v1 = *pv1++ >> 1;    u2 = *pu2++ >> 1;    v2 = *pv2++ >> 1;    *dst++  = pixel[ytab[((3*y1+y2)>>2)+13]|utab[((3*u1+u2)>>2)+13]                                           |vtab[((3*v1+v2)>>2)+13]];    y1 = *py1++;    y2 = *py2++;    *dst++  = pixel[ytab[((3*y1+y2)>>2)+5]|utab[((3*u1+u2)>>2)+5]                                          |vtab[((3*v1+v2)>>2)+5]];    }}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -