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

📄 display.c

📁 VC下MPEG2的视频编解码源码
💻 C
📖 第 1 页 / 共 3 页
字号:
      y = *py++;      Y2 = *Y2_ptr++;      u = *pu++ >> 1;      v = *pv++ >> 1;      *dst++  = Pixel[Y_Table[((y+Y2)>>1)]|Cb_Table[u]|Cr_Table[v]];      *dst2++ = Pixel[Y_Table[Y2+12]|Cb_Table[u+12]|Cr_Table[v+12]];      y = *py++;      Y2 = *Y2_ptr++;      if (chroma_format==CHROMA444)      {        u = *pu++ >> 1;        v = *pv++ >> 1;      }      *dst++  = Pixel[Y_Table[((y+Y2)>>1)+8]|Cb_Table[u+8]|Cr_Table[v+8]];      *dst2++ = Pixel[Y_Table[Y2+4]|Cb_Table[u+4]|Cr_Table[v+4]];      y = *py++;      Y2 = *Y2_ptr++;      u = *pu++ >> 1;      v = *pv++ >> 1;      *dst++  = Pixel[Y_Table[((y+Y2)>>1)+2]|Cb_Table[u+2]|Cr_Table[v+2]];      *dst2++ = Pixel[Y_Table[Y2+14]|Cb_Table[u+14]|Cr_Table[v+14]];      y = *py++;      Y2 = *Y2_ptr++;      if (chroma_format==CHROMA444)      {        u = *pu++ >> 1;        v = *pv++ >> 1;      }      *dst++  = Pixel[Y_Table[((y+Y2)>>1)+10]|Cb_Table[u+10]|Cr_Table[v+10]];      *dst2++ = Pixel[Y_Table[Y2+6]|Cb_Table[u+6]|Cr_Table[v+6]];    }    if (j==0)      py -= Coded_Picture_Width;    else      py += Coded_Picture_Width;    Y2_ptr += Coded_Picture_Width;    dst += Coded_Picture_Width;    dst2 += Coded_Picture_Width;    if (chroma_format==CHROMA420)    {      pu -= Chroma_Width;      pv -= Chroma_Width;    }    else    {      pu += Chroma_Width;      pv += Chroma_Width;    }    /* line j + 2. j + 3 */    for (i=0; i<Coded_Picture_Width; i+=4)    {      y = *py++;      Y2 = *Y2_ptr++;      u = *pu++ >> 1;      v = *pv++ >> 1;      *dst++  = Pixel[Y_Table[((y+Y2)>>1)+3]|Cb_Table[u+3]|Cr_Table[v+3]];      *dst2++ = Pixel[Y_Table[Y2+15]|Cb_Table[u+15]|Cr_Table[v+15]];      y = *py++;      Y2 = *Y2_ptr++;      if (chroma_format==CHROMA444)      {        u = *pu++ >> 1;        v = *pv++ >> 1;      }      *dst++  = Pixel[Y_Table[((y+Y2)>>1)+11]|Cb_Table[u+11]|Cr_Table[v+11]];      *dst2++ = Pixel[Y_Table[Y2+7]|Cb_Table[u+7]|Cr_Table[v+7]];      y = *py++;      Y2 = *Y2_ptr++;      u = *pu++ >> 1;      v = *pv++ >> 1;      *dst++  = Pixel[Y_Table[((y+Y2)>>1)+1]|Cb_Table[u+1]|Cr_Table[v+1]];      *dst2++ = Pixel[Y_Table[Y2+13]|Cb_Table[u+13]|Cr_Table[v+13]];      y = *py++;      Y2 = *Y2_ptr++;      if (chroma_format==CHROMA444)      {        u = *pu++ >> 1;        v = *pv++ >> 1;      }      *dst++  = Pixel[Y_Table[((y+Y2)>>1)+9]|Cb_Table[u+9]|Cr_Table[v+9]];      *dst2++ = Pixel[Y_Table[Y2+5]|Cb_Table[u+5]|Cr_Table[v+5]];    }    py += Coded_Picture_Width;    Y2_ptr += Coded_Picture_Width;    dst += Coded_Picture_Width;    dst2 += Coded_Picture_Width;    pu += Chroma_Width;    pv += Chroma_Width;  }}static void Dither_Top_Field420(src,dst)unsigned char *src[];unsigned char *dst;{  int i,j;  int Y1,Cb1,Cr1,Y2,Cb2,Cr2;  unsigned char *Y1_ptr,*Cb1_ptr,*Cr1_ptr,*Y2_ptr,*Cb2_ptr,*Cr2_ptr,*dst2;  Y1_ptr = src[0];  Cb1_ptr = src[1];  Cr1_ptr = src[2];  Y2_ptr = Y1_ptr + (Coded_Picture_Width<<1);  Cb2_ptr = Cb1_ptr + (Chroma_Width<<1);  Cr2_ptr = Cr1_ptr + (Chroma_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 = *Y1_ptr++;      Y2 = *Y2_ptr++;      Cb1 = *Cb1_ptr++ >> 1;      Cr1 = *Cr1_ptr++ >> 1;      Cb2 = *Cb2_ptr++ >> 1;      Cr2 = *Cr2_ptr++ >> 1;      *dst++  = Pixel[Y_Table[((3*Y1+Y2)>>2)]|Cb_Table[Cb1]|Cr_Table[Cr1]];      *dst2++ = Pixel[Y_Table[((Y1+3*Y2)>>2)+12]|Cb_Table[((3*Cb1+Cb2)>>2)+12]                                             |Cr_Table[((3*Cr1+Cr2)>>2)+12]];      Y1 = *Y1_ptr++;      Y2 = *Y2_ptr++;      *dst++  = Pixel[Y_Table[((3*Y1+Y2)>>2)+8]|Cb_Table[Cb1+8]|Cr_Table[Cr1+8]];      *dst2++ = Pixel[Y_Table[((Y1+3*Y2)>>2)+4]|Cb_Table[((3*Cb1+Cb2)>>2)+4]                                            |Cr_Table[((3*Cr1+Cr2)>>2)+4]];      Y1 = *Y1_ptr++;      Y2 = *Y2_ptr++;      Cb1 = *Cb1_ptr++ >> 1;      Cr1 = *Cr1_ptr++ >> 1;      Cb2 = *Cb2_ptr++ >> 1;      Cr2 = *Cr2_ptr++ >> 1;      *dst++  = Pixel[Y_Table[((3*Y1+Y2)>>2)+2]|Cb_Table[Cb1+2]|Cr_Table[Cr1+2]];      *dst2++ = Pixel[Y_Table[((Y1+3*Y2)>>2)+14]|Cb_Table[((3*Cb1+Cb2)>>2)+14]                                             |Cr_Table[((3*Cr1+Cr2)>>2)+14]];      Y1 = *Y1_ptr++;      Y2 = *Y2_ptr++;      *dst++  = Pixel[Y_Table[((3*Y1+Y2)>>2)+10]|Cb_Table[Cb1+10]|Cr_Table[Cr1+10]];      *dst2++ = Pixel[Y_Table[((Y1+3*Y2)>>2)+6]|Cb_Table[((3*Cb1+Cb2)>>2)+6]                                            |Cr_Table[((3*Cr1+Cr2)>>2)+6]];    }    Y1_ptr += Coded_Picture_Width;    if (j!=(Coded_Picture_Height-4))      Y2_ptr += Coded_Picture_Width;    else      Y2_ptr -= Coded_Picture_Width;    Cb1_ptr -= Chroma_Width;    Cr1_ptr -= Chroma_Width;    Cb2_ptr -= Chroma_Width;    Cr2_ptr -= Chroma_Width;    dst  += Coded_Picture_Width;    dst2 += Coded_Picture_Width;    /* line j + 2, j + 3 */    for (i=0; i<Coded_Picture_Width; i+=4)    {      Y1 = *Y1_ptr++;      Y2 = *Y2_ptr++;      Cb1 = *Cb1_ptr++ >> 1;      Cr1 = *Cr1_ptr++ >> 1;      Cb2 = *Cb2_ptr++ >> 1;      Cr2 = *Cr2_ptr++ >> 1;      *dst++  = Pixel[Y_Table[((3*Y1+Y2)>>2)+3]|Cb_Table[((Cb1+Cb2)>>1)+3]                                            |Cr_Table[((Cr1+Cr2)>>1)+3]];      *dst2++ = Pixel[Y_Table[((Y1+3*Y2)>>2)+15]|Cb_Table[((Cb1+3*Cb2)>>2)+15]                                             |Cr_Table[((Cr1+3*Cr2)>>2)+15]];      Y1 = *Y1_ptr++;      Y2 = *Y2_ptr++;      *dst++  = Pixel[Y_Table[((3*Y1+Y2)>>2)+11]|Cb_Table[((Cb1+Cb2)>>1)+11]                                             |Cr_Table[((Cr1+Cr2)>>1)+11]];      *dst2++ = Pixel[Y_Table[((Y1+3*Y2)>>2)+7]|Cb_Table[((Cb1+3*Cb2)>>2)+7]                                            |Cr_Table[((Cr1+3*Cr2)>>2)+7]];      Y1 = *Y1_ptr++;      Y2 = *Y2_ptr++;      Cb1 = *Cb1_ptr++ >> 1;      Cr1 = *Cr1_ptr++ >> 1;      Cb2 = *Cb2_ptr++ >> 1;      Cr2 = *Cr2_ptr++ >> 1;      *dst++  = Pixel[Y_Table[((3*Y1+Y2)>>2)+1]|Cb_Table[((Cb1+Cb2)>>1)+1]                                            |Cr_Table[((Cr1+Cr2)>>1)+1]];      *dst2++ = Pixel[Y_Table[((Y1+3*Y2)>>2)+13]|Cb_Table[((Cb1+3*Cb2)>>2)+13]                                             |Cr_Table[((Cr1+3*Cr2)>>2)+13]];      Y1 = *Y1_ptr++;      Y2 = *Y2_ptr++;      *dst++  = Pixel[Y_Table[((3*Y1+Y2)>>2)+9]|Cb_Table[((Cb1+Cb2)>>1)+9]                                            |Cr_Table[((Cr1+Cr2)>>1)+9]];      *dst2++ = Pixel[Y_Table[((Y1+3*Y2)>>2)+5]|Cb_Table[((Cb1+3*Cb2)>>2)+5]                                            |Cr_Table[((Cr1+3*Cr2)>>2)+5]];    }    Y1_ptr += Coded_Picture_Width;    Y2_ptr += Coded_Picture_Width;    Cb1_ptr += Chroma_Width;    Cr1_ptr += Chroma_Width;    if (j!=(Coded_Picture_Height-8))    {      Cb2_ptr += Chroma_Width;      Cr2_ptr += Chroma_Width;    }    else    {      Cb2_ptr -= Chroma_Width;      Cr2_ptr -= Chroma_Width;    }    dst += Coded_Picture_Width;    dst2+= Coded_Picture_Width;  }}static void Dither_Bottom_Field420(src,dst)unsigned char *src[];unsigned char *dst;{  int i,j;  int Y1,Cb1,Cr1,Y2,Cb2,Cr2;  unsigned char *Y1_ptr,*Cb1_ptr,*Cr1_ptr,*Y2_ptr,*Cb2_ptr,*Cr2_ptr,*dst2;  Y2_ptr = Y1_ptr = src[0] + Coded_Picture_Width;  Cb2_ptr = Cb1_ptr = src[1] + Chroma_Width;  Cr2_ptr = Cr1_ptr = src[2] + Chroma_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 = *Y1_ptr++;      Y2 = *Y2_ptr++;      Cb1 = *Cb1_ptr++ >> 1;      Cr1 = *Cr1_ptr++ >> 1;      Cb2 = *Cb2_ptr++ >> 1;      Cr2 = *Cr2_ptr++ >> 1;      *dst++  = Pixel[Y_Table[((3*Y1+Y2)>>2)+15]|Cb_Table[((3*Cb1+Cb2)>>2)+15]                                             |Cr_Table[((3*Cr1+Cr2)>>2)+15]];      *dst2++ = Pixel[Y_Table[((Y1+3*Y2)>>2)]|Cb_Table[((Cb1+Cb2)>>1)]                                          |Cr_Table[((Cr1+Cr2)>>1)]];      Y1 = *Y1_ptr++;      Y2 = *Y2_ptr++;      *dst++  = Pixel[Y_Table[((3*Y1+Y2)>>2)+7]|Cb_Table[((3*Cb1+Cb2)>>2)+7]                                            |Cr_Table[((3*Cr1+Cr2)>>2)+7]];      *dst2++ = Pixel[Y_Table[((Y1+3*Y2)>>2)+8]|Cb_Table[((Cb1+Cb2)>>1)+8]                                            |Cr_Table[((Cr1+Cr2)>>1)+8]];      Y1 = *Y1_ptr++;      Y2 = *Y2_ptr++;      Cb1 = *Cb1_ptr++ >> 1;      Cr1 = *Cr1_ptr++ >> 1;      Cb2 = *Cb2_ptr++ >> 1;      Cr2 = *Cr2_ptr++ >> 1;      *dst++  = Pixel[Y_Table[((3*Y1+Y2)>>2)+13]|Cb_Table[((3*Cb1+Cb2)>>2)+13]                                             |Cr_Table[((3*Cr1+Cr2)>>2)+13]];      *dst2++ = Pixel[Y_Table[((Y1+3*Y2)>>2)+2]|Cb_Table[((Cb1+Cb2)>>1)+2]                                            |Cr_Table[((Cr1+Cr2)>>1)+2]];      Y1 = *Y1_ptr++;      Y2 = *Y2_ptr++;      *dst++  = Pixel[Y_Table[((3*Y1+Y2)>>2)+5]|Cb_Table[((3*Cb1+Cb2)>>2)+5]                                            |Cr_Table[((3*Cr1+Cr2)>>2)+5]];      *dst2++ = Pixel[Y_Table[((Y1+3*Y2)>>2)+10]|Cb_Table[((Cb1+Cb2)>>1)+10]                                             |Cr_Table[((Cr1+Cr2)>>1)+10]];    }    if (j!=0)      Y1_ptr += Coded_Picture_Width;    else      Y1_ptr -= Coded_Picture_Width;    Y2_ptr += Coded_Picture_Width;    Cb1_ptr -= Chroma_Width;    Cr1_ptr -= Chroma_Width;    Cb2_ptr -= Chroma_Width;    Cr2_ptr -= Chroma_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 = *Y1_ptr++;      Y2 = *Y2_ptr++;      Cb1 = *Cb1_ptr++ >> 1;      Cr1 = *Cr1_ptr++ >> 1;      Cb2 = *Cb2_ptr++ >> 1;      Cr2 = *Cr2_ptr++ >> 1;      *dst++  = Pixel[Y_Table[((3*Y1+Y2)>>2)+12]|Cb_Table[((Cb1+3*Cb2)>>2)+12]                                             |Cr_Table[((Cr1+3*Cr2)>>2)+12]];      *dst2++ = Pixel[Y_Table[((Y1+3*Y2)>>2)+3]|Cb_Table[Cb2+3]                                            |Cr_Table[Cr2+3]];      Y1 = *Y1_ptr++;      Y2 = *Y2_ptr++;      *dst++  = Pixel[Y_Table[((3*Y1+Y2)>>2)+4]|Cb_Table[((Cb1+3*Cb2)>>2)+4]                                            |Cr_Table[((Cr1+3*Cr2)>>2)+4]];      *dst2++ = Pixel[Y_Table[((Y1+3*Y2)>>2)+11]|Cb_Table[Cb2+11]                                             |Cr_Table[Cr2+11]];      Y1 = *Y1_ptr++;      Y2 = *Y2_ptr++;      Cb1 = *Cb1_ptr++ >> 1;      Cr1 = *Cr1_ptr++ >> 1;      Cb2 = *Cb2_ptr++ >> 1;      Cr2 = *Cr2_ptr++ >> 1;      *dst++  = Pixel[Y_Table[((3*Y1+Y2)>>2)+14]|Cb_Table[((Cb1+3*Cb2)>>2)+14]                                             |Cr_Table[((Cr1+3*Cr2)>>2)+14]];      *dst2++ = Pixel[Y_Table[((Y1+3*Y2)>>2)+1]|Cb_Table[Cb2+1]                                            |Cr_Table[Cr2+1]];      Y1 = *Y1_ptr++;      Y2 = *Y2_ptr++;      *dst++  = Pixel[Y_Table[((3*Y1+Y2)>>2)+6]|Cb_Table[((Cb1+3*Cb2)>>2)+6]                                            |Cr_Table[((Cr1+3*Cr2)>>2)+6]];      *dst2++ = Pixel[Y_Table[((Y1+3*Y2)>>2)+9]|Cb_Table[Cb2+9]                                            |Cr_Table[Cr2+9]];    }    Y1_ptr += Coded_Picture_Width;    Y2_ptr += Coded_Picture_Width;    if (j!=0)    {      Cb1_ptr += Chroma_Width;      Cr1_ptr += Chroma_Width;    }    else    {      Cb1_ptr -= Chroma_Width;      Cr1_ptr -= Chroma_Width;    }    Cb2_ptr += Chroma_Width;    Cr2_ptr += Chroma_Width;    dst += Coded_Picture_Width;    dst2+= Coded_Picture_Width;  }  Y2_ptr -= (Coded_Picture_Width<<1);  Cb2_ptr -= (Chroma_Width<<1);  Cr2_ptr -= (Chroma_Width<<1);  /* dither last line */  for (i=0; i<Coded_Picture_Width; i+=4)  {    Y1 = *Y1_ptr++;    Y2 = *Y2_ptr++;    Cb1 = *Cb1_ptr++ >> 1;    Cr1 = *Cr1_ptr++ >> 1;    Cb2 = *Cb2_ptr++ >> 1;    Cr2 = *Cr2_ptr++ >> 1;    *dst++  = Pixel[Y_Table[((3*Y1+Y2)>>2)+15]|Cb_Table[((3*Cb1+Cb2)>>2)+15]                                           |Cr_Table[((3*Cr1+Cr2)>>2)+15]];    Y1 = *Y1_ptr++;    Y2 = *Y2_ptr++;    *dst++  = Pixel[Y_Table[((3*Y1+Y2)>>2)+7]|Cb_Table[((3*Cb1+Cb2)>>2)+7]                                          |Cr_Table[((3*Cr1+Cr2)>>2)+7]];    Y1 = *Y1_ptr++;    Y2 = *Y2_ptr++;    Cb1 = *Cb1_ptr++ >> 1;    Cr1 = *Cr1_ptr++ >> 1;    Cb2 = *Cb2_ptr++ >> 1;    Cr2 = *Cr2_ptr++ >> 1;    *dst++  = Pixel[Y_Table[((3*Y1+Y2)>>2)+13]|Cb_Table[((3*Cb1+Cb2)>>2)+13]                                           |Cr_Table[((3*Cr1+Cr2)>>2)+13]];    Y1 = *Y1_ptr++;    Y2 = *Y2_ptr++;    *dst++  = Pixel[Y_Table[((3*Y1+Y2)>>2)+5]|Cb_Table[((3*Cb1+Cb2)>>2)+5]                                          |Cr_Table[((3*Cr1+Cr2)>>2)+5]];    }}#endif

⌨️ 快捷键说明

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