📄 o_message_playmode.c
字号:
/****************************************************************************************************
* Copyright (c) 2005 ZORAN Corporation, All Rights Reserved
* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF ZORAN CORPORATION
*
* File: o_message_playmode.c
*
* Description:
* =========
*
****************************************************************************************************/
/****************************************************************************************************
* DECLARATION: Public functions
****************************************************************************************************/
MS_OP OMESSAGE_PLAYMODE_Operation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam);
#define OMESSAGE_PLAYMODE_FillOSDSeg(o, a) OMESSAGE_FillOSDSeg(o, a)
/****************************************************************************************************
* DEFINITION: Private named constants
****************************************************************************************************/
/****************************************************************************************************
* DEFINITION: Private macros
****************************************************************************************************/
/****************************************************************************************************
* DEFINITION: Private typedefs
****************************************************************************************************/
/****************************************************************************************************
* DEFINITION: Public (global) variables
****************************************************************************************************/
/****************************************************************************************************
* DEFINITION: Private (static) variables
****************************************************************************************************/
/****************************************************************************************************
* DECLARATION: Private (static) functions
****************************************************************************************************/
static OSD_MESSAGES _HandleRepeatABOperation(MSO_MESSAGE __NEAR* pMessage, UINT32 lParam);
static OSD_MESSAGES _HandleRepeatOperation(MSO_MESSAGE __NEAR* pMessage, UINT32 lParam);
static OSD_MESSAGES _HandleShuffleOperation(MSO_MESSAGE __NEAR* pMessage, UINT32 lParam);
static OSD_MESSAGES _HandleRandomOperation(MSO_MESSAGE __NEAR* pMessage, UINT32 lParam);
/***************************************************************************************
* Include customization file.
****************************************************************************************/
// Include custom code file: customer specific code, over-writing common one.
#include "Components\Custom\Message\o_message_playmode_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
*
****************************************************************************************************/
MS_OP OMESSAGE_PLAYMODE_Operation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam)
{
FORMATED_UNICODE_STRING oFormUniStr;
OSD_MESSAGES eMsg = S_NULL;
BOOL bSaveAndUpdate = TRUE;
MSO_MESSAGE __NEAR* pMessage = (MSO_MESSAGE __NEAR*)pThis;
// 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;
// The timeout of messages is handled in the generic message handler.
// This handler deals with the updating of the playmode message and the removal of certain WHILE TRUE conditions.
switch(pMessage->moParam.mMsOpMsg)
{
case MS_OP_MSG_PLAYMODE_REPEAT:
{
UINT16 wMode = ((MSO_MESSAGE_PLAYMODE __NEAR*)pMessage)->moParam.wMode;
if(!( (wMode == MSG_PLAYMODE_REPEAT_OFF)
|| ((wMode == MSG_PLAYMODE_REPEAT_SINGLE) && CoreAPI_IsRepeatSingle())
|| (((wMode == MSG_PLAYMODE_REPEAT_ALL) || (wMode == MSG_PLAYMODE_REPEAT_FOLDER)) && CoreAPI_IsRepeatFolderOrALL())
))
{
pMessage->moParam.mwTimer = 1;
}
break;
}
case MS_OP_MSG_PLAYMODE_REPEAT_AB:
{
UINT16 wMode = ((MSO_MESSAGE_PLAYMODE __NEAR*)pMessage)->moParam.wMode;
if(!( (wMode == PM_REPEAT_AB_OFF)
|| ((wMode == PM_REPEAT_AB_A) && CoreAPI_IsRepeatABA())
|| ((wMode == PM_REPEAT_AB_B) && CoreAPI_IsRepeatABB())
))
{
pMessage->moParam.mwTimer = 1;
}
break;
}
// Restore repeatAB message if not off and not displayed
case MS_OP_NONE:
{
UINT16 wMode = ((MSO_MESSAGE_PLAYMODE __NEAR*)pMessage)->moParam.wMode;
if ((PM_REPEAT_AB_A == wMode) && CoreAPI_IsRepeatABA())
{
_DisplayMessageOnTick(pThis, MS_OP_MSG_PLAYMODE_REPEAT_AB, PM_REPEAT_AB_A);
}
else if ((PM_REPEAT_AB_B == wMode) && CoreAPI_IsRepeatABB())
{
_DisplayMessageOnTick(pThis, MS_OP_MSG_PLAYMODE_REPEAT_AB, PM_REPEAT_AB_B);
}
break;
}
default:
break;
}
break;
case MS_OP_MSG_PLAYMODE_REPEAT_AB:
eMsg = _HandleRepeatABOperation(pMessage, lParam);
if (S_NULL == eMsg)
return MS_OP_NONE;
break;
case MS_OP_MSG_PLAYMODE_REPEAT:
eMsg = _HandleRepeatOperation(pMessage, lParam);
if (S_NULL == eMsg)
return MS_OP_NONE;
break;
case MS_OP_MSG_PLAYMODE_SHUFFLE:
eMsg = _HandleShuffleOperation(pMessage, lParam);
if (S_NULL == eMsg)
return MS_OP_NONE;
break;
case MS_OP_MSG_PLAYMODE_RANDOM:
eMsg = _HandleRandomOperation(pMessage, lParam);
if (S_NULL == eMsg)
return MS_OP_NONE;
break;
default:
bSaveAndUpdate = FALSE;
break;
}
if(eMsg != S_NULL)
{
OSDR_GetFormUniStr_OsdMessage((FORMATED_UNICODE_STRING __NEAR*)&oFormUniStr, (UINT32) eMsg);
}
if(bSaveAndUpdate == TRUE)
{
pMessage->moParam.mMsOpMsg = MsOp;
MsOp = MS_OP_MSO_MESSAGE_BUILD;
lParam = (UINT32)&oFormUniStr;
}
MsOp = OMESSAGE_Operation(pThis, MsOp, lParam);
return MsOp;
}
/****************************************************************************************************
* DEFINITION: Private functions
****************************************************************************************************/
/****************************************************************************************************
* Function : _HandleRepeatABOperation
*
* 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 OSD_MESSAGES _HandleRepeatABOperation(MSO_MESSAGE __NEAR* pMessage, UINT32 lParam)
{
switch(lParam)
{
case PM_REPEAT_AB_OFF:
((MSO_MESSAGE_PLAYMODE __NEAR*)pMessage)->moParam.wMode = (UINT16)lParam;
#ifdef OMESSAGE_PLAYMODE_REPEAT_AB_OFF_TIMEOUT
pMessage->moParam.mwTimer = OMESSAGE_PLAYMODE_REPEAT_AB_OFF_TIMEOUT;
#else
pMessage->moParam.mwTimer = ((MS_DESCRIPTOR_MESSAGE*)((MSO_OBJECT __NEAR*)pMessage)->mpDescriptor)->mwDefaultTimeout;
#endif
return S_REPEATAB_OFF;
case PM_REPEAT_AB_A:
((MSO_MESSAGE_PLAYMODE __NEAR*)pMessage)->moParam.wMode = (UINT16)lParam;
pMessage->moParam.mwTimer = OMESSAGE_INFINITE_TIMEOUT;
return S_REPEATAB_A;
case PM_REPEAT_AB_B:
((MSO_MESSAGE_PLAYMODE __NEAR*)pMessage)->moParam.wMode = (UINT16)lParam;
pMessage->moParam.mwTimer = OMESSAGE_INFINITE_TIMEOUT;
return S_REPEATAB_B;
default:
break;
}
BREAK_POINT();
return S_NULL;
}
/****************************************************************************************************
* Function : _HandleRepeatOperation
*
* 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 OSD_MESSAGES _HandleRepeatOperation(MSO_MESSAGE __NEAR* pMessage, UINT32 lParam)
{
switch(lParam)
{
case MSG_PLAYMODE_REPEAT_OFF:
pMessage->moParam.mwTimer = ((MS_DESCRIPTOR_MESSAGE*)((MSO_OBJECT __NEAR*)pMessage)->mpDescriptor)->mwDefaultTimeout;
((MSO_MESSAGE_PLAYMODE __NEAR*)pMessage)->moParam.wMode = (UINT16)lParam;
return S_REPEAT_OFF;
case MSG_PLAYMODE_REPEAT_SINGLE:
pMessage->moParam.mwTimer = ((MS_DESCRIPTOR_MESSAGE*)((MSO_OBJECT __NEAR*)pMessage)->mpDescriptor)->mwDefaultTimeout;
((MSO_MESSAGE_PLAYMODE __NEAR*)pMessage)->moParam.wMode = (UINT16)lParam;
return S_REPEAT_SINGLE;
case MSG_PLAYMODE_REPEAT_ALL:
pMessage->moParam.mwTimer = ((MS_DESCRIPTOR_MESSAGE*)((MSO_OBJECT __NEAR*)pMessage)->mpDescriptor)->mwDefaultTimeout;
((MSO_MESSAGE_PLAYMODE __NEAR*)pMessage)->moParam.wMode = (UINT16)lParam;
return S_REPEAT_ALL;
case MSG_PLAYMODE_REPEAT_CHAPTER:
pMessage->moParam.mwTimer = ((MS_DESCRIPTOR_MESSAGE*)((MSO_OBJECT __NEAR*)pMessage)->mpDescriptor)->mwDefaultTimeout;
((MSO_MESSAGE_PLAYMODE __NEAR*)pMessage)->moParam.wMode = MSG_PLAYMODE_REPEAT_SINGLE;
return S_REPEAT_CHAPTER;
case MSG_PLAYMODE_REPEAT_TITLE:
pMessage->moParam.mwTimer = ((MS_DESCRIPTOR_MESSAGE*)((MSO_OBJECT __NEAR*)pMessage)->mpDescriptor)->mwDefaultTimeout;
((MSO_MESSAGE_PLAYMODE __NEAR*)pMessage)->moParam.wMode = MSG_PLAYMODE_REPEAT_TITLE;
return S_REPEAT_TITLE;
case MSG_PLAYMODE_REPEAT_FOLDER:
pMessage->moParam.mwTimer = ((MS_DESCRIPTOR_MESSAGE*)((MSO_OBJECT __NEAR*)pMessage)->mpDescriptor)->mwDefaultTimeout;
((MSO_MESSAGE_PLAYMODE __NEAR*)pMessage)->moParam.wMode = MSG_PLAYMODE_REPEAT_TITLE;
return S_REPEAT_FOLDER;
default:
break;
}
BREAK_POINT();
return S_NULL;
}
/****************************************************************************************************
* Function : _HandleShuffleOperation
*
* 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 OSD_MESSAGES _HandleShuffleOperation(MSO_MESSAGE __NEAR* pMessage, UINT32 lParam)
{
switch(lParam)
{
case 0:
pMessage->moParam.mwTimer = ((MS_DESCRIPTOR_MESSAGE*)((MSO_OBJECT __NEAR*)pMessage)->mpDescriptor)->mwDefaultTimeout;
return S_SHUFFLE_OFF;
case 1:
pMessage->moParam.mwTimer = ((MS_DESCRIPTOR_MESSAGE*)((MSO_OBJECT __NEAR*)pMessage)->mpDescriptor)->mwDefaultTimeout;
return S_SHUFFLE;
default:
break;
}
BREAK_POINT();
return S_NULL;
}
/****************************************************************************************************
* Function : _HandleRandomOperation
*
* 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 OSD_MESSAGES _HandleRandomOperation(MSO_MESSAGE __NEAR* pMessage, UINT32 lParam)
{
switch(lParam)
{
case 0:
pMessage->moParam.mwTimer = ((MS_DESCRIPTOR_MESSAGE*)((MSO_OBJECT __NEAR*)pMessage)->mpDescriptor)->mwDefaultTimeout;
return S_RANDOM_OFF;
case 1:
pMessage->moParam.mwTimer = ((MS_DESCRIPTOR_MESSAGE*)((MSO_OBJECT __NEAR*)pMessage)->mpDescriptor)->mwDefaultTimeout;
return S_RANDOM;
default:
break;
}
BREAK_POINT();
return S_NULL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -