⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 o_message_setting.c

📁 Zoran V966 DVD 解码 Soc芯片的源程序
💻 C
📖 第 1 页 / 共 4 页
字号:
/****************************************************************************************************
*  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 + -