📄 metanav.cpp
字号:
}
return (METANAV_SUCCESS);
}
/**
* Process commands. Some commands may be processed by the metanav, while
* others must be sent to the media specific navigator.
*
* @param command - Command to be processed
* @param ulInfo - Information that goes with the command
*
* @return
* METANAV_SUCCESS if successful
* METANAV_FAILURE if unsuccessful
*/
METANAV_STATUS cMetaNav::CommandHandler(VDVD_COMMAND command, ULONG ulInfo)
{
BOOLEAN fNavCommand = FALSE;
/* Check that command is valid */
if (command >= VDVD_COMMAND_MAX)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("cMetaNav::CommandHandler: Invalid command\n"));
return (METANAV_FAILURE);
}
/* Some commands can be processed by metanav */
switch (command)
{
case VDVD_COMMAND_STANDBY:
/*
* Set a flag to signal that the standby command is being processed, that way we don't
* try to start the nav right before going into standby.
*/
if (m_fStandbyMode == FALSE)
{
m_fStandbyProcessing = TRUE;
}
/* Process command in metanav */
if (SendLocalCommand( (ULONG)command, ulInfo, FALSE) != METANAV_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_TRACE), ("cMetaNav::CommandHandler: Dropping VDVD_COMMAND_STANDBY command\n"));
return (METANAV_FAILURE);
}
break;
case VDVD_COMMAND_VOL_UP:
case VDVD_COMMAND_VOL_DOWN:
case VDVD_COMMAND_VOL_MUTE:
case VDVD_COMMAND_EJECT:
/* Process command in metanav */
if (SendLocalCommand( (ULONG)command, ulInfo, FALSE) != METANAV_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_TRACE), ("cMetaNav::CommandHandler: Dropping VDVD_COMMAND_EJECT command\n"));
return (METANAV_FAILURE);
}
break;
case VDVD_COMMAND_PLAY:
if (m_MediaFormat == MEDIA_FORMAT_UNKNOWN)
{
/* The media format has not been detected yet so process the command in metanav.
* Metanav will determine the format, and if autoplay it TRUE it will start the
* appropriate navigator. */
if (SendLocalCommand( (ULONG)command, m_fAutoPlay, FALSE) != METANAV_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_TRACE), ("cMetaNav::CommandHandler: Dropping VDVD_COMMAND_PLAY command\n"));
return (METANAV_FAILURE);
}
}
else
{
/* Set flag to send command to nav */
fNavCommand = TRUE;
}
break;
default:
/* Set flag to send command to nav */
fNavCommand = TRUE;
break;
}
/*
* If command should be processed by media specific nav, then send it
* to the appropriate nav
*/
if (fNavCommand)
{
/* Send command to the media specific nav */
switch (m_MediaFormat)
{
#ifdef MP3_ENABLE
case MEDIA_FORMAT_URD:
MP3ReceiveCommand( (ULONG)command, ulInfo);
break;
#endif
#ifdef VCD_ENABLE
case MEDIA_FORMAT_VCD:
case MEDIA_FORMAT_SVCD:
if (VcdAppCommandHandler( (ULONG)command, ulInfo) != OS_OK)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("cMetaNav::CommandHandler: Failure sending VCD command\n"));
return (METANAV_FAILURE);
}
break;
#endif
case MEDIA_FORMAT_DVD_A:
case MEDIA_FORMAT_DVD_V:
if (DvdAppCommandHandler( (ULONG)command, ulInfo) != DVDAPP_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("cMetaNav::CommandHandler: Failure sending DVD command\n"));
return (METANAV_FAILURE);
}
break;
#ifdef HDDVD_ENABLE
case MEDIA_FORMAT_HDDVD_STANDARD:
if (HDDVDAppCommandHandler( (ULONG)command, ulInfo) != HDDVDAPP_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("cMetaNav::CommandHandler: Failure sending HD-DVD command\n"));
return (METANAV_FAILURE);
}
break;
case MEDIA_FORMAT_HDDVD_ADVANCED:
if (HDDVDAppCommandHandler( (ULONG)command, ulInfo) != HDDVDAPP_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("cMetaNav::CommandHandler: Failure sending HD-DVD command\n"));
return (METANAV_FAILURE);
}
break;
#endif
#ifdef CDDA_ENABLE
case MEDIA_FORMAT_CDDA:
if (CddaAppCommandHandler( (ULONG)command, ulInfo) != OS_OK)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("cMetaNav::CommandHandler: Failure sending CDDA command\n"));
return (METANAV_FAILURE);
}
break;
#endif
#ifdef BDROM_ENABLE
case MEDIA_FORMAT_BDROM:
if (BDROMAppCommandHandler( (ULONG)command, ulInfo) != BDAPP_SUCCESS)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("cMetaNav::CommandHandler: Failure sending BDROM command\n"));
return (METANAV_FAILURE);
}
break;
#endif
#ifdef VR_ENABLE
case MEDIA_FORMAT_VR:
if (VRAppCommandHandler( (ULONG)command, ulInfo) != OS_OK)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("cMetaNav::CommandHandler: Failure sending VR command\n"));
return (METANAV_FAILURE);
}
break;
#endif
case MEDIA_FORMAT_UNKNOWN:
default:
DBGPRINT(DBG_ON(DBG_ERROR), ("cMetaNav::CommandHandler: NO ACTIVE NAV!\n"));
break;
}
}
return (METANAV_SUCCESS);
}
/**
* Set location to start from on resume from standby.
*
* @param
* pvLocation -- location handle
* ulSize -- size of location handle
*
* @retval
* none
*/
METANAV_STATUS cMetaNav::SetStandbyResumeLocation(PVOID pvLocation, ULONG ulSize)
{
if (pvLocation == NULL)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("cMetaNav::SetStandbyResumeLocation: Null location handle!\n"));
return (METANAV_FAILURE);
}
if (ulSize > m_ulStandbyLocationSize)
{
DBGPRINT(DBG_ON(DBG_ERROR), ("cMetaNav::SetStandbyResumeLocation: Invalid location handle size!\n"));
return (METANAV_FAILURE);
}
/* Copy location information into local location handle */
m_fResumeOnStandbySet = TRUE;
memcpy(m_pStandbyLocation, pvLocation, ulSize);
return (METANAV_SUCCESS);
}
/**
* Set mode to resume playback when coming out of standby.
*
* @param
* fOnOff -- If true, standby resume mode is turned on.
* If false, standby resume mode is turned off.
*
* @retval
* none
*/
void cMetaNav::SetStandbyResumeMode(BOOLEAN fOnOff)
{
m_fResumeOnStandbyMode = fOnOff;
}
/**
* Get setting for mode to resume playback when coming out of standby.
*
* @param
* none
*
* @retval
* If true, standby resume mode is turned on.
* If false, standby resume mode is turned off.
*/
BOOLEAN cMetaNav::GetStandbyResumeMode()
{
return (m_fResumeOnStandbyMode);
}
/**
* This API allows updating the player region (for testing purposes only).
* Once this API has been called the player will use the new region code and will ignore
* the default region code.
*
* The players default region is configurable by defining the following variables in
* the make file or build environment. If these are not defined the player is hard coded
* to be Region 1 for both DVD and Blu-Ray.
*
* Environment settings to override the hard coded region:
* add -D "SPRM_REGION_DEFAULT=X" - where X is the desired region for DVD
* add -D "PSR_REGION_DEFAULT=Y" - where Y is the desired region for Blu-Ray
*
* @param DVD_SPRM_P_RCD - The new value to be stored in SPRM 20 (DVD Player Region Code)
* @param BD_PSR_REGION - The new value to be stored in PSR 20 (Blu-Ray Player Region Code)
*
* @retval
* METANAV_SUCCESS if successful
* METANAV_FAILURE if unsuccessful
*/
METANAV_STATUS cMetaNav::SetPlayerRegionCodes(UCHAR ucDvdRegionCode, UCHAR ucBdromRegionCode)
{
/* store the dvd region code */
switch (ucDvdRegionCode)
{
case METANAV_DVD_REGION_1:
case METANAV_DVD_REGION_2:
case METANAV_DVD_REGION_3:
case METANAV_DVD_REGION_4:
case METANAV_DVD_REGION_5:
case METANAV_DVD_REGION_6:
case METANAV_DVD_REGION_FREE:
m_DVD_RegionCode = ucDvdRegionCode;
break;
default:
/* region selection wasn't valid */
DBGPRINT(DBG_ON(DBG_TRACE), ("SetPlayerRegionCodes: IGNORE INVALID DVD REGION SELECTION\n"));
break;
}
/* store the blu-ray region code */
switch (ucBdromRegionCode)
{
case METANAV_BDROM_REGION_A:
case METANAV_BDROM_REGION_B:
case METANAV_BDROM_REGION_C:
m_BDROM_RegionCode = ucBdromRegionCode;
break;
default:
/* region selection wasn't valid */
DBGPRINT(DBG_ON(DBG_TRACE), ("SetPlayerRegionCodes: IGNORE INVALID BDROM REGION SELECTION\n"));
break;
}
/* Set system parameter in active nav */
switch (m_MediaFormat)
{
case MEDIA_FORMAT_DVD_A:
case MEDIA_FORMAT_DVD_V:
if (m_DVD_RegionCode != METANAV_USE_DEFAULT_REGION_CODE)
{
DBGPRINT(DBG_ON(DBG_TRACE), ("SetPlayerRegionCodes: SET REGION CODE %d\n", m_DVD_RegionCode));
DvdAppSetPlayerRegionCode(m_DVD_RegionCode);
}
else
{
DBGPRINT(DBG_ON(DBG_TRACE), ("SetPlayerRegionCodes: SET DEFAULT REGION CODE\n"));
DvdAppSetPlayerRegionCode(DVD_SPRM_REGION_DEFAULT);
}
break;
#ifdef BDROM_ENABLE
case MEDIA_FORMAT_BDROM:
if (m_BDROM_RegionCode != METANAV_USE_DEFAULT_REGION_CODE)
{
DBGPRINT(DBG_ON(DBG_TRACE), ("SetPlayerRegionCodes: SET REGION CODE %d\n", m_BDROM_RegionCode));
BDROMAppSetPlayerRegionCode(m_BDROM_RegionCode);
}
else
{
DBGPRINT(DBG_ON(DBG_TRACE), ("SetPlayerRegionCodes: SET DEFAULT REGION CODE\n"));
BDROMAppSetPlayerRegionCode(BDROM_PSR_REGION_DEFAULT);
}
break;
#endif
default:
/* other players do not have a region code */
break;
}
return (METANAV_SUCCESS);
}
/**
* Update the navigator with current menu language configuration setting.
*
* @param
* none
*
* @retval
* none
*/
void cMetaNav::UpdateMenuLanguage(void)
{
/* Set system parameter in active nav */
switch (m_MediaFormat)
{
case MEDIA_FORMAT_DVD_A:
case MEDIA_FORMAT_DVD_V:
DvdAppSetMenuLanguage(m_pConfigSettings->dvd_menu_language);
break;
#ifdef VR_ENABLE
case MEDIA_FORMAT_VR:
break;
#endif
#ifdef BDROM_ENABLE
case MEDIA_FORMAT_BDROM:
BDROMAppSetMenuLanguage(m_pConfigSettings->dvd_menu_language);
break;
#endif
default:
break;
}
}
/**
* Update the navigator with current audio language configuration setting.
*
* @param
* none
*
* @retval
* none
*/
void cMetaNav::UpdateAudioLanguage(void)
{
/* Set system parameter in active nav */
switch (m_MediaFormat)
{
case MEDIA_FORMAT_DVD_A:
case MEDIA_FORMAT_DVD_V:
DvdAppSetAudioLanguage(m_pConfigSettings->audio_language);
break;
#ifdef VR_ENABLE
case MEDIA_FORMAT_VR:
break;
#endif
#ifdef BDROM_ENABLE
case MEDIA_FORMAT_BDROM:
BDROMAppSetAudioLanguage(m_pConfigSettings->audio_language);
break;
#endif
default:
break;
}
}
/**
* Update the navigator with current subtitle language configuration setting.
*
* @param
* none
*
* @retval
* none
*/
void cMetaNav::UpdateSubtitleLanguage(void)
{
/* Set system parameter in active nav */
switch (m_MediaFormat)
{
case MEDIA_FORMAT_DVD_A:
case MEDIA_FORMAT_DVD_V:
DvdAppSetSubtitleLanguage(m_pConfigSettings->subtitle_language);
break;
#ifdef VR_ENABLE
case MEDIA_FORMAT_VR:
break;
#endif
#ifdef BDROM_ENABLE
case MEDIA_FORMAT_BDROM:
BDROMAppSetSubtitleLanguage(m_pConfigSettings->subtitle_language);
break;
#endif
default:
break;
}
}
/**
* Update the navigator with current country code configuration setting.
*
* @param
* none
*
* @retval
* none
*/
void cMetaNav::UpdateCountryCode(void)
{
/* Set system parameter in active nav */
switch (m_MediaFormat)
{
case MEDIA_FORMAT_DVD_A:
case MEDIA_FORMAT_DVD_V:
DvdAppSetCountry(m_pConfigSettings->country);
break;
#ifdef VR_ENABLE
case MEDIA_FORMAT_VR:
break;
#endif
#ifdef BDROM_ENABLE
case MEDIA_FORMAT_BDROM:
BDROMAppSetCountryCode(m_pConfigSettings->country);
break;
#endif
default:
break;
}
}
/**
* Update the navigator with current parental level configuration setting.
*
* @param
* none
*
* @retval
* none
*/
void cMetaNav::UpdateParentalLevel(void)
{
/* Set system parameter in active nav */
switch (m_MediaFormat)
{
case MEDIA_FORMAT_DVD_A:
case MEDIA_FORMAT_DVD_V:
/*
* Check if parental protect setting is on. If it is turned off then
* set the parental level to off (value of 0).
*/
if (m_pConfigSettings->parental_on_off == PARENTAL_OFF)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -