📄 framebuf.c
字号:
/*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 + -