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

📄 colorcvt.c

📁 linux下的一款播放器
💻 C
📖 第 1 页 / 共 5 页
字号:
            (CLIP8[y2 + guv] << 8) |            (CLIP8[y2 + rv]  << 16);        /* next 2x2 block */        sy1 += 2; sy2 += 2;        su += 1; sv += 1;        d1 += 2*BPP4; d2 += 2*BPP4;    }    /* convert the last 2x1 block: */    if (dx & 1) {        bu = butab[su[0]];        guv = gutab[su[0]] + gvtab[sv[0]];        rv = rvtab[sv[0]];        y1 = ytab[sy1[0]];        y2 = ytab[sy2[0]];        /* first line BGR0 */        *(unsigned int *)(d1+0) =            (CLIP8[y1 + bu])       |            (CLIP8[y1 + guv] << 8) |            (CLIP8[y1 + rv]  << 16);        /* second line BGR0 */        *(unsigned int *)(d2+0) =            (CLIP8[y2 + bu])       |            (CLIP8[y2 + guv] << 8) |            (CLIP8[y2 + rv]  << 16);    }}static void dblineI420toRGB32alpha (unsigned char *d1, unsigned char *d2, int dest_x,    unsigned char *sy1, unsigned char *sy2, unsigned char *su, unsigned char *sv,    int src_x, int dx){    register int y1, y2, ruv, guv, buv;    register int i;    /* convert first 2x1 block: */    if (src_x & 1) {        buv = butab[su[0]] + bvtab[sv[0]];        guv = gutab[su[0]] + gvtab[sv[0]];        ruv = rutab[su[0]] + rvtab[sv[0]];        y1 = ytab[sy1[0]];        y2 = ytab[sy2[0]];        /* first line BGR0 */        *(unsigned int *)(d1+0) =            (CLIP8[y1 + buv])      |            (CLIP8[y1 + guv] << 8) |            (CLIP8[y1 + ruv] << 16);        /* second line BGR0 */        *(unsigned int *)(d2+0) =            (CLIP8[y2 + buv])      |            (CLIP8[y2 + guv] << 8) |            (CLIP8[y2 + ruv] << 16);        sy1 += 1; sy2 += 1;        su += 1; sv += 1;           /* shift luma !!! */        d1 += BPP4; d2 += BPP4;        dx --;    }    /* convert all integral 2x2 blocks: */    for (i = 0; i < dx/2; i ++) {        buv = butab[su[0]] + bvtab[sv[0]];        guv = gutab[su[0]] + gvtab[sv[0]];        ruv = rutab[su[0]] + rvtab[sv[0]];        y1 = ytab[sy1[0]];        y2 = ytab[sy2[0]];        /* first line BGR0 */        *(unsigned int *)(d1+0) =            (CLIP8[y1 + buv])      |            (CLIP8[y1 + guv] << 8) |            (CLIP8[y1 + ruv] << 16);        /* second line BGR0 */        *(unsigned int *)(d2+0) =            (CLIP8[y2 + buv])      |            (CLIP8[y2 + guv] << 8) |            (CLIP8[y2 + ruv] << 16);        y1 = ytab[sy1[1]];        y2 = ytab[sy2[1]];        /* first line BGR0 */        *(unsigned int *)(d1+BPP4) =            (CLIP8[y1 + buv])      |            (CLIP8[y1 + guv] << 8) |            (CLIP8[y1 + ruv] << 16);        /* second line BGR0 */        *(unsigned int *)(d2+BPP4) =            (CLIP8[y2 + buv])      |            (CLIP8[y2 + guv] << 8) |            (CLIP8[y2 + ruv] << 16);        /* next 2x2 block */        sy1 += 2; sy2 += 2;        su += 1; sv += 1;        d1 += 2*BPP4; d2 += 2*BPP4;    }    /* convert last 2x1 block: */    if (dx & 1) {        buv = butab[su[0]] + bvtab[sv[0]];        guv = gutab[su[0]] + gvtab[sv[0]];        ruv = rutab[su[0]] + rvtab[sv[0]];        y1 = ytab[sy1[0]];        y2 = ytab[sy2[0]];        /* first line BGR0 */        *(unsigned int *)(d1+0) =            (CLIP8[y1 + buv])      |            (CLIP8[y1 + guv] << 8) |            (CLIP8[y1 + ruv] << 16);        /* second line BGR0 */        *(unsigned int *)(d2+0) =            (CLIP8[y2 + buv])      |            (CLIP8[y2 + guv] << 8) |            (CLIP8[y2 + ruv] << 16);    }}static void dblineI420toBGR32 (unsigned char *d1, unsigned char *d2, int dest_x,    unsigned char *sy1, unsigned char *sy2, unsigned char *su, unsigned char *sv,    int src_x, int dx){    register int y1, y2, rv, guv, bu;    register int i;    /* convert first 2x1 block: */    if (src_x & 1) {        bu = butab[su[0]];        guv = gutab[su[0]] + gvtab[sv[0]];        rv = rvtab[sv[0]];        y1 = ytab[sy1[0]];        y2 = ytab[sy2[0]];        /* first line BGR0 */        *(unsigned int *)(d1+0) =            (CLIP8[y1 + bu]  << 16)|            (CLIP8[y1 + guv] << 8) |            (CLIP8[y1 + rv]  << 0);        /* second line BGR0 */        *(unsigned int *)(d2+0) =            (CLIP8[y2 + bu]  << 16)|            (CLIP8[y2 + guv] << 8) |            (CLIP8[y2 + rv]  << 0);        sy1 += 1; sy2 += 1;        su += 1; sv += 1;           /* shift luma !!! */        d1 += BPP4; d2 += BPP4;        dx --;    }    /* convert all integral 2x2 blocks: */    for (i = 0; i < dx/2; i ++) {        bu = butab[su[0]];        guv = gutab[su[0]] + gvtab[sv[0]];        rv = rvtab[sv[0]];        y1 = ytab[sy1[0]];        y2 = ytab[sy2[0]];        /* first line BGR0 */        *(unsigned int *)(d1+0) =            (CLIP8[y1 + bu]  << 16)|            (CLIP8[y1 + guv] << 8) |            (CLIP8[y1 + rv]  << 0);        /* second line BGR0 */        *(unsigned int *)(d2+0) =            (CLIP8[y2 + bu]  << 16)|            (CLIP8[y2 + guv] << 8) |            (CLIP8[y2 + rv]  << 0);        /* 2nd row: */        y1 = ytab[sy1[1]];        y2 = ytab[sy2[1]];        /* first line BGR0 */        *(unsigned int *)(d1+BPP4) =            (CLIP8[y1 + bu]  << 16)|            (CLIP8[y1 + guv] << 8) |            (CLIP8[y1 + rv]  << 0);        /* second line BGR0 */        *(unsigned int *)(d2+BPP4) =            (CLIP8[y2 + bu]  << 16)|            (CLIP8[y2 + guv] << 8) |            (CLIP8[y2 + rv]  << 0);        /* next 2x2 block */        sy1 += 2; sy2 += 2;        su += 1; sv += 1;        d1 += 2*BPP4; d2 += 2*BPP4;    }    /* convert the last 2x1 block: */    if (dx & 1) {        bu = butab[su[0]];        guv = gutab[su[0]] + gvtab[sv[0]];        rv = rvtab[sv[0]];        y1 = ytab[sy1[0]];        y2 = ytab[sy2[0]];        /* first line BGR0 */        *(unsigned int *)(d1+0) =            (CLIP8[y1 + bu]  << 16)|            (CLIP8[y1 + guv] << 8) |            (CLIP8[y1 + rv]  << 0);        /* second line BGR0 */        *(unsigned int *)(d2+0) =            (CLIP8[y2 + bu]  << 16)|            (CLIP8[y2 + guv] << 8) |            (CLIP8[y2 + rv]  << 0);    }}static void dblineI420toBGR32alpha (unsigned char *d1, unsigned char *d2, int dest_x,    unsigned char *sy1, unsigned char *sy2, unsigned char *su, unsigned char *sv,    int src_x, int dx){    register int y1, y2, ruv, guv, buv;    register int i;    /* convert first 2x1 block: */    if (src_x & 1) {        buv = butab[su[0]] + bvtab[sv[0]];        guv = gutab[su[0]] + gvtab[sv[0]];        ruv = rutab[su[0]] + rvtab[sv[0]];        y1 = ytab[sy1[0]];        y2 = ytab[sy2[0]];        /* first line BGR0 */        *(unsigned int *)(d1+0) =            (CLIP8[y1 + buv] << 16)|            (CLIP8[y1 + guv] << 8) |            (CLIP8[y1 + ruv] << 0);        /* second line BGR0 */        *(unsigned int *)(d2+0) =            (CLIP8[y2 + buv] << 16)|            (CLIP8[y2 + guv] << 8) |            (CLIP8[y2 + ruv] << 0);        sy1 += 1; sy2 += 1;        su += 1; sv += 1;           /* shift luma !!! */        d1 += BPP4; d2 += BPP4;        dx --;    }    /* convert all integral 2x2 blocks: */    for (i = 0; i < dx/2; i ++) {        buv = butab[su[0]] + bvtab[sv[0]];        guv = gutab[su[0]] + gvtab[sv[0]];        ruv = rutab[su[0]] + rvtab[sv[0]];        y1 = ytab[sy1[0]];        y2 = ytab[sy2[0]];        /* first line BGR0 */        *(unsigned int *)(d1+0) =            (CLIP8[y1 + buv] << 16)|            (CLIP8[y1 + guv] << 8) |            (CLIP8[y1 + ruv] << 0);        /* second line BGR0 */        *(unsigned int *)(d2+0) =            (CLIP8[y2 + buv] << 16)|            (CLIP8[y2 + guv] << 8) |            (CLIP8[y2 + ruv] << 0);        y1 = ytab[sy1[1]];        y2 = ytab[sy2[1]];        /* first line BGR0 */        *(unsigned int *)(d1+BPP4) =            (CLIP8[y1 + buv] << 16)|            (CLIP8[y1 + guv] << 8) |            (CLIP8[y1 + ruv] << 0);        /* second line BGR0 */        *(unsigned int *)(d2+BPP4) =            (CLIP8[y2 + buv] << 16)|            (CLIP8[y2 + guv] << 8) |            (CLIP8[y2 + ruv] << 0);        /* next 2x2 block */        sy1 += 2; sy2 += 2;        su += 1; sv += 1;        d1 += 2*BPP4; d2 += 2*BPP4;    }    /* convert last 2x1 block: */    if (dx & 1) {        buv = butab[su[0]] + bvtab[sv[0]];        guv = gutab[su[0]] + gvtab[sv[0]];        ruv = rutab[su[0]] + rvtab[sv[0]];        y1 = ytab[sy1[0]];        y2 = ytab[sy2[0]];        /* first line BGR0 */        *(unsigned int *)(d1+0) =            (CLIP8[y1 + buv] << 16)|            (CLIP8[y1 + guv] << 8) |            (CLIP8[y1 + ruv] << 0);        /* second line BGR0 */        *(unsigned int *)(d2+0) =            (CLIP8[y2 + buv] << 16)|            (CLIP8[y2 + guv] << 8) |            (CLIP8[y2 + ruv] << 0);    }}static void dblineI420toRGB24 (unsigned char *d1, unsigned char *d2, int dest_x,    unsigned char *sy1, unsigned char *sy2, unsigned char *su, unsigned char *sv,    int src_x, int dx){    /* check if we can use a fast 32-bit code: */    if (LITTLE_ENDIAN && !((src_x ^ dest_x) & 1)) {        /* aligned input/output on little-endian machine: */        register int y11, y12, y13, y14, y21, y22, y23, y24;        register int rv, rv2, guv, guv2, bu, bu2;        register int i;        /* convert first 2x1 block: */        if (dest_x & 1) {            bu = butab[su[0]];            guv = gutab[su[0]] + gvtab[sv[0]];            rv = rvtab[sv[0]];            y11 = ytab[sy1[0]];            y21 = ytab[sy2[0]];            /* first line BGR: */            d1[0] = CLIP8[y11 + bu];            d1[1] = CLIP8[y11 + guv];            d1[2] = CLIP8[y11 + rv];            /* second line BGR: */            d2[0] = CLIP8[y21 + bu];            d2[1] = CLIP8[y21 + guv];            d2[2] = CLIP8[y21 + rv];            sy1 += 1; sy2 += 1;         

⌨️ 快捷键说明

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