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