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

344 lines
9.9 KiB
C
Executable File

/*
System UI Callback
System Callback for UI Module.
@file SysUICB.c
@ingroup mIPRJSYS
@note None
Copyright Novatek Microelectronics Corp. 2010. All rights reserved.
*/
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
#include "UIWnd/UIFlow.h"
#include "GxDisplay.h"
#include "UIGraphics.h"
#include "UIBuffer.h"
#include "sys_mempool.h"
//---------------------SysUICB Debug Definition -----------------------------
///////////////////////////////////////////////////////////////////////////////
#define __MODULE__ SysUICB
#define __DBGLVL__ 2
#define __DBGFLT__ "*" //*=All, [mark]=CustomClass
#include <kwrap/debug.h>
///////////////////////////////////////////////////////////////////////////////
//---------------------SysUICB Global Variables -----------------------------
extern VControl *gUxCtrlTypeList[];
extern VControl *gAppCtrlTypeList[];
//---------------------SysUICB Prototype Declaration -----------------------
//---------------------SysUICB Public API ----------------------------------
//---------------------SysUICB Private API ----------------------------------
///////////////////////////////////////////////////////////////////////////////
void UI_CustomDrawShowImage(UIScreen ScreenObj, ITEM_IMAGE *pShowObj);
#define icst_prom0 103
#define icst_prom1 88
#define icst_prom2 183
#define icst_prom3 198
#define YUV_GET_R(y,u,v) ( ((INT32)y) + ((INT32)(v)-128) + ((icst_prom0*((INT32)(v)-128))>>8) )
#define YUV_GET_G(y,u,v) ( ((INT32)y) - ((icst_prom1*((INT32)(u)-128))>>8) - ((icst_prom2*((INT32)(v)-128))>>8) )
#define YUV_GET_B(y,u,v) ( ((INT32)y) + ((INT32)(u)-128) + ((icst_prom3*((INT32)(u)-128))>>8) )
#define CLAMP_TO_BYTE(v) (((v) < 0)?0:((v>255)?255:(v)))
#define YUV_GET_RGB(y,u,v,r,g,b) \
{ \
r = YUV_GET_R(y,u,v); r = CLAMP_TO_BYTE(r); \
g = YUV_GET_G(y,u,v); g = CLAMP_TO_BYTE(g); \
b = YUV_GET_B(y,u,v); b = CLAMP_TO_BYTE(b); \
}
#if (DISPLAY_OSD_FMT == DISP_PXLFMT_ARGB8565_PK)
PALETTE_ITEM gDemoKit_Palette_RGBA5658[256];
UINT32 COLOR_YUV_2_RGB565(UINT32 yuv, UINT32 a)
{
INT32 r, g, b;
UINT32 argb8565;
INT32 y, u, v;
v = COLOR_YUVA_GET_V(yuv);
u = COLOR_YUVA_GET_U(yuv);
y = COLOR_YUVA_GET_Y(yuv);
YUV_GET_RGB(y, u, v, r, g, b);
argb8565 = COLOR_MAKE_RGB565(r, g, b, a);
return argb8565;
}
void PALETTE_PREPARE_DATA(void)
{
UINT32 i = 0;
for (i = 0; i < 256; i++) {
gDemoKit_Palette_RGBA5658[i] = COLOR_YUV_2_RGB565(gDemoKit_Palette_Palette[i], 0xff);
//DBG_DUMP("rgba5658 = 0x%08x\r\n", gDemoKit_Palette_RGBA5658[i]);
}
gDemoKit_Palette_RGBA5658[0] = COLOR_YUV_2_RGB565(gDemoKit_Palette_Palette[0], 0x00);
}
UINT32 ColorTable[2] = {(UINT32)gDemoKit_Palette_RGBA5658, (UINT32)gDemoKit_Palette_RGBA5658};
#elif (DISPLAY_OSD_FMT == DISP_PXLFMT_ARGB8888_PK)
PALETTE_ITEM gDemoKit_Palette_RGBA8888[256];
UINT32 ColorTable[2] = {(UINT32)gDemoKit_Palette_RGBA8888, (UINT32)gDemoKit_Palette_RGBA8888};
UINT32 COLOR_YUV_2_RGB888(UINT32 yuv, UINT32 a)
{
INT32 r, g, b;
UINT32 argb888;
INT32 y, u, v;
v = COLOR_YUVA_GET_V(yuv);
u = COLOR_YUVA_GET_U(yuv);
y = COLOR_YUVA_GET_Y(yuv);
YUV_GET_RGB(y, u, v, r, g, b);
argb888 = COLOR_MAKE_RGBA(r, g, b, a);
return argb888;
}
void PALETTE_PREPARE_DATA(void)
{
UINT32 i = 0;
for (i = 0; i < 256; i++) {
gDemoKit_Palette_RGBA8888[i] = COLOR_YUV_2_RGB888(gDemoKit_Palette_Palette[i], 0xff);
}
gDemoKit_Palette_RGBA8888[0] = COLOR_YUV_2_RGB888(gDemoKit_Palette_Palette[0], 0x00);
}
#elif (DISPLAY_OSD_FMT == DISP_PXLFMT_ARGB4444_PK)
PALETTE_ITEM gDemoKit_Palette_RGBA4444[256];
UINT32 ColorTable[2] = {(UINT32)gDemoKit_Palette_RGBA4444, (UINT32)gDemoKit_Palette_RGBA4444};
UINT32 COLOR_YUV_2_RGB444(UINT32 yuv, UINT32 a)
{
INT32 r, g, b;
UINT32 argb8565;
INT32 y, u, v;
v = COLOR_YUVA_GET_V(yuv);
u = COLOR_YUVA_GET_U(yuv);
y = COLOR_YUVA_GET_Y(yuv);
YUV_GET_RGB(y, u, v, r, g, b);
argb8565 = COLOR_MAKE_ARGB4444(r, g, b, a);
return argb8565;
}
void PALETTE_PREPARE_DATA(void)
{
UINT32 i = 0;
for (i = 0; i < 256; i++) {
gDemoKit_Palette_RGBA4444[i] = COLOR_YUV_2_RGB444(gDemoKit_Palette_Palette[i], 0xff);
}
gDemoKit_Palette_RGBA4444[0] = COLOR_YUV_2_RGB444(gDemoKit_Palette_Palette[0], 0x00);
}
#elif (DISPLAY_OSD_FMT == DISP_PXLFMT_INDEX8)
UINT32 COLOR_YUV_2_RGB(UINT32 yuv)
{
INT32 r, g, b ,a;
UINT32 argb888;
INT32 y, u, v;
v = COLOR_YUVA_GET_V(yuv);
u = COLOR_YUVA_GET_U(yuv);
y = COLOR_YUVA_GET_Y(yuv);
a = COLOR_YUVA_GET_A(yuv);
YUV_GET_RGB(y, u, v, r, g, b);
argb888 = COLOR_MAKE_RGBA(r, g, b, a);
return argb888;
}
void PALETTE_PREPARE_DATA(void)
{
UINT32 i = 0;
PALETTE_ITEM gDemoKit_Palette_Index8[256];
for (i = 0; i < 256; i++) {
gDemoKit_Palette_Index8[i] = COLOR_YUV_2_RGB(gDemoKit_Palette_Palette[i]);
}
//copy convert palette to org palette table
memcpy((void *)gDemoKit_Palette_Palette,(void *)gDemoKit_Palette_Index8,sizeof(UINT32)*256);
}
#endif
/////////////////////////////////////////////////////////////////////////
//
// Customize Display Flow
//
/////////////////////////////////////////////////////////////////////////
//font table
FONT *UIFontTable[2] = {
#if (DRAM_SIZE_64MB_DISP_OFF==DISABLE)
(FONT *)gDemoKit_Font,
#endif
NULL
};
DC *pDrawDC = 0; //current draw buffer
DC DrawDC = {0};
void UI_GfxInit(void)
{
UINT32 uiPoolAddr =0;
//Initial all states, all buffers
DBG_FUNC_BEGIN("\r\n");
uiPoolAddr = mempool_gxgfx_temp;
////////////////////////////////////////////////////////////////
GxGfx_Config(CFG_STRING_BUF_SIZE, 256);
//Init Gfx
GxGfx_Init((UINT32 *)uiPoolAddr, POOL_SIZE_GFX_TEMP); //initial Graphics
//set default shape, text, image state for GxGfx
GxGfx_SetAllDefault();
//set custom image state for GxGfx
GxGfx_SetImageStroke(ROP_KEY, IMAGEPARAM_DEFAULT);
GxGfx_SetImageColor(IMAGEPALETTE_DEFAULT, IMAGEPARAM_DEFAULT);
#if (DRAM_SIZE_64MB_DISP_OFF==ENABLE)
GxGfx_SetImageTable((const IMAGE_TABLE *)NULL);
GxGfx_SetTextStroke((const FONT *)NULL, FONTSTYLE_NORMAL, SCALE_1X);
#else
GxGfx_SetImageTable((const IMAGE_TABLE *)gDemoKit_Image);
GxGfx_SetTextStroke((const FONT *)gDemoKit_Font, FONTSTYLE_NORMAL, SCALE_1X);
#endif
//set custom text state for GxGfx
GxGfx_SetTextColor(TEXTFORECOLOR1_DEFAULT, TEXTFORECOLOR2_DEFAULT, TEXTFORECOLOR3_DEFAULT);
GxGfx_SetTextStroke((const FONT *)gDemoKit_Font, FONTSTYLE_NORMAL, SCALE_1X);
GxGfx_SetStringTable((const STRING_TABLE *)Get_LanguageTable());
}
void UI_DispInit(void)
{
//Initial all states, all buffers
DBG_FUNC_BEGIN("\r\n");
UI_RegisterBuf();
////////////////////////////////////////////////////////////////
//Init UI show
UI_SetLayoutSize(TOOL_LAYOUT_W, TOOL_LAYOUT_H);
#if ((DISPLAY_OSD_FMT == DISP_PXLFMT_ARGB8565_PK)||(DISPLAY_OSD_FMT == DISP_PXLFMT_ARGB8888_PK)||(DISPLAY_OSD_FMT == DISP_PXLFMT_ARGB4444_PK))
Ux_SetShowObjFunc(CMD_Image, (SHOWOBJ_FUNC_PTR)UI_CustomDrawShowImage);
#endif
}
//Init renderer for UIControl show process
void UI_ControlShowInit(void)
{
DBG_FUNC_BEGIN("\r\n");
//set palette rendering-time switch table for Ux_Redraw()
//Init UI show resource
#if (DISPLAY_OSD_FMT == DISP_PXLFMT_ARGB8888_PK)
PALETTE_PREPARE_DATA();
Ux_SetPaletteTable((MAPPING_ITEM **)ColorTable);
Ux_SetGlobalColorKey(TRUE, COLOR_RGBA_GET_COLOR(gDemoKit_Palette_RGBA8888[0]));
#elif (DISPLAY_OSD_FMT == DISP_PXLFMT_ARGB8565_PK)
PALETTE_PREPARE_DATA();
Ux_SetPaletteTable((MAPPING_ITEM **)ColorTable);
Ux_SetGlobalColorKey(TRUE, COLOR_RGB565_GET_COLOR(gDemoKit_Palette_RGBA5658[0]));
#elif (DISPLAY_OSD_FMT == DISP_PXLFMT_ARGB4444_PK)
PALETTE_PREPARE_DATA();
Ux_SetPaletteTable((MAPPING_ITEM **)ColorTable);
Ux_SetGlobalColorKey(TRUE, COLOR_RGB565_GET_COLOR(gDemoKit_Palette_RGBA4444[0]));
#elif (DISPLAY_OSD_FMT == DISP_PXLFMT_INDEX8)
PALETTE_PREPARE_DATA();
Ux_SetPaletteTable(0);
#else //(DISPLAY_OSD_FMT == DISP_PXLFMT_INDEX4)
Ux_SetPaletteTable(0);
#endif
//set colormap rendering-time switch table for Ux_Redraw()
Ux_SetColorMapTable(0);
//set font switch rendering-time table for Ux_Redraw()
Ux_SetFontTable(UIFontTable);
//Init UI framework render object
#if (DRAM_SIZE_64MB_DISP_OFF==ENABLE)
Ux_SetRender(NULL);
Ux_SetDebugMsg(0);
#else
Ux_SetRender(&demoRender);
#endif
}
UINT32 UI_GetOSDSize(void)
{
UINT32 osd1_size = 0;
//UI - manage by UIDisplay, buffer is fixed memory after OS start
osd1_size =
ALIGN_CEIL_32(GxGfx_CalcDCMemSize(DISPLAY_OSD_W, DISPLAY_OSD_H, TYPE_FB, DISPLAY_OSD_FMT));
return osd1_size;
}
/////////////////////////////////////////////////////////////////////////////
void UI_CustomDrawShowImage(UIScreen ScreenObj, ITEM_IMAGE *pShowObj)
{
PALETTE_ITEM *pPalette = Ux_GetPaletteTable(0);
IMAGE * pImage=0;
UINT32 globalColorKey = 0;
UINT32 bEnableGlobalKey = FALSE;
if (pShowObj->Content != ICONID_NULL) {
GxGfx_SetImageLayout(pShowObj->uiLayout, pShowObj->uiAlignment);
Ux_GetGlobalColorKey(&bEnableGlobalKey,&globalColorKey);
pImage = (IMAGE *)GxGfx_GetImageID((UINT16)pShowObj->Content);
if(!pImage){
DBG_ERR("id %d is 0\r\n",pShowObj->Content);
return ;
}
if(pImage->dc.uiPxlfmt == PXLFMT_INDEX8){
if ((bEnableGlobalKey) && (pShowObj->uiBltROP == ROP_KEY))
GxGfx_SetImageStroke(ROP_KEY, globalColorKey);
else
GxGfx_SetImageStroke(pShowObj->uiBltROP, pShowObj->uiParamROP);
} else {
#if 0 //use UI tool choose imageEffect
//ARGB format,always transfer KEY to BLEND
if(pShowObj->uiBltROP == ROP_KEY){
pShowObj->uiBltROP = ROP_BLEND;
}
#endif
GxGfx_SetImageStroke(pShowObj->uiBltROP, pShowObj->uiParamROP);
}
if (pPalette == 0) {
GxGfx_SetImageColor(IMAGEPALETTE_DEFAULT, Ux_GetColorMapTable((UINT32)pShowObj->uiColorMapTable));
} else {
GxGfx_SetImageColor(pPalette, Ux_GetColorMapTable((UINT32)pShowObj->uiColorMapTable));
}
GxGfx_ImageInRect(((DC **)ScreenObj)[LAYER_OSD1], pShowObj->x1, pShowObj->y1, pShowObj->x2, pShowObj->y2, GxGfx_GetImageID((UINT16)pShowObj->Content));
}
}