📄 display.cc
字号:
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; }}void DisplayX11::ditherbot(unsigned char *src[], unsigned char *dst){ int i; 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 (int 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 */void DisplayX11::ditherframe444(unsigned char *src[]){ int i; unsigned char *py=src[0], *pu=src[1], *pv=src[2], *dst=dithered_image; for (int 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)]; } }}void DisplayX11::dithertop444(unsigned char *src[], unsigned char *dst){ int i; 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 (int 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; }}void DisplayX11::ditherbot444(unsigned char *src[], unsigned char *dst){ int i; 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 (int 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; }}#ifdef SOLARIS_SDK_XILint DisplayX11::resize(){ TRACER("int DisplayX11::resize()"); Window root; int x, y; unsigned int w, h, b, d; XGetGeometry(display, window, &root, &x, &y, &w, &h, &b, &d); // indicate resize resized=1; horizontal_factor=((float) w)/horizontal_size; vertical_factor=((float) h)/vertical_size; // to avoid new events for the time being XSelectInput(display, window, NoEventMask); // Create new image with new geometry xil_destroy(displayimage); displayimage=xil_create_from_window(State, display, window); xil_destroy(resized_image); resized_image=xil_create(State, w, h, bands, XIL_BYTE);/* if (bands==3){ XilColorspace cspace=xil_colorspace_get_by_name(State, "ycc601"); xil_set_colorspace(resized_image, cspace); cspace=xil_colorspace_get_by_name(State, "rgb709"); xil_set_colorspace(displayimage, cspace); }*/ XSelectInput(display, window, StructureNotifyMask); return 1;}#endif // SOLARIS_SDK_XIL
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -