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

📄 colorcvt.c

📁 著名的 helix realplayer 基于手机 symbian 系统的 播放器全套源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
            (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);

        /* 2nd row: */
        y1 = ytab[sy1[1]];
        y2 = ytab[sy2[1]];

        /* first line BGR0 */
        *(unsigned int *)(d1+BPP4) =
            (CLIP8[y1 + bu])       |
            (CLIP8[y1 + guv] << 8) |
            (CLIP8[y1 + rv]  << 16);

        /* second line BGR0 */
        *(unsigned int *)(d2+BPP4) =
            (CLIP8[y2 + bu])       |
            (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 dblineI420toR

⌨️ 快捷键说明

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