nt9856x/code/application/source/cardv/SrcCode/UI/UIBuffer.c
2023-03-28 15:07:53 +08:00

222 lines
6.0 KiB
C
Executable File

#include "PrjInc.h"
#include "GxGfx/GxGfx.h"
#include "GxDisplay.h"
#define THIS_DBGLVL 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER
///////////////////////////////////////////////////////////////////////////////
#define __MODULE__ UIBuf
#define __DBGLVL__ ((THIS_DBGLVL>=PRJ_DBG_LVL)?THIS_DBGLVL:PRJ_DBG_LVL)
#define __DBGFLT__ "*" //*=All, [mark]=CustomClass
#include <kwrap/debug.h>
////////////////////////////////////////////////////////////////////////////////
#define LAYER_BUFFER_NUM 3
DC _gDisplay1_OSD1[LAYER_BUFFER_NUM];
#if (OSD2_FUNC == ENABLE)
DC _gDisplay1_OSD2[LAYER_BUFFER_NUM];
#endif
#if (VDO_BM_FUNC == ENABLE)
IMG_BUF _gDisplay1_VDO1[LAYER_BUFFER_NUM];
IMG_BUF _gDisplay1_VDO2[LAYER_BUFFER_NUM];
#endif
#if (DISPLAY2_FUNC == ENABLE)
DC _gDisplay2_OSD1[LAYER_BUFFER_NUM];
IMG_BUF _gDisplay2_VDO1[LAYER_BUFFER_NUM];
#endif
void *UIDisplay1_OSD1_BM_get(UINT32 buffer_id)
{
return (void *) & (_gDisplay1_OSD1[buffer_id]);
}
#if (OSD2_FUNC == ENABLE)
void *UIDisplay1_OSD2_BM_get(UINT32 buffer_id)
{
return (void *) & (_gDisplay1_OSD2[buffer_id]);
}
#endif
#if (DISPLAY2_FUNC == ENABLE)
void *UIDisplay2_OSD1_BM_get(UINT32 buffer_id)
{
return (void *) & (_gDisplay2_OSD1[buffer_id]);
}
#endif
UINT32 UIDisplay_OSD_BM_calcsize(LAYER_INIT *pLayerInit)
{
UINT16 fmt = 0;
switch (pLayerInit->uiPxlfmt) {
case DISP_PXLFMT_INDEX8:
fmt = PXLFMT_INDEX8;
break;
case DISP_PXLFMT_ARGB8565_PK:
fmt = PXLFMT_RGBA5658_PK;
break;
//case DISP_PXLFMT_RGBA5654_PK: fmt = PXLFMT_RGBA5654_PK; break;
case DISP_PXLFMT_ARGB8888_PK:
fmt = PXLFMT_RGBA8888_PK;
break;
}
if(pLayerInit->uiSwapEffect & SWAPEFFECT_XY)
return GxGfx_CalcDCMemSize(
pLayerInit->uiHeight, pLayerInit->uiWidth, TYPE_FB, fmt);
else
return GxGfx_CalcDCMemSize(
pLayerInit->uiWidth, pLayerInit->uiHeight, TYPE_FB, fmt);
}
void UIDisplay_OSD_BM_attach(void *buf, LAYER_INIT *pLayerInit, UINT32 buffer_id)
{
if(pLayerInit->uiSwapEffect & SWAPEFFECT_XY)
GxGfx_AttachDC((DC *)buf, TYPE_FB,
pLayerInit->uiPxlfmt, pLayerInit->uiHeight, pLayerInit->uiWidth, 0, (UINT8 *)(pLayerInit->pBufAddr[buffer_id]), 0, 0);
else
GxGfx_AttachDC((DC *)buf, TYPE_FB,
pLayerInit->uiPxlfmt, pLayerInit->uiWidth, pLayerInit->uiHeight, 0, (UINT8 *)(pLayerInit->pBufAddr[buffer_id]), 0, 0);
}
void UIDisplay_OSD_BM_detach(void *buf)
{
GxGfx_DetachDC((DC *)buf);
}
void UIDisplay_OSD_BM_copy(void *buf1, void *buf2,UINT32 uiRop, UINT32 uiParam)
{
GxGfx_Copy((DC *)buf1, (DC *)buf2);
}
void UIDisplay_OSD_BM_clear(void *buf)
{
GxGfx_Clear((DC *)buf);
}
#if (VDO_BM_FUNC == ENABLE)
void *UIDisplay1_VDO1_BM_get(UINT32 buffer_id)
{
return (void *) & (_gDisplay1_VDO1[buffer_id]);
}
void *UIDisplay1_VDO2_BM_get(UINT32 buffer_id)
{
return (void *) & (_gDisplay1_VDO2[buffer_id]);
}
#endif
#if (DISPLAY2_FUNC == ENABLE)
void *UIDisplay2_VDO1_BM_get(UINT32 buffer_id)
{
return (void *) & (_gDisplay2_VDO1[buffer_id]);
}
#endif
#if (VDO_BM_FUNC == ENABLE)
UINT32 UIDisplay_VDO_BM_calcsize(LAYER_INIT *pLayerInit)
{
UINT16 fmt = 0;
switch (pLayerInit->uiPxlfmt) {
case DISP_PXLFMT_YUV422_PK:
fmt = GX_IMAGE_PIXEL_FMT_YUV422_PACKED;
break;
case DISP_PXLFMT_YUV420_PK:
fmt = GX_IMAGE_PIXEL_FMT_YUV420_PACKED;
break;
}
return GxImg_CalcRequireSize
(pLayerInit->uiWidth, pLayerInit->uiHeight, fmt, ALIGN_CEIL_4(pLayerInit->uiWidth));
}
void UIDisplay_VDO_BM_attach(void *buf, LAYER_INIT *pLayerInit, UINT32 buffer_id)
{
UINT16 fmt = 0;
switch (pLayerInit->uiPxlfmt) {
case DISP_PXLFMT_YUV422_PK:
fmt = GX_IMAGE_PIXEL_FMT_YUV422_PACKED;
break;
case DISP_PXLFMT_YUV420_PK:
fmt = GX_IMAGE_PIXEL_FMT_YUV420_PACKED;
break;
}
GxImg_InitBuf((IMG_BUF *)buf,
pLayerInit->uiWidth, pLayerInit->uiHeight, fmt, ALIGN_CEIL_4(pLayerInit->uiWidth), pLayerInit->pBufAddr[buffer_id], pLayerInit->uiBufSize);
}
void UIDisplay_VDO_BM_detach(void *buf)
{
memset(buf, 0x00, sizeof(IMG_BUF));
}
void UIDisplay_VDO_BM_copy(void *buf1, void *buf2,UINT32 uiRop, UINT32 uiParam)
{
GxImg_CopyData((IMG_BUF *)buf1, REGION_MATCH_IMG, (IMG_BUF *)buf2, REGION_MATCH_IMG);
}
void UIDisplay_VDO_BM_clear(void *buf)
{
GxImg_FillData((IMG_BUF *)buf, REGION_MATCH_IMG, COLOR_YUV_BLACK);
}
#endif
LAYER_BUFMAN UIDisplay1_OSD1_BM = {
UIDisplay1_OSD1_BM_get,
UIDisplay_OSD_BM_calcsize,
UIDisplay_OSD_BM_attach,
UIDisplay_OSD_BM_detach,
UIDisplay_OSD_BM_copy,
UIDisplay_OSD_BM_clear,
};
#if (OSD2_FUNC == ENABLE)
LAYER_BUFMAN UIDisplay1_OSD2_BM = {
UIDisplay1_OSD2_BM_get,
UIDisplay_OSD_BM_calcsize,
UIDisplay_OSD_BM_attach,
UIDisplay_OSD_BM_detach,
UIDisplay_OSD_BM_copy,
UIDisplay_OSD_BM_clear,
};
#endif
#if (VDO_BM_FUNC == ENABLE)
LAYER_BUFMAN UIDisplay1_VDO1_BM = {
UIDisplay1_VDO1_BM_get,
UIDisplay_VDO_BM_calcsize,
UIDisplay_VDO_BM_attach,
UIDisplay_VDO_BM_detach,
UIDisplay_VDO_BM_copy,
UIDisplay_VDO_BM_clear,
};
LAYER_BUFMAN UIDisplay1_VDO2_BM = {
UIDisplay1_VDO2_BM_get,
UIDisplay_VDO_BM_calcsize,
UIDisplay_VDO_BM_attach,
UIDisplay_VDO_BM_detach,
UIDisplay_VDO_BM_copy,
UIDisplay_VDO_BM_clear,
};
#endif
#if (DISPLAY2_FUNC == ENABLE)
LAYER_BUFMAN UIDisplay2_OSD1_BM = {
UIDisplay2_OSD1_BM_get,
UIDisplay_OSD_BM_calcsize,
UIDisplay_OSD_BM_attach,
UIDisplay_OSD_BM_detach,
UIDisplay_OSD_BM_copy,
UIDisplay_OSD_BM_clear,
};
LAYER_BUFMAN UIDisplay2_VDO1_BM = {
UIDisplay2_VDO1_BM_get,
UIDisplay_VDO_BM_calcsize,
UIDisplay_VDO_BM_attach,
UIDisplay_VDO_BM_detach,
UIDisplay_VDO_BM_copy,
UIDisplay_VDO_BM_clear,
};
#endif
void UI_RegisterBuf(void)
{
GxDisplay_RegBufMan(DOUT1 | LAYER_OSD1, &UIDisplay1_OSD1_BM);
#if (OSD2_FUNC == ENABLE)
GxDisplay_RegBufMan(DOUT1 | LAYER_OSD2, &UIDisplay1_OSD2_BM);
#endif
#if (VDO_BM_FUNC == ENABLE)
GxDisplay_RegBufMan(DOUT1 | LAYER_VDO1, &UIDisplay1_VDO1_BM);
GxDisplay_RegBufMan(DOUT1 | LAYER_VDO2, &UIDisplay1_VDO2_BM);
#endif
#if (DISPLAY2_FUNC == ENABLE)
GxDisplay_RegBufMan(DOUT2 | LAYER_OSD1, &UIDisplay2_OSD1_BM);
GxDisplay_RegBufMan(DOUT2 | LAYER_OSD2, 0);
GxDisplay_RegBufMan(DOUT2 | LAYER_VDO1, &UIDisplay2_VDO1_BM);
GxDisplay_RegBufMan(DOUT2 | LAYER_VDO2, 0);
#endif
}