📄 display.c
字号:
{
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 + -