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

📄 framebuf.c

📁 C语言编写的监控中心终端程序。基于GPRS上传收发数据功能
💻 C
📖 第 1 页 / 共 4 页
字号:

        /*rbhung 2002.09.24 For FrameBuffer Color */
        if(framebuffer_configuration == MEM_CONFIG_HIRES)
            fillPattern_HIRES(m, n, 0x82, 0x08, 0x20);
        else
            fillPattern(m, n, 0x80808080);
    }

    if(bitmask & FRAME_REF1)
    {
        int     m, n;

        fillPattern(REF1_LUMA_ROW_START, REF1_LUMA_ROW_END, 0x00000000);

        m = REF1_CHROMA_ROW_START;
        n = REF1_CHROMA_ROW_END;
        if(n <= m)
        {
            if(cd_type_loaded == CDROM)
                n = (492 - 45);                 //rbhung 2002.09.13 Avoid MP3 File Structure
            else
                n = 512;
        }

        /*rbhung 2002.09.24 For FrameBuffer Color */
        if(framebuffer_configuration == MEM_CONFIG_HIRES)
            fillPattern_HIRES(m, n, 0x82, 0x08, 0x20);
        else
            fillPattern(m, n, 0x80808080);
    }

    if(bitmask & FRAME_B)
    {
        int     m, n;

        fillPattern(BIDIR_LUMA_ROW_START, BIDIR_LUMA_ROW_END, 0);

        m = BIDIR_CHROMA_ROW_START;
        n = BIDIR_CHROMA_ROW_END;
        if(n <= m)
        {
            if(cd_type_loaded == CDROM)
                n = (492 - 45);                 //rbhung 2002.09.13 Avoid MP3 File Structure
            else
                n = 512;
        }

        /*rbhung 2002.09.24 For FrameBuffer Color */
        if(framebuffer_configuration == MEM_CONFIG_HIRES)
            fillPattern_HIRES(m, n, 0x82, 0x08, 0x20);
        else
            fillPattern(m, n, 0x80808080);
    }
    DMA_pop(0, 128);
    return 0;
}
#endif

/*
** cpyFrameBAll
**
** copy from one of the reference buffer to B-buffer
**
** oX,oY -> destination X,Y in B-buffer
** rY    -> start offset row of source frame
** lX,lY -> size of source frame
**
*/
static void cpyFrameBAll(int oX, int oY, int rY, int lX, int lY, int zoomX,
                                                 int zoomY)
{
#if CONFIG==CONFIG_COMBO_SVCD
    int     ox, oy, oyc, px;
    int     x, y;
    int     tog;
    int     ref_luma;
    int     ref_chroma;
    int     skip_row, row_count;

    skip_row = 0;
    row_count = 0;
    ref_luma = (rY) ? (REF1_LUMA) : (REF0_LUMA);
    ref_chroma = (rY) ? (REF1_CHROMA) : (REF0_CHROMA);

    if((cd_type_loaded == CDVCD20) || (cd_type_loaded == CDVCD11) ||
         (cd_type_loaded == CDVCD10))
    {
        oy = BIDIR_LUMA + oY;
        oyc = BIDIR_CHROMA + (oY >> 1);
    }
    else
    {
        oy = BIDIR_LUMA + oY * 2;
        oyc = BIDIR_CHROMA + (oY >> 1) * 2;
    }
    tog = 0;

    for(y = 0; y < lY; y += zoomY)
    {
        int     oy2;
        int     page_old = -1;

        row_count++;
        skip_row = 0;
        if(IsAVDDecodePAL())
        {
            if(row_count % 6 == 1)
                skip_row = 1;
            else
                skip_row = 0;
        }
        if(skip_row == 0)
        {

            /*
             ** luma
             */
            if((cd_type_loaded == CDVCD20) || (cd_type_loaded == CDVCD11) ||
                 (cd_type_loaded == CDVCD10))
            {
                ox = (oX & 0xffe0);
                px = (oX & 0x001f);
                oy2 = oy;
                if(ox >= 352)
                {
                    ox -= 352;
                    oy2++;
                }
            }
            else
            {
                ox = (oX & 0xffe0) + 480;
                px = (oX & 0x001f);
                oy2 = oy;
                if(ox >= 736)
                {
                    ox -= 256;
                    oy2++;
                }
            }

            DMA_load(VADDR_MODE_GLOBAL, oy2, ox, 32, 32);
            DMA_wait();
            for(x = 0; x < lX; x += zoomX)
            {
                int     page = x & 0xffe0;
                int     idx = x & 0x001f;

                if(page_old != page)
                {
                    DMA_load(VADDR_MODE_GLOBAL, y + ref_luma, page, 0, 32);
                    page_old = page;
                    DMA_wait();
                }
                dma_buf.b[32 + bitr_luma(px)] = dma_buf.b[bitr_luma(idx)];
                px++;
                if(px >= 32)
                {
                    DMA_save(VADDR_MODE_GLOBAL, oy2, ox, 32, 32);
                    px -= 32;
                    ox += 32;
                    if((cd_type_loaded == CDVCD20) || (cd_type_loaded == CDVCD11) ||
                         (cd_type_loaded == CDVCD10))
                    {
                        if(ox >= 352)
                        {
                            ox -= 352;
                            oy2++;
                        }
                    }
                    else
                    {
                        if(ox >= 736)
                        {
                            ox -= 256;
                            oy2++;
                        }
                    }
                    DMA_wait();
                    DMA_load(VADDR_MODE_GLOBAL, oy2, ox, 32, 32);
                    DMA_wait();
                }
            }
            if(px)
            {
                DMA_save(VADDR_MODE_GLOBAL, oy2, ox, 32, 32);
                DMA_wait();
            }
            if((cd_type_loaded == CDVCD20) || (cd_type_loaded == CDVCD11) ||
                 (cd_type_loaded == CDVCD10))
            {
                oy += 1;
            }
            else
            {
                oy += 2;
            }
            tog = !tog;
            if(tog)
                continue;

            /*
             ** chroma
             */
            page_old = -1;
            if((cd_type_loaded == CDVCD20) || (cd_type_loaded == CDVCD11) ||
                 (cd_type_loaded == CDVCD10))
            {
                ox = (oX & 0xffe0);
                px = (oX & 0x001f) >> 1;
                oy2 = oyc;
                if(ox >= 352)
                {
                    ox -= 352;
                    oy2++;
                }
            }
            else
            {
                ox = (oX & 0xffe0) + 480;
                px = (oX & 0x001f) >> 1;
                oy2 = oyc;
                if(ox >= 736)
                {
                    ox -= 256;
                    oy2++;
                }
            }
            DMA_load(VADDR_MODE_GLOBAL, oy2, ox, 32, 32);
            DMA_wait();
            for(x = 0; x < lX >> 1; x += zoomX)
            {
                int     page = x & 0xfff0;
                int     idx = x & 0x000f;

                if(page_old != page)
                {
                    DMA_load(VADDR_MODE_GLOBAL, ref_chroma + (y >> 1), page << 1, 0,
                                     32);
                    page_old = page;
                    DMA_wait();
                }
                dma_buf.s[16 + bitr_chroma(px)] = dma_buf.s[bitr_chroma(idx)];
                px++;
                if(px >= 16)
                {
                    DMA_save(VADDR_MODE_GLOBAL, oy2, ox, 32, 32);
                    px -= 16;
                    ox += 32;
                    if((cd_type_loaded == CDVCD20) || (cd_type_loaded == CDVCD11) ||
                         (cd_type_loaded == CDVCD10))
                    {
                        if(ox >= 352)
                        {
                            ox -= 352;
                            oy2++;
                        }
                    }
                    else
                    {
                        if(ox >= 736)
                        {
                            ox -= 256;
                            oy2++;
                        }
                    }
                    DMA_wait();
                    DMA_load(VADDR_MODE_GLOBAL, oy2, ox, 32, 32);
                    DMA_wait();
                }
            }
            if(px)
            {
                DMA_save(VADDR_MODE_GLOBAL, oy2, ox, 32, 32);
                DMA_wait();
            }
            if((cd_type_loaded == CDVCD20) || (cd_type_loaded == CDVCD11) ||
                 (cd_type_loaded == CDVCD10))
            {
                oyc += 1;
            }
            else
            {
                oyc += 2;
            }
        }
    }
    row_count = 0;
    skip_row = 0;
#endif
}


#if 0
/*
** cpyFrameBOne
**
** copy from one of the reference buffer to B-buffer
**
** oX,oY -> destination X,Y in B-buffer
** rY    -> start offset row of source frame
** lX,lY -> size of source frame
**
*/
static void cpyFrameBOne(int oX, int oY, int rY, int lX, int lY, int zoomX,
                                                 int zoomY)
{
    int     ox, oy, px;
    int     x, y;

    oy = oY * 2;
    for(y = 0; y < lY; y += zoomY)
    {
        int     oy2;
        int     page_old = -1;

        ox = (oX & 0xffe0) + 480;
        px = (oX & 0x001f);
        oy2 = oy;
        if(ox >= 736)
        {
            ox -= 256;
            oy2++;
        }
        DMA_load(VADDR_MODE_GLOBAL, oy2, ox, 32, 32);
        DMA_wait();
        for(x = 0; x < lX; x += zoomX)
        {
            int     page = x & 0xffe0;
            int     idx = x & 0x001f;

            if(page_old != page)
            {
                DMA_load(VADDR_MODE_GLOBAL, y + rY, page, 0, 32);
                page_old = page;
                DMA_wait();
            }
            dma_buf.b[32 + bitr_luma(px)] = dma_buf.b[bitr_luma(idx)];
            px++;
            if(px >= 32)
            {
                DMA_save(VADDR_MODE_GLOBAL, oy2, ox, 32, 32);
                px -= 32;
                ox += 32;
                if(ox >= 736)
                {
                    ox -= 256;
                    oy2++;
                }
                DMA_wait();
                DMA_load(VADDR_MODE_GLOBAL, oy2, ox, 32, 32);
                DMA_wait();
            }
        }
        if(px)
        {
            DMA_save(VADDR_MODE_GLOBAL, oy2, ox, 32, 32);
            DMA_wait();
        }
        oy += 2;
    }
}

/*
** FUNCTION
** cpyFrameBTwo
**
** DESCRIPTION
**
*/
static void cpyFrameBTwo(int oX, int oY, int rY, int lX, int lY, int zoomX,
                                                 int zoomY)
{
#if 0                                                       //bondy reduce
    int     ox, oy, oy2, px;
    int     x, y;

    oy = LUMA_ROW * 2 + oY * 2;
    for(y = 0; y < lY; y += zoomY)
    {
        int     page_old = -1;

        ox = ((oX & 0xfff0) << 1) + 480;
        px = oX & 0x000f;
        oy2 = oy;
        if(ox >= 736)
        {
            ox -= 256;
            oy2++;
        }
        DMA_load(VADDR_MODE_GLOBAL, oy2, ox, 32, 32);
        DMA_wait();
        for(x = 0; x < lX; x += zoomX)
        {
            int     page = x & 0xfff0;
            int     idx = x & 0x000f;

            if(page_old != page)
            {
                DMA_load(VADDR_MODE_GLOBAL, rY + LUMA_ROW + y, page << 1, 0, 32);
                page_old = page;
                DMA_wait();
            }
            dma_buf.s[16 + bitr_chroma(px)] = dma_buf.s[bitr_chroma(idx)];
            px++;
            if(px >= 16)
            {
                DMA_save(VADDR_MODE_GLOBAL, oy2, ox, 32, 32);
                px -= 16;
                ox += 32;
                if(ox >= 736)
                {
                    ox -= 256;
                    oy2++;
                }
                DMA_wait();
                DMA_load(VADDR_MODE_GLOBAL, oy2, ox, 32, 32);
                DMA_wait();
            }
        }
        if(px)
        {
            DMA_save(VADDR_MODE_GLOBAL, oy2, ox, 32, 32);
            DMA_wait();
        }
        oy += 2;
    }
#endif
}
#endif


void cpyFrameB(int oX, int oY, int refY, int lX, int lY, int zoomX, int zoomY)
{
#if CONFIG==CONFIG_COMBO_SVCD
    DMA_push(0, 64);

    cpyFrameBAll(oX, oY, refY, lX, lY, zoomX, zoomY);

    DMA_pop(0, 64);
#endif
}

/*
** FUNCTION
** SetupDigestBackground(void)
**
** DESCRIPTION
** fill framebuffer with specific color
*/
void SetupDigestBackground(void)
{
    int     m, n;

#if CONFIG==CONFIG_COMBO_VCD
    m = BIDIR_LUMA_ROW_START;
    n = BIDIR_LUMA_ROW_END;
    if(n <= m)
        n = 512;
    fillPattern(m, n, 0x23232323);

    m = BIDIR_CHROMA_ROW_START;
    n = BIDIR_CHROMA_ROW_END;
    if(n <= m)
        n = 512;
    fillPattern(m, n, 0x72d472d4);
#else
    if((cd_type_loaded == CDVCD20) || (cd_type_loaded == CDVCD11) ||
         (cd_type_loaded == CDVCD10))
    {
        m = MEM_VCD_BIDIR_LUMA_DEF;
        n = MEM_VCD_BIDIR_CHROMA_DEF;
        fillPattern(m, n, 0x23232323);

        m = MEM_VCD_BIDIR_CHROMA_DEF;
        n = MEM_VCD_BIDIR_CHROMA_DEF + 144;
        fillPattern(m, n, 0x72d472d4);
    }
    else
    {
        m = MEM_BIDIR_LUMA_DEF;
        n = MEM_BIDIR_CHROMA_DEF;
        fillPattern(m, n, 0x23232323);

        m = MEM_BIDIR_CHROMA_DEF;
        n = MEM_EVBYA_DEF;
        fillPattern(m, n, 0x72d472d4);
    }
#endif

    // psprintf(LineBuffer,"m= %04x, n= %04x\n",m,n);
    // epp_write_wait(LineBuffer);
}

/*bondy 890922*/
#if 0
void SetupNTSCBackground(void)
{
    int     m, n;

    m = LORESN_BIDIR_LUMA / 1024;
    n = LORESN_BIDIR_CHROMA / 1024;
    if(n <= m)
        n = 512;
    fillPattern(m, n, 0x23232323);

    m = LORESN_BIDIR_CHROMA / 1024;
    n = 512;
    if(n <= m)
        n = 512;
    fillPattern(m, n, 0xd472d472);
}

void SetupPALBackground(void)
{
#if 0                                                       //bondy reduce
    int     m, n;

    m = LORES_REF0_LUMA / 1024;
    n = LORES_REF0_CHROMA / 1024;
    if(n <= m)
        n = 512;
    fillPattern(m, n, 0x23232323);

    m = LORES_REF0_CHROMA / 1024;
    n = LORES_REF1_LUMA / 1024;
    if(n <= m)
        n = 512;
    fillPattern(m, n, 0xd472d472);
#endif
}
#endif
#if 0
void SetupColorBarBackground(void)
{
#if 0                                                       //bondy reduce
    int     m, n, i, j;
    int     testx, testy;
    int     l_color1 = 0xEBEBEBEB;
    int     l_color2 = 0xA2A2A2A2;
    int     l_color3 = 0x83838383;
    int     l_color4 = 0x70707070;
    int     l_color5 = 0x54545454;
    int     l_color6 = 0x41414141;
    int     l_color7 = 0x23232323;
    int     l_color8 = 0x10101010;

    int     c_color1 = 0x80808080;
    int     c_color2 = 0x2C8E2C8E;
    int     c_color3 = 0x9C2C9C2C;

⌨️ 快捷键说明

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