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

📄 display.c

📁 linux下的一款mpeg播放器
💻 C
📖 第 1 页 / 共 2 页
字号:
  }  display_image(ximage,dithered_image);}/* only for 4:2:0 and 4:2:2! */static void ditherframe(src)unsigned char *src[];{  int i,j;  unsigned int uv;  unsigned char *py,*pu,*pv,*dst;  py = src[0];  pu = src[1];  pv = src[2];  dst = dithered_image;  for (j=0; j<coded_picture_height; j+=4)  {    /* line j + 0 */    for (i=0; i<coded_picture_width; i+=8)    {      uv = uvtab[(*pu++<<8)|*pv++];      *dst++ = ytab[((*py++)<<4)|(uv&15)];      *dst++ = ytab[((*py++ +8)<<4)|(uv>>4)];      uv = uvtab[((*pu++<<8)|*pv++)+1028];      *dst++ = ytab[((*py++ +2)<<4)|(uv&15)];      *dst++ = ytab[((*py++ +10)<<4)|(uv>>4)];      uv = uvtab[(*pu++<<8)|*pv++];      *dst++ = ytab[((*py++)<<4)|(uv&15)];      *dst++ = ytab[((*py++ +8)<<4)|(uv>>4)];      uv = uvtab[((*pu++<<8)|*pv++)+1028];      *dst++ = ytab[((*py++ +2)<<4)|(uv&15)];      *dst++ = ytab[((*py++ +10)<<4)|(uv>>4)];    }    if (chroma_format==CHROMA420)    {      pu -= chrom_width;      pv -= chrom_width;    }    /* line j + 1 */    for (i=0; i<coded_picture_width; i+=8)    {      uv = uvtab[((*pu++<<8)|*pv++)+2056];      *dst++ = ytab[((*py++ +12)<<4)|(uv>>4)];      *dst++ = ytab[((*py++ +4)<<4)|(uv&15)];      uv = uvtab[((*pu++<<8)|*pv++)+3084];      *dst++ = ytab[((*py++ +14)<<4)|(uv>>4)];      *dst++ = ytab[((*py++ +6)<<4)|(uv&15)];      uv = uvtab[((*pu++<<8)|*pv++)+2056];      *dst++ = ytab[((*py++ +12)<<4)|(uv>>4)];      *dst++ = ytab[((*py++ +4)<<4)|(uv&15)];      uv = uvtab[((*pu++<<8)|*pv++)+3084];      *dst++ = ytab[((*py++ +14)<<4)|(uv>>4)];      *dst++ = ytab[((*py++ +6)<<4)|(uv&15)];    }    /* line j + 2 */    for (i=0; i<coded_picture_width; i+=8)    {      uv = uvtab[((*pu++<<8)|*pv++)+1542];      *dst++ = ytab[((*py++ +3)<<4)|(uv&15)];      *dst++ = ytab[((*py++ +11)<<4)|(uv>>4)];      uv = uvtab[((*pu++<<8)|*pv++)+514];      *dst++ = ytab[((*py++ +1)<<4)|(uv&15)];      *dst++ = ytab[((*py++ +9)<<4)|(uv>>4)];      uv = uvtab[((*pu++<<8)|*pv++)+1542];      *dst++ = ytab[((*py++ +3)<<4)|(uv&15)];      *dst++ = ytab[((*py++ +11)<<4)|(uv>>4)];      uv = uvtab[((*pu++<<8)|*pv++)+514];      *dst++ = ytab[((*py++ +1)<<4)|(uv&15)];      *dst++ = ytab[((*py++ +9)<<4)|(uv>>4)];    }    if (chroma_format==CHROMA420)    {      pu -= chrom_width;      pv -= chrom_width;    }    /* line j + 3 */    for (i=0; i<coded_picture_width; i+=8)    {      uv = uvtab[((*pu++<<8)|*pv++)+3598];      *dst++ = ytab[((*py++ +15)<<4)|(uv>>4)];      *dst++ = ytab[((*py++ +7)<<4)|(uv&15)];      uv = uvtab[((*pu++<<8)|*pv++)+2570];      *dst++ = ytab[((*py++ +13)<<4)|(uv>>4)];      *dst++ = ytab[((*py++ +5)<<4)|(uv&15)];      uv = uvtab[((*pu++<<8)|*pv++)+3598];      *dst++ = ytab[((*py++ +15)<<4)|(uv>>4)];      *dst++ = ytab[((*py++ +7)<<4)|(uv&15)];      uv = uvtab[((*pu++<<8)|*pv++)+2570];      *dst++ = ytab[((*py++ +13)<<4)|(uv>>4)];      *dst++ = ytab[((*py++ +5)<<4)|(uv&15)];    }  }}static void dithertop(src,dst)unsigned char *src[];unsigned char *dst;{  int i,j;  unsigned int y,uv1,uv2;  unsigned char *py,*py2,*pu,*pv,*dst2;  py = src[0];  py2 = src[0] + (coded_picture_width<<1);  pu = src[1];  pv = src[2];  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)    {      y = *py++;      uv2 = (*pu++<<8)|*pv++;      uv1 = uvtab[uv2];      uv2 = uvtab[uv2+2056];      *dst++  = ytab[((y)<<4)|(uv1&15)];      *dst2++ = ytab[((((y + *py2++)>>1)+12)<<4)|(uv2>>4)];      y = *py++;      *dst++  = ytab[((y+8)<<4)|(uv1>>4)];      *dst2++ = ytab[((((y + *py2++)>>1)+4)<<4)|(uv2&15)];      y = *py++;      uv2 = (*pu++<<8)|*pv++;      uv1 = uvtab[uv2+1028];      uv2 = uvtab[uv2+3072];      *dst++  = ytab[((y+2)<<4)|(uv1&15)];      *dst2++ = ytab[((((y + *py2++)>>1)+14)<<4)|(uv2>>4)];      y = *py++;      *dst++  = ytab[((y+10)<<4)|(uv1>>4)];      *dst2++ = ytab[((((y + *py2++)>>1)+6)<<4)|(uv2&15)];    }    py += coded_picture_width;    if (j!=(coded_picture_height-4))      py2 += coded_picture_width;    else      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++;      uv2 = (*pu++<<8)|*pv++;      uv1 = uvtab[uv2+1542];      uv2 = uvtab[uv2+3598];      *dst++  = ytab[((y+3)<<4)|(uv1&15)];      *dst2++ = ytab[((((y + *py2++)>>1)+15)<<4)|(uv2>>4)];      y = *py++;      *dst++  = ytab[((y+11)<<4)|(uv1>>4)];      *dst2++ = ytab[((((y + *py2++)>>1)+7)<<4)|(uv2&15)];      y = *py++;      uv2 = (*pu++<<8)|*pv++;      uv1 = uvtab[uv2+514];      uv2 = uvtab[uv2+2570];      *dst++  = ytab[((y+1)<<4)|(uv1&15)];      *dst2++ = ytab[((((y + *py2++)>>1)+13)<<4)|(uv2>>4)];      y = *py++;      *dst++  = ytab[((y+9)<<4)|(uv1>>4)];      *dst2++ = ytab[((((y + *py2++)>>1)+5)<<4)|(uv2&15)];    }    py += coded_picture_width;    py2 += coded_picture_width;    dst += coded_picture_width;    dst2 += coded_picture_width;    pu += chrom_width;    pv += chrom_width;  }}static void ditherbot(src,dst)unsigned char *src[];unsigned char *dst;{  int i,j;  unsigned int y2,uv1,uv2;  unsigned char *py,*py2,*pu,*pv,*dst2;  py = src[0] + coded_picture_width;  py2 = py;  pu = src[1] + chrom_width;  pv = src[2] + chrom_width;  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)    {      y2 = *py2++;      uv2 = (*pu++<<8)|*pv++;      uv1 = uvtab[uv2];      uv2 = uvtab[uv2+2056];      *dst++  = ytab[((((*py++ + y2)>>1))<<4)|(uv1&15)];      *dst2++ = ytab[((y2+12)<<4)|(uv2>>4)];      y2 = *py2++;      *dst++  = ytab[((((*py++ + y2)>>1)+8)<<4)|(uv1>>4)];      *dst2++ = ytab[((y2+4)<<4)|(uv2&15)];      y2 = *py2++;      uv2 = (*pu++<<8)|*pv++;      uv1 = uvtab[uv2+1028];      uv2 = uvtab[uv2+3072];      *dst++  = ytab[((((*py++ + y2)>>1)+2)<<4)|(uv1&15)];      *dst2++ = ytab[((y2+14)<<4)|(uv2>>4)];      y2 = *py2++;      *dst++  = ytab[((((*py++ + y2)>>1)+10)<<4)|(uv1>>4)];      *dst2++ = ytab[((y2+6)<<4)|(uv2&15)];    }    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)    {      y2 = *py2++;      uv2 = (*pu++<<8)|*pv++;      uv1 = uvtab[uv2+1542];      uv2 = uvtab[uv2+3598];      *dst++  = ytab[((((*py++ + y2)>>1)+3)<<4)|(uv1&15)];      *dst2++ = ytab[((y2+15)<<4)|(uv2>>4)];      y2 = *py2++;      *dst++  = ytab[((((*py++ + y2)>>1)+11)<<4)|(uv1>>4)];      *dst2++ = ytab[((y2+7)<<4)|(uv2&15)];      y2 = *py2++;      uv2 = (*pu++<<8)|*pv++;      uv1 = uvtab[uv2+514];      uv2 = uvtab[uv2+2570];      *dst++  = ytab[((((*py++ + y2)>>1)+1)<<4)|(uv1&15)];      *dst2++ = ytab[((y2+13)<<4)|(uv2>>4)];      y2 = *py2++;      *dst++  = ytab[((((*py++ + y2)>>1)+9)<<4)|(uv1>>4)];      *dst2++ = ytab[((y2+5)<<4)|(uv2&15)];    }    py += coded_picture_width;    py2 += coded_picture_width;    dst += coded_picture_width;    dst2 += coded_picture_width;    pu += chrom_width;    pv += chrom_width;  }}/* only for 4:4:4 */static void ditherframe444(src)unsigned char *src[];{  int i,j;  unsigned char *py,*pu,*pv,*dst;  py = src[0];  pu = src[1];  pv = src[2];  dst = dithered_image;  for (j=0; j<coded_picture_height; j+=4)  {    /* line j + 0 */    for (i=0; i<coded_picture_width; i+=8)    {      *dst++ = ytab[((*py++)<<4)|(uvtab[(*pu++<<8)|*pv++]&15)];      *dst++ = ytab[((*py++ +8)<<4)|(uvtab[(*pu++<<8)|*pv++]>>4)];      *dst++ = ytab[((*py++ +2)<<4)|(uvtab[((*pu++<<8)|*pv++)+1028]&15)];      *dst++ = ytab[((*py++ +10)<<4)|(uvtab[((*pu++<<8)|*pv++)+1028]>>4)];      *dst++ = ytab[((*py++)<<4)|(uvtab[(*pu++<<8)|*pv++]&15)];      *dst++ = ytab[((*py++ +8)<<4)|(uvtab[(*pu++<<8)|*pv++]>>4)];      *dst++ = ytab[((*py++ +2)<<4)|(uvtab[((*pu++<<8)|*pv++)+1028]&15)];      *dst++ = ytab[((*py++ +10)<<4)|(uvtab[((*pu++<<8)|*pv++)+1028]>>4)];    }    /* line j + 1 */    for (i=0; i<coded_picture_width; i+=8)    {      *dst++ = ytab[((*py++ +12)<<4)|(uvtab[((*pu++<<8)|*pv++)+2056]>>4)];      *dst++ = ytab[((*py++ +4)<<4)|(uvtab[((*pu++<<8)|*pv++)+2056]&15)];      *dst++ = ytab[((*py++ +14)<<4)|(uvtab[((*pu++<<8)|*pv++)+3084]>>4)];      *dst++ = ytab[((*py++ +6)<<4)|(uvtab[((*pu++<<8)|*pv++)+3084]&15)];      *dst++ = ytab[((*py++ +12)<<4)|(uvtab[((*pu++<<8)|*pv++)+2056]>>4)];      *dst++ = ytab[((*py++ +4)<<4)|(uvtab[((*pu++<<8)|*pv++)+2056]&15)];      *dst++ = ytab[((*py++ +14)<<4)|(uvtab[((*pu++<<8)|*pv++)+3084]>>4)];      *dst++ = ytab[((*py++ +6)<<4)|(uvtab[((*pu++<<8)|*pv++)+3084]&15)];    }    /* line j + 2 */    for (i=0; i<coded_picture_width; i+=8)    {      *dst++ = ytab[((*py++ +3)<<4)|(uvtab[((*pu++<<8)|*pv++)+1542]&15)];      *dst++ = ytab[((*py++ +11)<<4)|(uvtab[((*pu++<<8)|*pv++)+1542]>>4)];      *dst++ = ytab[((*py++ +1)<<4)|(uvtab[((*pu++<<8)|*pv++)+514]&15)];      *dst++ = ytab[((*py++ +9)<<4)|(uvtab[((*pu++<<8)|*pv++)+514]>>4)];      *dst++ = ytab[((*py++ +3)<<4)|(uvtab[((*pu++<<8)|*pv++)+1542]&15)];      *dst++ = ytab[((*py++ +11)<<4)|(uvtab[((*pu++<<8)|*pv++)+1542]>>4)];      *dst++ = ytab[((*py++ +1)<<4)|(uvtab[((*pu++<<8)|*pv++)+514]&15)];      *dst++ = ytab[((*py++ +9)<<4)|(uvtab[((*pu++<<8)|*pv++)+514]>>4)];    }    /* line j + 3 */    for (i=0; i<coded_picture_width; i+=8)    {      *dst++ = ytab[((*py++ +15)<<4)|(uvtab[((*pu++<<8)|*pv++)+3598]>>4)];      *dst++ = ytab[((*py++ +7)<<4)|(uvtab[((*pu++<<8)|*pv++)+3598]&15)];      *dst++ = ytab[((*py++ +13)<<4)|(uvtab[((*pu++<<8)|*pv++)+2570]>>4)];      *dst++ = ytab[((*py++ +5)<<4)|(uvtab[((*pu++<<8)|*pv++)+2570]&15)];      *dst++ = ytab[((*py++ +15)<<4)|(uvtab[((*pu++<<8)|*pv++)+3598]>>4)];      *dst++ = ytab[((*py++ +7)<<4)|(uvtab[((*pu++<<8)|*pv++)+3598]&15)];      *dst++ = ytab[((*py++ +13)<<4)|(uvtab[((*pu++<<8)|*pv++)+2570]>>4)];      *dst++ = ytab[((*py++ +5)<<4)|(uvtab[((*pu++<<8)|*pv++)+2570]&15)];    }  }}static void dithertop444(src,dst)unsigned char *src[];unsigned char *dst;{  int i,j;  unsigned int y,uv;  unsigned char *py,*py2,*pu,*pv,*dst2;  py = src[0];  py2 = src[0] + (coded_picture_width<<1);  pu = src[1];  pv = src[2];  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)    {      y = *py++;      uv = (*pu++<<8)|*pv++;      *dst++  = ytab[((y)<<4)|(uvtab[uv]&15)];      *dst2++ = ytab[((((y + *py2++)>>1)+12)<<4)|(uvtab[uv+2056]>>4)];      y = *py++;      uv = (*pu++<<8)|*pv++;      *dst++  = ytab[((y+8)<<4)|(uvtab[uv]>>4)];      *dst2++ = ytab[((((y + *py2++)>>1)+4)<<4)|(uvtab[uv+2056]&15)];      y = *py++;      uv = (*pu++<<8)|*pv++;      *dst++  = ytab[((y+2)<<4)|(uvtab[uv+1028]&15)];      *dst2++ = ytab[((((y + *py2++)>>1)+14)<<4)|(uvtab[uv+3072]>>4)];      y = *py++;      uv = (*pu++<<8)|*pv++;      *dst++  = ytab[((y+10)<<4)|(uvtab[uv+1028]>>4)];      *dst2++ = ytab[((((y + *py2++)>>1)+6)<<4)|(uvtab[uv+3072]&15)];    }    py += coded_picture_width;    if (j!=(coded_picture_height-4))      py2 += coded_picture_width;    else      py2 -= coded_picture_width;    dst += coded_picture_width;    dst2 += coded_picture_width;    pu += chrom_width;    pv += chrom_width;    /* line j + 2, j + 3 */    for (i=0; i<coded_picture_width; i+=4)    {      y = *py++;      uv = (*pu++<<8)|*pv++;      *dst++  = ytab[((y+3)<<4)|(uvtab[uv+1542]&15)];      *dst2++ = ytab[((((y + *py2++)>>1)+15)<<4)|(uvtab[uv+3598]>>4)];      y = *py++;      uv = (*pu++<<8)|*pv++;      *dst++  = ytab[((y+11)<<4)|(uvtab[uv+1542]>>4)];      *dst2++ = ytab[((((y + *py2++)>>1)+7)<<4)|(uvtab[uv+3598]&15)];      y = *py++;      uv = (*pu++<<8)|*pv++;      *dst++  = ytab[((y+1)<<4)|(uvtab[uv+514]&15)];      *dst2++ = ytab[((((y + *py2++)>>1)+13)<<4)|(uvtab[uv+2570]>>4)];      y = *py++;      uv = (*pu++<<8)|*pv++;      *dst++  = ytab[((y+9)<<4)|(uvtab[uv+514]>>4)];      *dst2++ = ytab[((((y + *py2++)>>1)+5)<<4)|(uvtab[uv+2570]&15)];    }    py += coded_picture_width;    py2 += coded_picture_width;    dst += coded_picture_width;    dst2 += coded_picture_width;    pu += chrom_width;    pv += chrom_width;  }}static void ditherbot444(src,dst)unsigned char *src[];unsigned char *dst;{  int i,j;  unsigned int y2,uv;  unsigned char *py,*py2,*pu,*pv,*dst2;  py = src[0] + coded_picture_width;  py2 = py;  pu = src[1] + chrom_width;  pv = src[2] + chrom_width;  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)    {      y2 = *py2++;      uv = (*pu++<<8)|*pv++;      *dst++  = ytab[((((*py++ + y2)>>1))<<4)|(uvtab[uv]&15)];      *dst2++ = ytab[((y2+12)<<4)|(uvtab[uv+2056]>>4)];      y2 = *py2++;      uv = (*pu++<<8)|*pv++;      *dst++  = ytab[((((*py++ + y2)>>1)+8)<<4)|(uvtab[uv]>>4)];      *dst2++ = ytab[((y2+4)<<4)|(uvtab[uv+2056]&15)];      y2 = *py2++;      uv = (*pu++<<8)|*pv++;      *dst++  = ytab[((((*py++ + y2)>>1)+2)<<4)|(uvtab[uv+1028]&15)];      *dst2++ = ytab[((y2+14)<<4)|(uvtab[uv+3072]>>4)];      y2 = *py2++;      uv = (*pu++<<8)|*pv++;      *dst++  = ytab[((((*py++ + y2)>>1)+10)<<4)|(uvtab[uv+1028]>>4)];      *dst2++ = ytab[((y2+6)<<4)|(uvtab[uv+3072]&15)];    }    if (j==0)      py -= coded_picture_width;    else      py += coded_picture_width;    py2 += coded_picture_width;    dst += coded_picture_width;    dst2 += coded_picture_width;    pu += chrom_width;    pv += chrom_width;    /* line j + 2, j + 3 */    for (i=0; i<coded_picture_width; i+=4)    {      y2 = *py2++;      uv = (*pu++<<8)|*pv++;      *dst++  = ytab[((((*py++ + y2)>>1)+3)<<4)|(uvtab[uv+1542]&15)];      *dst2++ = ytab[((y2+15)<<4)|(uvtab[uv+3598]>>4)];      y2 = *py2++;      uv = (*pu++<<8)|*pv++;      *dst++  = ytab[((((*py++ + y2)>>1)+11)<<4)|(uvtab[uv+1542]>>4)];      *dst2++ = ytab[((y2+7)<<4)|(uvtab[uv+3598]&15)];      y2 = *py2++;      uv = (*pu++<<8)|*pv++;      *dst++  = ytab[((((*py++ + y2)>>1)+1)<<4)|(uvtab[uv+514]&15)];      *dst2++ = ytab[((y2+13)<<4)|(uvtab[uv+2570]>>4)];      y2 = *py2++;      uv = (*pu++<<8)|*pv++;      *dst++  = ytab[((((*py++ + y2)>>1)+9)<<4)|(uvtab[uv+514]>>4)];      *dst2++ = ytab[((y2+5)<<4)|(uvtab[uv+2570]&15)];    }    py += coded_picture_width;    py2 += coded_picture_width;    dst += coded_picture_width;    dst2 += coded_picture_width;    pu += chrom_width;    pv += chrom_width;  }}

⌨️ 快捷键说明

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