📄 o_message_setting.c
字号:
/****************************************************************************************************
* Copyright (c) 2005 ZORAN Corporation, All Rights Reserved
* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF ZORAN CORPORATION
*
* File: o_message_setting.c
*
* Description:
* =========
*
****************************************************************************************************/
/****************************************************************************************************
* DECLARATION: Public functions
****************************************************************************************************/
STATIC MS_OP OMESSAGE_SETTING_Operation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam);
#define OMESSAGE_SETTING_FillOSDSeg(o, a) OMESSAGE_FillOSDSeg(o, a)
/****************************************************************************************************
* DEFINITION: Private named constants
****************************************************************************************************/
#define MS_IsMultiAnlgeAvailable MS_IsGeneralPurpose1
#define MS_SetMultiAnlgeAvailable MS_SetGeneralPurpose1
#define MS_ClearMultiAnlgeAvailable MS_ClearGeneralPurpose1
#if D_SUPPORT_SACD
#ifndef OMESSAGE_SACD_AREA_CHANGED_TIMEOUT
#define OMESSAGE_SACD_AREA_CHANGED_TIMEOUT 16 // Ticks
#endif // OMESSAGE_SACD_AREA_CHANGED_TIMEOUT
#ifndef OMESSAGE_SACD_LAYER_CHANGED_TIMEOUT
#define OMESSAGE_SACD_LAYER_CHANGED_TIMEOUT 16 // Ticks
#endif // OMESSAGE_SACD_LAYER_CHANGED_TIMEOUT
#endif // D_SUPPORT_SACD
/****************************************************************************************************
* DEFINITION: Private macros
****************************************************************************************************/
/****************************************************************************************************
* DEFINITION: Private typedefs
****************************************************************************************************/
/****************************************************************************************************
* DEFINITION: Public (global) variables
****************************************************************************************************/
extern DWORD __NEAR g_ui_current_number;
#ifdef D_10P_KEY
extern BYTE b_current_10PKey;
#endif
/****************************************************************************************************
* DEFINITION: Private (static) variables
****************************************************************************************************/
/****************************************************************************************************
* DECLARATION: Private (static) functions
****************************************************************************************************/
STATIC OSD_MESSAGES _HandleTvStdOperation(MSO_MESSAGE __NEAR* pMessage, UINT32 lParam);
STATIC OSD_MESSAGES _HandleVideoOutputOperation(MSO_MESSAGE __NEAR* pMessage, UINT32 lParam);
STATIC OSD_MESSAGES _HandleCoreErrorOperation(MSO_MESSAGE __NEAR* pMessage, UINT32 lParam);
STATIC OSD_MESSAGES _HandleDecErrorOperation(MSO_MESSAGE __NEAR* pMessage, UINT32 lParam);
STATIC OSD_MESSAGES _HandleDriveErrorOperation(MSO_MESSAGE __NEAR* pMessage, UINT32 lParam);
STATIC OSD_MESSAGES _HandleCdNavErrorOperation(MSO_MESSAGE __NEAR* pMessage, UINT32 lParam);
STATIC OSD_MESSAGES _HandleClipsNavErrorOperation(MSO_MESSAGE __NEAR* pMessage, UINT32 lParam);
STATIC OSD_MESSAGES _HandleDvdNavErrorOperation(MSO_MESSAGE __NEAR* pMessage, UINT32 lParam);
#ifdef DVD_VR_SUPPORT
STATIC OSD_MESSAGES _HandleDvdVrNavErrorOperation(MSO_MESSAGE __NEAR* pMessage, UINT32 lParam);
#endif // DVD_VR_SUPPORT
STATIC OSD_MESSAGES _HandleProhibitOperation(MSO_MESSAGE __NEAR* pMessage, UINT32 lParam);
#ifdef EZVIEW_ENABLED
STATIC OSD_MESSAGES _HandleDvdEzViewModeOperation(MSO_MESSAGE __NEAR* pMessage, UINT32 lParam);
#endif //EZVIEW_ENABLED
#ifdef EXTERNAL_KARAOKE
STATIC OSD_MESSAGES _HandleKaraokeOperation(MSO_MESSAGE __NEAR* pMessage, UINT32 lParam);
#endif //EXTERNAL_KARAOKE
STATIC OSD_MESSAGES _Handle3DOperation(MSO_MESSAGE __NEAR* pMessage, UINT32 lParam);
STATIC OSD_MESSAGES _HandlePbcOperation(MSO_MESSAGE __NEAR* pMessage, UINT32 lParam);
#ifdef MPP_SUPPORT
STATIC OSD_MESSAGES _HandleMppOperation(MSO_MESSAGE __NEAR* pMessage, UINT32 lParam);
#endif
#ifdef D_ENABLE_DOLBY_EX_SUPPORT
STATIC OSD_MESSAGES _HandleDolbyExOperation(MSO_MESSAGE __NEAR* pMessage, UINT32 lParam);
#endif
STATIC OSD_MESSAGES _HandleJpegTransitionOperation(MSO_MESSAGE __NEAR* pMessage, UINT32 lParam);
STATIC OSD_MESSAGES _HandleRotationOperation(MSO_MESSAGE __NEAR* pMessage, UINT32 lParam);
STATIC OSD_MESSAGES _HandleSpeakerModeOperation(MSO_MESSAGE __NEAR* pMessage, UINT32 lParam);
#ifdef D_VOCAL_EFFECT
STATIC OSD_MESSAGES _HandleVocalModeOperation(MSO_MESSAGE __NEAR* pMessage, UINT32 lParam);
#endif //D_VOCAL_EFFECT
#ifdef TV_GUARDIAN_ENABLE
STATIC OSD_MESSAGES _GetTVGMsg(UINT32 lParam);
#endif
/***************************************************************************************
* Include customization file.
****************************************************************************************/
// Include custom code file: customer specific code, over-writing common one.
#include "Components\Custom\Message\o_message_setting_custom.c"
/****************************************************************************************************
* DEFINITION: Public functions
****************************************************************************************************/
/****************************************************************************************************
* Function : Name
*
* Input : Parameter_1 - description
* Parameter_2 - description
*
* Output : Parameter_3 - description
* Parameter_4 - description
*
* Return : Describe_possible_returned_values_and_their_meaning
*
* Description : Describe_what_the_function_does_in_English
*
****************************************************************************************************/
STATIC MS_OP OMESSAGE_SETTING_Operation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam)
{
FORMATED_UNICODE_STRING oFormUniStr;
BOOL bSaveAndUpdate = TRUE;
OSD_MESSAGES eMsg = S_NULL;
MSO_MESSAGE __NEAR *pMessage = (MSO_MESSAGE __NEAR*)pThis;
MS_DESCRIPTOR_MESSAGE *pMessageDescriptor = (MS_DESCRIPTOR_MESSAGE*)(pThis->mpDescriptor);
// Initialize oFormUniStr, if no font index, then OSDR_GetFormUniStr_OsdMessage will be wrong
oFormUniStr.mtFontIndex = FONT_MESSAGE;
oFormUniStr.mszUniStr[0]=0;
switch(MsOp)
{
case MS_OP_TICK:
bSaveAndUpdate = FALSE;
if (pMessage->moParam.mwCoreTimer)
break;
switch(pMessage->moParam.mMsOpMsg)
{
case MS_OP_MSG_ERROR_CORE:
case MS_OP_MSG_ERROR_DEC:
case MS_OP_MSG_ERROR_DRIVE:
case MS_OP_MSG_ERROR_CDNAV:
case MS_OP_MSG_ERROR_CLIPSNAV:
case MS_OP_MSG_ERROR_DVDNAV:
#ifdef DVD_VR_SUPPORT
case MS_OP_MSG_ERROR_DVDVRNAV:
#endif // DVD_VR_SUPPORT
if ( (DEVICE_TRAY_OPENING == DeviceManager_GetDeviceState(DEVICE_DISC))
||(DEVICE_TRAY_OPENED == DeviceManager_GetDeviceState(DEVICE_DISC)))
pMessage->moParam.mwTimer = 1; // Clear the message
break;
#ifdef D_DIVX6_SUPPORT
// DivX6 audio string is very long, use full width but remove it in case it is not the latest displayed message
case MS_OP_MSG_SYS_AUDIO:
case MS_OP_MSG_SYS_SUBTITLE:
if ((eClipType_AVI == CoreAPI_GetCurrentClipType()) && (MS_ATTR_OSD_LAYER_MIN == MS_GetOsdLayer(pThis)))
{
pMessage->moParam.mwTimer = 1; // Clear the message
}
break;
#endif //D_DIVX6_SUPPORT
#ifdef D_CACHE_CLIPSDB_ONLY_ONCE
case MS_OP_MSG_ERROR_DISC_NO_SUPPORTED_FILE:
if (!CoreAPI_IsMediaReady() || !DeviceManager_IsNoAvailableClips())
pMessage->moParam.mwTimer = 1;
break;
#endif // D_CACHE_CLIPSDB_ONLY_ONCE
case MS_OP_NONE:
// If no files supported by the player on the disc and no message to display, then display this message
#ifdef D_CACHE_CLIPSDB_ONLY_ONCE
if (CoreAPI_IsMediaReady() && (MEDIA_TYPE_CLIPS == CoreAPI_GetCurrentMediaType()) && DeviceManager_IsNoAvailableClips())
{
_DisplayMessageOnTick(pThis, MS_OP_MSG_ERROR_DISC_NO_SUPPORTED_FILE, 0);
}
#endif // D_CACHE_CLIPSDB_ONLY_ONCE
break;
default:
break;
}
if ((MEDIA_TYPE_DVD_VIDEO == CoreAPI_GetCurrentMediaType())
#ifdef DVD_AUDIO_SUPPORT
|| (MEDIA_TYPE_DVD_AUDIO == CoreAPI_GetCurrentMediaType())
#endif //DVD_AUDIO_SUPPORT
)
{
UINT16 wCurrentTotalAngleNum = CoreAPI_GetTotalAngleNum();
UINT16 wIsPreviousMultiAnlgeAvailable = MS_IsMultiAnlgeAvailable(pThis);
if ((wCurrentTotalAngleNum > 1) && (wCurrentTotalAngleNum != ERROR_ANGLE_NUM))
MS_SetMultiAnlgeAvailable(pThis);
else
MS_ClearMultiAnlgeAvailable(pThis);
if (!wIsPreviousMultiAnlgeAvailable && MS_IsMultiAnlgeAvailable(pThis))
{
UINT16 wCurrentAngleNum = CoreAPI_GetCurrentAngleNum();
_DisplayMessageOnTick(pThis, MS_OP_MSG_SYS_ANGLE, wCurrentAngleNum);
}
}
else
MS_ClearMultiAnlgeAvailable(pThis);
break;
case MS_OP_MSG_SYS_OSD_MESSAGES:
eMsg = (OSD_MESSAGES)lParam;
if (S_NULL == eMsg)
return MS_OP_NONE;
pMessage->moParam.mwTimer = pMessageDescriptor->mwDefaultTimeout;
break;
case MS_OP_MSG_SYS_NUMBER_INPUT:
// Direct track access is being requested, the lParam holds the track number.
STR_GenerateNumericValue(lParam, oFormUniStr.mszUniStr, 0, UNISTR_LENGTH_MAX);
pMessage->moParam.mwTimer = pMessageDescriptor->mwDefaultTimeout;
break;
#ifdef D_10P_KEY
case MS_OP_MSG_SYS_10P_INPUT:
// The zoom level is given in the lParam.
STR_Generate10PValue(lParam, oFormUniStr.mszUniStr, 0, UNISTR_LENGTH_MAX);
pMessage->moParam.mwTimer = pMessageDescriptor->mwDefaultTimeout+10;
break;
#endif
#ifdef D_TEST
case MS_OP_MSG_SYS_TEST:
STR_GenerateTestOsd(lParam, oFormUniStr.mszUniStr, 0, UNISTR_LENGTH_MAX);
pMessage->moParam.mwTimer =0;
break;
case MS_OP_MSG_SYS_ADJUST_GRID:
STR_GenerateAdjustGridOsd(lParam, oFormUniStr.mszUniStr, 0, UNISTR_LENGTH_MAX);
pMessage->moParam.mwTimer =0;
break;
#endif
case MS_OP_MSG_SYS_CLEAR:
// Clear the (numeric) entry.
// If the current message is valid, set the timer to 1 so that it will be cleared from the screen on the next tick.
if (pMessage->moParam.mMsOpMsg != MS_OP_NONE)
{
pMessage->moParam.mwTimer = 1;
}
return MS_OP_NONE;
case MS_OP_MSG_SYS_BE_VERSION:
STR_GenerateConstString((UINT16*)CoreAPI_GetBEVersion(), oFormUniStr.mszUniStr, 0,UNISTR_LENGTH_MAX+1);
#ifdef OMESSAGE_SETTING_VERSION_TIMEOUT
pMessage->moParam.mwTimer = OMESSAGE_SETTING_VERSION_TIMEOUT;
#else
pMessage->moParam.mwTimer = pMessageDescriptor->mwDefaultTimeout;
#endif
break;
case MS_OP_MSG_SYS_FE_VERSION:
STR_GenerateConstString((UINT16*)CoreAPI_GetFEVersion(),oFormUniStr.mszUniStr, 0,UNISTR_LENGTH_MAX+1);
#ifdef OMESSAGE_SETTING_VERSION_TIMEOUT
pMessage->moParam.mwTimer = OMESSAGE_SETTING_VERSION_TIMEOUT;
#else
pMessage->moParam.mwTimer = pMessageDescriptor->mwDefaultTimeout;
#endif
break;
#ifndef D_GINGER_I86
case MS_OP_MSG_SYS_CHIP_ID:
STR_GenerateChipID( oFormUniStr.mszUniStr, 0, UNISTR_LENGTH_MAX+1);
#ifdef OMESSAGE_SETTING_VERSION_TIMEOUT
pMessage->moParam.mwTimer = OMESSAGE_SETTING_VERSION_TIMEOUT;
#else
pMessage->moParam.mwTimer = pMessageDescriptor->mwDefaultTimeout;
#endif
break;
#endif // not D_GINGER_I86
#ifdef D_GINGER_I86
case MS_OP_MSG_SYS_BOARD_VERSION:
STR_GenerateConstString((UINT16*)CoreAPI_GetBoardVersion(), oFormUniStr.mszUniStr, 0,UNISTR_LENGTH_MAX+1);
#ifdef OMESSAGE_SETTING_VERSION_TIMEOUT
pMessage->moParam.mwTimer = OMESSAGE_SETTING_VERSION_TIMEOUT;
#else
pMessage->moParam.mwTimer = pMessageDescriptor->mwDefaultTimeout;
#endif
break;
#endif //D_GINGER_I86
case MS_OP_MSG_SECRET_KEY_CHECKSUM:
STR_GenerateCheckSum((UINT16)lParam, oFormUniStr.mszUniStr, 0, UNISTR_LENGTH_MAX);
pMessage->moParam.mwTimer = pMessageDescriptor->mwDefaultTimeout;
break;
#ifdef AVI_DRM_SUPPORT
case MS_OP_MSG_SYS_DIVX_VERSION:
CoreAPI_GetDRMRegCode(oFormUniStr.mszUniStr, 0, UNISTR_LENGTH_MAX);
pMessage->moParam.mwTimer = pMessageDescriptor->mwDefaultTimeout;
break;
#endif
#ifdef TV_GUARDIAN_ENABLE
case MS_OP_MSG_SYS_TVG_INFORMATION: // Display the TVG information.
// The TVG information is given in the lParam.
eMsg=_GetTVGMsg(lParam);
// Generate the string:
STR_GenerateOSDMESSAGEString(eMsg,oFormUniStr.mszUniStr, 0, UNISTR_LENGTH_MAX);
// Set the timer:
pMessage->moParam.mwTimer =
((MS_DESCRIPTOR_MESSAGE_SETTING*)pMessage->moObject.mpDescriptor)->mwDefaultTimeout;
break;
#endif //TV_GUARDIAN_ENABLE
#ifdef D_VOCAL_EFFECT
case MS_OP_MSG_SYS_AC3_VOCAL_MODE:
eMsg = _HandleVocalModeOperation(pMessage, lParam);
if (S_NULL == eMsg)
return MS_OP_NONE;
break;
#endif //D_VOCAL_EFFECT
case MS_OP_MSG_SYS_ZOOM:
// The zoom level is given in the lParam.
STR_GenerateZoom( (INT16)lParam,
oFormUniStr.mszUniStr,
STR_GenerateUnicodeChar( PRIVATE_SYMBOL_ZOOM, oFormUniStr.mszUniStr, 0, UNISTR_LENGTH_MAX),
UNISTR_LENGTH_MAX);
pMessage->moParam.mwTimer = pMessageDescriptor->mwDefaultTimeout;
break;
#if defined(D_HDMI_ENABLED)||defined(D_HD_COMPONENT_ENABLED)
case MS_OP_MSG_HD_RESOLUTION:
{
STR_GenerateHDVideoOutResolution((UINT16)lParam, oFormUniStr.mszUniStr, 0, UNISTR_LENGTH_MAX);
#ifdef HDMI_EXTEND_OSD_DISPLAY_TIMER
if((((UINT16)lParam >> 8) == DEC_LL_OUT_VIDEO_STANDARD_NTSC) && (CoreAPI_IsMonitorDetectionHDMI()==TRUE))
pMessage->moParam.mwTimer = HDMI_EXTEND_OSD_DISPLAY_TIMER;
else
#endif //HDMI_EXTEND_OSD_DISPLAY_TIMER
pMessage->moParam.mwTimer = pMessageDescriptor->mwDefaultTimeout;
}
break;
#endif //#if defined(D_HDMI_ENABLED)||defined(D_HD_COMPONENT_ENABLED)
case MS_OP_MSG_SYS_AUDIO: // Display the audio type.
{
UINT8 cBuffOffset;
cBuffOffset = STR_GenerateUnicodeChar(PRIVATE_SYMBOL_AUDIO_LANGUAGE, oFormUniStr.mszUniStr, 0, UNISTR_LENGTH_MAX + 1);
// The audio stream is given in the lParam.
STR_GenerateAudioInfo((UINT16)lParam, oFormUniStr.mszUniStr, cBuffOffset, UNISTR_LENGTH_MAX + 1);
pMessage->moParam.mwTimer = pMessageDescriptor->mwDefaultTimeout;
}
break;
case MS_OP_MSG_SYS_SUBTITLE: // Display the subtitle language.
{
UINT8 cBuffOffset;
cBuffOffset = STR_GenerateUnicodeChar(PRIVATE_SYMBOL_SUBTITLE, oFormUniStr.mszUniStr, 0, UNISTR_LENGTH_MAX + 1);
// The subtitle stream number is given in the lParam.
STR_GenerateSubtitleInfo((UINT16)lParam, oFormUniStr.mszUniStr, cBuffOffset, UNISTR_LENGTH_MAX + 1);
pMessage->moParam.mwTimer = pMessageDescriptor->mwDefaultTimeout;
}
break;
case MS_OP_MSG_SYS_ANGLE: // Display the angle number.
{
UINT8 cBuffOffset;
cBuffOffset = STR_GenerateUnicodeChar(PRIVATE_SYMBOL_ANGLE, oFormUniStr.mszUniStr, 0, UNISTR_LENGTH_MAX + 1);
// The angle number is given in the lParam.
STR_GenerateAngle((INT16)lParam, oFormUniStr.mszUniStr, cBuffOffset, UNISTR_LENGTH_MAX);
pMessage->moParam.mwTimer = pMessageDescriptor->mwDefaultTimeout;
}
break;
case MS_OP_MSG_SYS_SPEAKER_MODE:
eMsg = _HandleSpeakerModeOperation(pMessage, lParam);
if (S_NULL == eMsg)
return MS_OP_NONE;
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -