📄 osdcore.c
字号:
/**********************************************************************/
/*************** MTK CONFIDENTIAL & COPYRIGHTED ****************/
/*************** ****************/
/*************** $Modtime:: 04/07/28 11:27a $ ****************/
/*************** $Revision:: 18 $ ****************/
/*************** ****************/
/*************** Description : high level OSD ****************/
/*************** management module ****************/
/*************** Company : MediaTek Inc. ****************/
/*************** Programmer : Peter Huang ****************/
/**********************************************************************/
#define _OSDCORE_C_
#include "general.h"
#include "../../procdef.h"
#pragma NOAREGS
// *********************************************************************
// Local Define
// *********************************************************************
// *********************************************************************
// Normal playback used white board
// *********************************************************************
static code BYTE pbWbLayer1[] = {
WB_NORMAL_HEAD1, WB_NORMAL_HEAD2,
WB_NORMAL_PBC1, WB_NORMAL_PBC2, WB_NORMAL_VOL
};
static code BYTE pbWbLayer2[] = {
WB_OVERLAY_MSG1 /*, WB_OVERLAY_MSG2,
WB_OVERLAY_MSG3, WB_OVERLAY_MSG4*/
};
static code BYTE pbWbFsMenu[] = {
FSMENU_OSD_WBIDX_BASIC, FSMENU_OSD_WBIDX_SEC,
#ifdef PLAYER_FLMENU
FSMENU_INFO
#endif
};
#if 0
static code BYTE pbWbFullScr[] = {
WB_DGST_DISP1, WB_DGST_DISP1A,
WB_DGST_DISP2, WB_DGST_DISP2A,
WB_DGST_DISP3, WB_DGST_MENU
};
#endif
#define WB_LAYER1_NS TBL_SIZE(pbWbLayer1)
#define WB_LAYER2_NS TBL_SIZE(pbWbLayer2)
//#define WB_FULL_SCR_NS TBL_SIZE(pbWbFullScr)
#define WB_FSMENU_NS TBL_SIZE(pbWbFsMenu)
#define WB_ST_DISP_NS TBL_SIZE(pbWbStaticDisp)
typedef union {
BYTE Byte;
struct {
BYTE Wb1Hili:1;
BYTE Wb2Hili:1;
BYTE Wb3Hili:1;
BYTE Wb4Hili:1;
} Bit;
} uOsdLayer1Status;
typedef union {
BYTE Byte;
struct {
BYTE Wb1Hili:1;
BYTE Wb2Hili:1;
BYTE Wb3Hili:1;
BYTE Wb4Hili:1;
BYTE Line1:1;
BYTE Line2:1;
BYTE Line3:1;
BYTE Line4:1;
} Bit;
} uOsdLayer2Status;
// *********************************************************************
// For static display WB
// *********************************************************************
// note the sequence is from layer low to layer high
static code BYTE pbWbStaticDisp[] = {
#ifdef PLAYER_ZOOMIN_INDICATOR
WB_ZOOM_BR,
#endif
#ifdef SPTM_SUPPORT
WB_NORMAL_SPTM,
#endif
WB_INDEX_MAX
};
static BYTE bRecallStDispWB(void) large
{
// note the recall sequence is from high to low
#ifdef SPTM_SUPPORT
if (fgIsEqShow())
{
vCreateWBEx(WB_NORMAL_SPTM);
vEnableWB(WB_NORMAL_SPTM);
return (OSD_WB_SPECTRUM);
}
else
{
vDeleteWB(WB_NORMAL_SPTM);
}
#endif
#ifdef PLAYER_ZOOMIN_INDICATOR
if (fgIsZoomBrShow())
{
vCreateWBEx(WB_ZOOM_BR);
vEnableWB(WB_ZOOM_BR);
vZoomBrUpdate();
return (OSD_WB_ZOOM_BR);
}
else
{
vDeleteWB(WB_ZOOM_BR);
}
#endif /* PLAYER_ZOOMIN_INDICATOR */
return (OSD_WB_NORMAL);
}
#ifdef WB_ALLOC_MIN
// *********************************************************************
// Function : void vDisableWB(BYTE bWbIdx) large
// Description :
// Parameter :
// Return : None
// *********************************************************************
void vDisableWB(BYTE bWBIndex) large
{
#ifdef RS232_WB_DEBUG
DBGLogS(" vDisableWB WB ");
DBGLogB(bWBIndex,0xff,0xff,0xff);
DBGLogS("\n");
#endif
switch(bWBIndex)
{
case WB_NORMAL_HEAD1:
case WB_NORMAL_HEAD2:
case WB_NORMAL_PBC1:
case WB_NORMAL_PBC2:
case WB_OVERLAY_MSG1:
case WB_NORMAL_VOL:
vWBDisable(bWBIndex);
break;
default:
vDeleteWB(bWBIndex);
break;
}
}
#endif // WB_ALLOC_MIN
// *********************************************************************
// Function : void vCreateWBEx(BYTE bWbIdx) large
// Description :
// Parameter :
// Return : None
// *********************************************************************
void vCreateWBEx(BYTE bWbIdx) large
{
BYTE bBlendLvl;
extern xdata DWRD _dCreatedWB;
if (_dCreatedWB & (0x01L << bWbIdx))
return;
#ifdef RS232_WB_DEBUG
DBGLogS(" vCreateWBEx WB ");
DBGLogB(bWbIdx,0xff,0xff,0xff);
DBGLogS("\n");
#endif
#ifdef OSD_TRANSPARENT_BG
bBlendLvl = BLEND_1;
#else
bBlendLvl = BLEND_2;
#endif
switch(bWbIdx)
{
case WB_NORMAL_HEAD1:
#ifdef ALL_WB_USE_TRUECOLOR
vCreateWB(bWbIdx, TRUE);
vSetWBTcColor(bWbIdx);
#else
vCreateWB(bWbIdx, FALSE);
#endif
#ifdef FONT_NO_BORDER
vSetMsgCol4(bWbIdx, 0, 1, 1, 3);
#else
#ifdef USE_ONE_BIT_WB
vSetMsgCol2(bWbIdx, 0, 1);
#else
vSetMsgCol4(bWbIdx, 0, 1, 2, 3);
#endif
#endif
#ifdef NUI_OSD_STYLE
#ifdef ALL_WB_USE_TRUECOLOR
vSetTcPal(bWbIdx, 1, bBlendLvl, TRUECOLOR_BLACK);
#else
vSetPal(bWbIdx, 1, bBlendLvl, COLOR_BLACK);
#endif
#else
#ifdef ALL_WB_USE_TRUECOLOR
vSetTcPal(bWbIdx, 1, BLEND_0, TRUECOLOR_BLACK); //osdtest
vSetTcPal(bWbIdx, 2, BLEND_3, TRUECOLOR_BLACK);
#else
vSetPal(bWbIdx, 1, BLEND_0, COLOR_BLACK);
vSetPal(bWbIdx, 2, BLEND_3, COLOR_BLACK);
#endif
#endif
#ifndef USE_ONE_BIT_WB
vSetTransEn(bWbIdx, 0);
#endif
break;
case WB_NORMAL_HEAD2:
#ifdef ALL_WB_USE_TRUECOLOR
vCreateWB(bWbIdx, TRUE);
vSetWBTcColor(bWbIdx);
#else
vCreateWB(bWbIdx, FALSE);
#endif
#ifdef FONT_NO_BORDER
vSetMsgCol4(bWbIdx, 0, 1, 1, 3);
#else
#ifdef USE_ONE_BIT_WB
vSetMsgCol2(bWbIdx, 0, 1);
#else
vSetMsgCol4(bWbIdx, 0, 1, 2, 3);
#endif
#endif
#ifdef NUI_OSD_STYLE
#ifdef ALL_WB_USE_TRUECOLOR
vSetTcPal(bWbIdx, 1, BLEND_0, TRUECOLOR_BLACK); //osdtest
vSetTcPal(bWbIdx, 2, BLEND_3, TRUECOLOR_BLACK);
#else
vSetPal(bWbIdx, 1, BLEND_0, COLOR_BLACK);
vSetPal(bWbIdx, 2, BLEND_3, COLOR_BLACK);
#endif
#else
#ifdef ALL_WB_USE_TRUECOLOR
vSetTcPal(bWbIdx, 1, bBlendLvl, TRUECOLOR_BLACK);
#else
vSetPal(bWbIdx, 1, bBlendLvl, COLOR_BLACK);
#endif
#endif
#ifndef USE_ONE_BIT_WB
vSetTransEn(bWbIdx, 0);
#endif
break;
case WB_OVERLAY_MSG1:
// case WB_OVERLAY_MSG2:
#ifdef ALL_WB_USE_TRUECOLOR
vCreateWB(bWbIdx, TRUE);
vSetWBTcColor(bWbIdx);
#else
vCreateWB(bWbIdx, FALSE);
#endif
#ifdef FONT_NO_BORDER
vSetMsgCol4(bWbIdx, 0, 1, 1, 3);
#else
#ifdef USE_ONE_BIT_WB
vSetMsgCol2(bWbIdx, 0, 1);
#else
vSetMsgCol4(bWbIdx, 0, 1, 2, 3);
#endif
#endif
#ifndef USE_ONE_BIT_WB
vSetTransEn(bWbIdx, 0);
#endif
break;
case WB_NORMAL_PBC1:
case WB_NORMAL_PBC2:
#ifdef ALL_WB_USE_TRUECOLOR
vCreateWB(bWbIdx, TRUE);
vSetWBTcColor(bWbIdx);
#else
vCreateWB(bWbIdx, FALSE);
#endif
#ifdef FONT_NO_BORDER
vSetMsgCol4(bWbIdx, 0, 1, 1, 3);
#else
#ifdef USE_ONE_BIT_WB
vSetMsgCol2(bWbIdx, 0, 1);
#else
vSetMsgCol4(bWbIdx, 0, 1, 2, 3);
#endif
#endif
#ifndef USE_ONE_BIT_WB
vSetTransEn(bWbIdx, 0);
#endif
#ifdef ALL_WB_USE_TRUECOLOR
vSetTcPal(bWbIdx, 1, BLEND_0, TRUECOLOR_BLACK); //osdtest
vSetTcPal(bWbIdx, 2, BLEND_3, TRUECOLOR_BLACK);
#else
vSetPal(bWbIdx, 1, BLEND_0, COLOR_BLACK);
vSetPal(bWbIdx, 2, BLEND_3, COLOR_BLACK);
#endif
break;
/*
case WB_OVERLAY_MSG3:
case WB_OVERLAY_MSG4:
#ifdef ALL_WB_USE_TRUECOLOR
vCreateWB(bWbIdx, TRUE);
vSetWBTcColor(bWbIdx);
#else
vCreateWB(bWbIdx, FALSE);
#endif
#ifdef FONT_NO_BORDER
vSetMsgCol4(bWbIdx, 0, 1, 1, 3);
#else
vSetMsgCol4(bWbIdx, 0, 1, 2, 3);
#endif
vSetTransEn(bWbIdx, 0);
break;
case WB_NORMAL_SPTM:
vCreateWB(bWbIdx, TRUE);
vSetWBTcColor(bWbIdx);
break;
case WB_ZOOM_BR:
#ifdef ALL_WB_USE_TRUECOLOR
vCreateWB(bWbIdx, TRUE);
vSetWBTcColor(bWbIdx);
vSetTransEn(bWbIdx,0);
#else
vCreateWB(bWbIdx, FALSE);
#endif
break;
*/
case WB_NORMAL_VOL:
#ifdef ALL_WB_USE_TRUECOLOR
vCreateWB(bWbIdx, TRUE);
vSetWBTcColor(bWbIdx);
vSetTcPal(bWbIdx, 1, BLEND_2, TRUECOLOR_BLACK);
vSetTcPal(bWbIdx, 2, BLEND_2, TRUECOLOR_BLACK);
#else
vCreateWB(bWbIdx, FALSE);
vSetPal(bWbIdx, 1, BLEND_2, 0);
#endif
#ifdef FONT_NO_BORDER
vSetMsgCol4(bWbIdx, 0, 1, 1, 3);
#else
#ifdef USE_ONE_BIT_WB
vSetMsgCol2(bWbIdx, 0, 1);
#else
vSetMsgCol4(bWbIdx, 0, 1, 2, 3);
#endif
#endif
#ifndef USE_ONE_BIT_WB
vSetTransEn(bWbIdx, 0);
#endif
break;
case FSMENU_INFO:
vCreateWB(bWbIdx, TRUE);
vSetWBTcColor(bWbIdx);
vSetMsgCol4(bWbIdx, 0, 0, 3, 2);
vSetInputMsgCol4(bWbIdx, 0, 4, 4, 2);
#ifdef DATA_DISC_CDFS_SUPPORT
#ifdef CDG_SUPPORT
if(bSharedInfo(SI_CDG_DISC) == SV_ON)
{
vEnableWB(FSMENU_INFO);
}
#endif
#endif
break;
case FSMENU_OSD_WBIDX_BASIC:
#ifdef DATA_DISC_CDFS_SUPPORT
#ifdef CDG_SUPPORT
if((bSharedInfo(SI_CDG_DISC) == SV_ON) &&
((bSharedInfo(SI_PBC_STATE) == SV_PLAY)||(bSharedInfo(SI_PBC_STATE) == SV_PAUSE))) //windy
{
break;
}
#endif
#endif
vCreateWB(bWbIdx, TRUE);
vSetWBTcColor(bWbIdx);
vSetMsgCol4(bWbIdx, 0, 0, 3, 2);
#ifdef DATA_DISC_CDFS_SUPPORT
#ifdef CDG_SUPPORT
if(bSharedInfo(SI_CDG_DISC) == SV_ON)
{
vEnableWB(FSMENU_OSD_WBIDX_BASIC);
}
#endif
#endif
break;
case FSMENU_OSD_WBIDX_SEC:
#ifdef DATA_DISC_CDFS_SUPPORT
#ifdef CDG_SUPPORT
if((bSharedInfo(SI_CDG_DISC) == SV_ON) &&
(bSharedInfo(SI_PBC_STATE) == SV_PLAY))
{
break;
}
#endif
#endif
vCreateWB(bWbIdx, TRUE);
vSetWBTcColor(bWbIdx);
vSetTransEn(bWbIdx, 0);
break;
//case FSMENU_OSD_WBIDX_THIRD:
//case WB_VRMT_ITEM:
//case WB_SETUP_HEAD:
//case WB_SETUP_ITEM:
//case WB_SETUP_MSG:
//case WB_SELMENU:
//case WB_SS:
//case WB_DGST_DISP1:
//case WB_DGST_DISP1A:
//case WB_DGST_DISP2:
//case WB_DGST_DISP2A:
//case WB_DGST_DISP3:
//case WB_DGST_DISP3A:
//case WB_DGST_MENU:
//case WB_GOTO_PANEL:
//case WB_GOTO_MENU:
//case WB_GOTO_PANEL_P:
//case WB_GOTO_MENU_P:
default:
#ifdef ALL_WB_USE_TRUECOLOR
vCreateWB(bWbIdx, TRUE);
vSetWBTcColor(bWbIdx);
#else
vCreateWB(bWbIdx, FALSE);
#endif
break;
}
}
// *********************************************************************
// Function : void vOsdCoreInit(void) large
// Description :
// Parameter :
// Return : None
// *********************************************************************
void vOsdCoreInit(void) large
{
BYTE i;
/* OSD core state flag setting */
vSetLayer2Change(FALSE);
_rOsdCore.fgRefreshNow = FALSE;
/* for HEAD wb line 1 */
vCreateWBEx(WB_NORMAL_HEAD1);
/* trick: assume init state is only in HEAD wb line 1 */
vOsdSetLang(bEepromReadByte(OSD_LANG_POSITION));
/* warrning, must sync with the code of the vShowInitState() */
i = bSharedInfo(SI_SRV_BOOT_STATE);
if (i == SV_SRV_BOOT_EJECT)
{
vOsdShowInitState(SV_TRAY_OPENING);
}
else if (i == SV_SRV_BOOT_LOAD)
{
if ((_bLastSyncUop != UOP_POWER) && (_bLastSyncUop != UOP_OPEN_CLOSE))
{
if (fgIsTrayInside())
{
vOsdShowInitState(SV_LOADING_DISC);
}
else
{
vOsdShowInitState(SV_TRAY_CLOSING);
}
}
}
else if (i == SV_SRV_BOOT_UPG)
{
}
else /* default state */
{
}
/* for HEAD wb line 2 */
vCreateWBEx(WB_NORMAL_HEAD2);
/* for MSG1 wb */
vCreateWBEx(WB_OVERLAY_MSG1);
//vCreateWBEx(WB_OVERLAY_MSG2);
/* for PBC wb */
vCreateWBEx(WB_NORMAL_PBC1);
vCreateWBEx(WB_NORMAL_PBC2);
/* for MSG2 wb */
#ifndef WB_ALLOC_MIN
//vCreateWBEx(WB_OVERLAY_MSG3);
//vCreateWBEx(WB_OVERLAY_MSG4);
#endif
/* for VOLUME wb */
vCreateWBEx(WB_NORMAL_VOL);
/* for SETUP wb */
#ifndef MTK_MENU
vCreateWB(WB_SETUP_ITEM, FALSE);
vCreateWB(WB_SETUP_HEAD, FALSE);
vCreateWB(WB_SETUP_MSG, FALSE);
#endif
/* for Screen Saver wb */
#ifdef SS_BMP
#ifndef PLAYER_NUI
vCreateWBEx(WB_SS);
#endif /* PLAYER_NUI */
#endif /* SS_BMP */
/* enable and disable WB */
#ifndef WB_ALLOC_MIN
vDisableWB(WB_OVERLAY_MSG1);
/*
vDisableWB(WB_OVERLAY_MSG2);
vDisableWB(WB_OVERLAY_MSG3);
vDisableWB(WB_OVERLAY_MSG4);
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -