📄 osdcore.c
字号:
/**********************************************************************/
/*************** MTK CONFIDENTIAL & COPYRIGHTED ****************/
/*************** ****************/
/*************** $Modtime:: 07/04/09 11:57a $ ****************/
/*************** $Revision:: 4 $ ****************/
/*************** ****************/
/*************** Description : high level OSD ****************/
/*************** management module ****************/
/*************** Company : MediaTek Inc. ****************/
/*************** Programmer : Peter Huang ****************/
/**********************************************************************/
#define _OSDCORE_C_
#include "general.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
};
static code BYTE pbWbFullScr[] = {
#ifdef HILI_USE_OSD
WB_DGST_HILI,
#endif
WB_DGST_DISP1, WB_DGST_DISP1A,
WB_DGST_DISP2, WB_DGST_DISP2A,
WB_DGST_DISP3, WB_DGST_MENU
};
#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);
vSptmDraw(bEqCurrType());
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);
// 20050607, PL00000259, sometimes SI_ZOOM_OFST_X are not updated yet, we should not call vZoomBrUpdate() now, or fgIsZoomBrShow() will be set to FALSE
if ((bSharedInfo(SI_ZOOM_OFST_X_HI) == 0xFF) || (bSharedInfo(SI_ZOOM_OFST_X_LO)==0xFF))
{
return (OSD_WB_ZOOM_BR);
}
//vZoomBrUpdate();//peiyu,050617,make no use
// Add it by Bright_liu 2005/10/05
if(fgZoomBrCheck())
{
vZoomBrUpdate2();
}
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
{
switch(bWBIndex)
{
case WB_NORMAL_HEAD1:
case WB_NORMAL_HEAD2:
case WB_NORMAL_PBC1:
case WB_NORMAL_PBC2:
vWBDisable(bWBIndex);
break;
default:
if (_rOsdStateCtx.bDynamicWB == bWBIndex)
_rOsdStateCtx.bDynamicWB = WB_INDEX_MAX;
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 BYTE _bCreatedWB[5];
if (_bCreatedWB[bWbIdx / 8] & (0x01 << (bWbIdx % 8)))
return;
#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
vSetMsgCol4(bWbIdx, 0, 1, 2, 3);
#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
vSetTransEn(bWbIdx, 0);
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
vSetMsgCol4(bWbIdx, 0, 1, 2, 3);
#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
vSetTransEn(bWbIdx, 0);
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
vSetMsgCol4(bWbIdx, 0, 1, 2, 3);
#endif
vSetTransEn(bWbIdx, 0);
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
vSetMsgCol4(bWbIdx, 0, 1, 2, 3);
#endif
vSetTransEn(bWbIdx, 0);
#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
vSetMsgCol4(bWbIdx, 0, 1, 2, 3);
#endif
vSetTransEn(bWbIdx, 0);
break;
case FSMENU_INFO:
vCreateWB(bWbIdx, TRUE);
vSetWBTcColor(bWbIdx);
vSetMsgCol4(bWbIdx, 0, 0, 3, 2);
vSetInputMsgCol4(bWbIdx, 0, 4, 4, 2);
break;
case FSMENU_OSD_WBIDX_BASIC:
vCreateWB(bWbIdx, TRUE);
vSetWBTcColor(bWbIdx);
vSetMsgCol4(bWbIdx, 0, 0, 3, 2);
break;
case FSMENU_OSD_WBIDX_SEC:
vCreateWB(bWbIdx, TRUE);
vSetWBTcColor(bWbIdx);
vSetTransEn(bWbIdx, 0);
break;
#ifdef HILI_USE_OSD
case WB_DGST_HILI:
vCreateWB(bWbIdx, TRUE);
vSetWBTcColor(bWbIdx);
vSetTransEn(bWbIdx, 0);
//vSetMsgCol4(bWbIdx, 0, 0, 3, 2);
break;
#endif
//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 */
#ifndef WB_ALLOC_MIN
vCreateWBEx(WB_OVERLAY_MSG1);
vCreateWBEx(WB_OVERLAY_MSG2);
#endif
/* 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);
#endif
vEnableWB(WB_NORMAL_HEAD1);
vEnableWB(WB_NORMAL_HEAD2);
vEnableWB(WB_NORMAL_PBC1);
vEnableWB(WB_NORMAL_PBC2);
vEnableWB(WB_NORMAL_VOL);
/* set initial status */
vSetSharedInfo(SH_OSD_LAYER1_WB, 0x7f); /* all layer 1 WB enable */
vSetSharedInfo(SH_OSD_LAYER1_STATUS, 0x00);
vSetSharedInfo(SH_OSD_LAYER2_WB, 0x00); /* all layer 2 WB disable */
vSetSharedInfo(SH_OSD_LAYER2_STATUS, 0x00);
for (i = 0; i < OSD_TIMER_MAX; i++)
{
vSetSharedInfo(SH_OSD_TIMER_START + i, 0);
}
/* set OSD wb mode */
vSetSharedInfo(SH_OSD_WB_MODE, OSD_WB_NORMAL);
vSetSharedInfo(SH_OSD_WB_SAVED, OSD_WB_NONE);
/* file system code page asigned */
vSetFsCodePage(CODE_PAGE_MENU);
/* set OSD state to run state */
vOsdSetSt(OSD_ST_RUN);
#ifdef WB_ALLOC_MIN
vCreateWBEx(WB_OVERLAY_MSG1);
vDisableWB(WB_OVERLAY_MSG1);
_rOsdStateCtx.bDynamicWB = WB_OVERLAY_MSG1;
#endif
//for SPECTRUM wb
#ifdef SPTM_SUPPORT
vCreateWBEx(WB_NORMAL_SPTM);
#endif
#ifdef PLAYER_ZOOMIN_INDICATOR
// for ZOOM IN indicator
vCreateWBEx(WB_ZOOM_BR);
#endif
#ifdef MT1389_REV_HD
/*
Paste the message that you wanna show out in OSD2 WARNing WB.
by Alfonso 2005/4/3
*/
{
BYTE bWbIdxDummy = 0x0;
WORD wMsgIndex = OSD_MSG_HD_OSD2_WARNING;
bHiByte(_wStartX) = 0x0;
bLoByte(_wStartX) = 0x0;
bHiByte(_wStartY) = 0x0;
bLoByte(_wStartY) = 0x0;
vOsd2MsgPaste(bWbIdxDummy, wMsgIndex);
}
#endif /* MT1389_REV_HD */
}
// *********************************************************************
// Function : void vOsdCoreExit(void) large
// Description :
// Parameter :
// Return : None
// *********************************************************************
#if 0
void vOsdCoreExit(void) large
{
}
#endif
// *********************************************************************
// Function : void vOsdCoreLayer1Refresh(void)
// Description :
// Parameter :
// Return : None
// *********************************************************************
void vOsdCoreLayer1Refresh(void) large
{
BYTE bPbcState;
/* for play status show */
if (_rOsdStateCtx.fgPlayShow == TRUE)
{
if (bSharedInfo(SH_OSD_TIMER_PLAY_STATUS) == 0)
{
_rOsdStateCtx.fgPlayShow = FALSE;
_rOsdStateCtx.bPlayType = OSD_SHOW_PLAY;
/* update flag first then call show PBC state */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -