?? display.cc
字號(hào):
"movq %%mm4, %%mm5\n" // lum1 "paddw %%mm1, %%mm4\n" // lum1 +red 00 R6 00 R4 00 R2 00 R0 "paddw %%mm2, %%mm5\n" // lum1 +green 00 G6 00 G4 00 G2 00 G0 "psraw $6, %%mm4\n" // R1 0 .. 64 "movq %%mm7, %%mm3\n" // lum2 00 L7 00 L5 00 L3 00 L1 "psraw $6, %%mm5\n" // G1 - .. + "paddw %%mm0, %%mm7\n" // Lum2 +blue 00 B7 00 B5 00 B3 00 B1 "psraw $6, %%mm6\n" // B1 0 .. 64 "packuswb %%mm4, %%mm4\n" // R1 R1 "packuswb %%mm5, %%mm5\n" // G1 G1 "packuswb %%mm6, %%mm6\n" // B1 B1 "punpcklbw %%mm4, %%mm4\n" "punpcklbw %%mm5, %%mm5\n" "pand MMX_redmask, %%mm4\n" "psllw $3, %%mm5\n" // GREEN 1 "punpcklbw %%mm6, %%mm6\n" "pand MMX_grnmask, %%mm5\n" "pand MMX_redmask, %%mm6\n" "por %%mm5, %%mm4\n" // "psrlw $11, %%mm6\n" // BLUE 1 "movq %%mm3, %%mm5\n" // lum2 "paddw %%mm1, %%mm3\n" // lum2 +red 00 R7 00 R5 00 R3 00 R1 "paddw %%mm2, %%mm5\n" // lum2 +green 00 G7 00 G5 00 G3 00 G1 "psraw $6, %%mm3\n" // R2 "por %%mm6, %%mm4\n" // MM4 "psraw $6, %%mm5\n" // G2 "movq (%2, %3), %%mm6\n" // L3 "psraw $6, %%mm7\n" "packuswb %%mm3, %%mm3\n" "packuswb %%mm5, %%mm5\n" "packuswb %%mm7, %%mm7\n" "pand MMX_00FFw, %%mm6\n" // L3 "punpcklbw %%mm3, %%mm3\n"// "psubw MMX_10w, %%mm6\n" // L3 "punpcklbw %%mm5, %%mm5\n" "pmullw MMX_Ycoeff, %%mm6\n" // lum3 "punpcklbw %%mm7, %%mm7\n" "psllw $3, %%mm5\n" // GREEN 2 "pand MMX_redmask, %%mm7\n" "pand MMX_redmask, %%mm3\n" "psrlw $11, %%mm7\n" // BLUE 2 "pand MMX_grnmask, %%mm5\n" "por %%mm7, %%mm3\n" "movq (%2,%3), %%mm7\n" // L4 "por %%mm5, %%mm3\n" // "psrlw $8, %%mm7\n" // L4 "movq %%mm4, %%mm5\n"// "psubw MMX_10w, %%mm7\n" // L4 "punpcklwd %%mm3, %%mm4\n" "pmullw MMX_Ycoeff, %%mm7\n" // lum4 "punpckhwd %%mm3, %%mm5\n" "movq %%mm4, (%4)\n" "movq %%mm5, 8(%4)\n" "movq %%mm6, %%mm4\n" // Lum3 "paddw %%mm0, %%mm6\n" // Lum3 +blue "movq %%mm4, %%mm5\n" // Lum3 "paddw %%mm1, %%mm4\n" // Lum3 +red "paddw %%mm2, %%mm5\n" // Lum3 +green "psraw $6, %%mm4\n" "movq %%mm7, %%mm3\n" // Lum4 "psraw $6, %%mm5\n" "paddw %%mm0, %%mm7\n" // Lum4 +blue "psraw $6, %%mm6\n" // Lum3 +blue "movq %%mm3, %%mm0\n" // Lum4 "packuswb %%mm4, %%mm4\n" "paddw %%mm1, %%mm3\n" // Lum4 +red "packuswb %%mm5, %%mm5\n" "paddw %%mm2, %%mm0\n" // Lum4 +green "packuswb %%mm6, %%mm6\n" "punpcklbw %%mm4, %%mm4\n" "punpcklbw %%mm5, %%mm5\n" "punpcklbw %%mm6, %%mm6\n" "psllw $3, %%mm5\n" // GREEN 3 "pand MMX_redmask, %%mm4\n" "psraw $6, %%mm3\n" // psr 6 "psraw $6, %%mm0\n" "pand MMX_redmask, %%mm6\n" // BLUE "pand MMX_grnmask, %%mm5\n" "psrlw $11, %%mm6\n" // BLUE 3 "por %%mm5, %%mm4\n" "psraw $6, %%mm7\n" "por %%mm6, %%mm4\n" "packuswb %%mm3, %%mm3\n" "packuswb %%mm0, %%mm0\n" "packuswb %%mm7, %%mm7\n" "punpcklbw %%mm3, %%mm3\n" "punpcklbw %%mm0, %%mm0\n" "punpcklbw %%mm7, %%mm7\n" "pand MMX_redmask, %%mm3\n" "pand MMX_redmask, %%mm7\n" // BLUE "psllw $3, %%mm0\n" // GREEN 4 "psrlw $11, %%mm7\n" "pand MMX_grnmask, %%mm0\n" "por %%mm7, %%mm3\n" "addl $8, %6\n" "por %%mm0, %%mm3\n" "movq %%mm4, %%mm5\n" "punpcklwd %%mm3, %%mm4\n" "punpckhwd %%mm3, %%mm5\n" "movq %%mm4, (%4,%5,2)\n" "movq %%mm5, 8(%4,%5,2)\n" "addl $8, %2\n" "addl $4, %0\n" "addl $4, %1\n" "cmpl %3, %6\n" "leal 16(%4), %4\n" "jl 1b\n" "addl %3, %2\n" /* lum += cols */ "addl %7, %4\n" /* row1 += mod */ "movl $0, %6\n" "cmpl %8, %2\n" "jl 1b\n" : : "r" (cr), "r" (cb), "r" (lum), "r" (cols), "r" (row1) ,"r" (col1), "m" (x), "m" (mod) , "m" (y) ); __asm__ __volatile__( "emms\n" );}int DisplayX11::dither_image_rgb16(unsigned char* src[], unsigned char* dithered_img){ int height,width,display_width; height=coded_picture_height; if (shmem_flag == 2) display_width = xwidth; else display_width=coded_picture_width; width=coded_picture_width; if (rgb_mode == 0) Color16DitherImageMod(src[0], src[2], src[1], dithered_img, height, width,display_width -width); else yuv_2_rgb(src[0],src[1],src[2],width,height,width,width/2,0,dithered_img,0,0,display_width*2,rgb_mode); return 0;}int DisplayX11::dither_image_rgb24(unsigned char* src[], unsigned char* dithered_img){ int height,width,display_width; height=coded_picture_height; if (shmem_flag == 2) display_width = xwidth; else display_width=coded_picture_width; width=coded_picture_width; if (rgb_mode == 0) Color16DitherImageMod(src[0], src[2], src[1], dithered_img, height, width,display_width -width); else yuv_2_rgb(src[0],src[1],src[2],width,height,width,width/2,0,dithered_img,0,0,display_width*2,rgb_mode); return 0;}#endifvoid DisplayX11::dither_image(unsigned char *src[]){#ifdef SOLARIS_SDK_XIL dithered_image=getImage1Data();#endif if (prog_seq){ if (chroma_format!=CHROMA444){#if defined(LINUX) && defined(MMX) if (vinfo.c_class==TrueColor && vinfo.depth==24){ dither_image_rgb24(src, dithered_image); return; } if (bpp == 16 ) { dither_image_rgb16(src, dithered_image); return; }#endif ditherframe(src); } else ditherframe444(src); } else {#ifdef SOLARIS_SDK_XIL dithered_image2=getImage2Data();#endif#if defined(LINUX) && defined(MMX) if (bpp == 16 ){ dither_image_rgb16(src, dithered_image); return; }#endif if ((pict_struct==FRAME_PICTURE && topfirst) || pict_struct==BOTTOM_FIELD){ /* top field first */ if (chroma_format!=CHROMA444){ dithertop(src,dithered_image); ditherbot(src,dithered_image2); } else { dithertop444(src,dithered_image); ditherbot444(src,dithered_image2); } } else { /* bottom field first */ if (chroma_format!=CHROMA444){ ditherbot(src,dithered_image); dithertop(src,dithered_image2); } else { ditherbot444(src,dithered_image); dithertop444(src,dithered_image2); } } }}/* only for 4:2:0 and 4:2:2! */void DisplayX11::ditherframe(unsigned char *src[]){ int i; register unsigned int uv; register unsigned char *py,*pu,*pv,*dst; 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){ 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)]; } }}void DisplayX11::dithertop(unsigned char *src[], unsigned char *dst){ int i; 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 (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++; 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)];
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -