📄 uiop_lib.c
字号:
else if(gcs.pstate == PST_SLOW)
_UIOPLib_Play();//resume play from slow mode
#endif //D_ENABLE_ENTER_KEY_AS_PLAY_IN_SLOWMODE
else
{
PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
}
}
#endif // D_CUSTOM__UIOPLib_Enter
#ifndef D_CUSTOM__UIOPLib_SkipF
/****************************************************************************************************
* Function : _UIOPLib_SkipF
*
* Input :
*
* Output : None
*
* Return : None
*
* Description : Executes user requested operation and updates the UI messages accordingly
*
****************************************************************************************************/
static void _UIOPLib_SkipF(void)
{
#if defined(DVD_AUDIO_SUPPORT) && defined(DVD_AUDIO_INDEX)
if((g_disc_type == DEC_DISC_TYPE_DVD_AUDIO)
&& (gcs.pstate != PST_STOP)
&& (IS_COP_ENABLE(COP_DVDA_INDEX_SEARCH))
&& !SI_DVDA_LAST_INDEX)
{
_UIOPLib_NextIndex();
return;
}
#endif//defined(DVD_AUDIO_SUPPORT) && defined(DVD_AUDIO_INDEX)
#ifdef USE_SKIPF_KEY_FOR_STEPF_KEY_IN_PAUSE_MODE
if ( (gcs.pstate == PST_PAUSE) && (IS_COP_ENABLE(COP_STEP)) )
{
_UIOPLib_StepForward();
return;
}
#endif//USE_SKIPF_KEY_FOR_STEPF_KEY_IN_PAUSE_MODE
//if ((DEC_DISC_TYPE_DVD_VIDEO == g_disc_type) && !PCI_DECODED && (PST_STOP != gcs.pstate))
//return;
if (!IS_COP_ENABLE(COP_NEXT_CHAPTER))
{
if (!CoreAPI_IsNextChapterTrackAvailable())
PROHIBIT(MSG_PROHIBIT_NO_NEXT_ITEM);
else
PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
return;
}
else if(PST_STOP == gcs.pstate)
{
PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
return;
}
else if (CoreAPI_IsRepeatABA() || CoreAPI_IsRepeatABB()
#ifdef D_PROHIBIT_SKIP_IN_SINGLE_REPEAT_NONCLIPS
|| CoreAPI_IsRepeatSingle()
#endif //D_PROHIBIT_SKIP_IN_SINGLE_REPEAT_NONCLIPS
)
{
PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
return;
}
MS_SendOp(MS_OP_MSG_PLAYSTATE_NEXT, 0);
CoreAPI_Skip(TRUE);
}
#endif // D_CUSTOM__UIOPLib_SkipF
#ifndef D_CUSTOM__UIOPLib_SkipB
/****************************************************************************************************
* Function : _UIOPLib_SkipB
*
* Input :
*
* Output : None
*
* Return : None
*
* Description : Executes user requested operation and updates the UI messages accordingly
*
****************************************************************************************************/
static void _UIOPLib_SkipB(void)
{
#if defined(DVD_AUDIO_SUPPORT) && defined(DVD_AUDIO_INDEX)
if((g_disc_type == DEC_DISC_TYPE_DVD_AUDIO)
&& (gcs.pstate != PST_STOP)
&& (IS_COP_ENABLE(COP_DVDA_INDEX_SEARCH))
&& !SI_DVDA_FIRST_INDEX)
{
_UIOPLib_PrevIndex();
return;
}
#endif//defined(DVD_AUDIO_SUPPORT) && defined(DVD_AUDIO_INDEX)
//if ((DEC_DISC_TYPE_DVD_VIDEO == g_disc_type) && !PCI_DECODED && (PST_STOP != gcs.pstate))
//return;
if (!IS_COP_ENABLE(COP_PREVIOUS_CHAPTER))
{
if (!CoreAPI_IsPrevChapterTrackAvailable())
PROHIBIT(MSG_PROHIBIT_NO_PREV_ITEM);
else
PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
return;
}
else if(PST_STOP == gcs.pstate)
{
PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
return;
}
else if (CoreAPI_IsRepeatABA() || CoreAPI_IsRepeatABB()
#ifdef D_PROHIBIT_SKIP_IN_SINGLE_REPEAT_NONCLIPS
|| CoreAPI_IsRepeatSingle()
#endif //D_PROHIBIT_SKIP_IN_SINGLE_REPEAT_NONCLIPS
)
{
PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
return;
}
MS_SendOp(MS_OP_MSG_PLAYSTATE_PREV, 0);
CoreAPI_Skip(FALSE);
}
#endif // D_CUSTOM__UIOPLib_SkipB
#ifndef D_CUSTOM__UIOPLib_FastF
/****************************************************************************************************
* Function : _UIOPLib_FastF
*
* Input :
*
* Output : None
*
* Return : None
*
* Description : Executes user requested operation and updates the UI messages accordingly
*
****************************************************************************************************/
static void _UIOPLib_FastF(void)
{
dbg_printf(("_UIOPLib_FastF()\n"));
_UIOPLib_Scan(ScanForward);
}
#endif // D_CUSTOM__UIOPLib_FastF
#ifndef D_CUSTOM__UIOPLib_FastB
/****************************************************************************************************
* Function : _UIOPLib_FastB
*
* Input :
*
* Output : None
*
* Return : None
*
* Description : Executes user requested operation and updates the UI messages accordingly
*
****************************************************************************************************/
static void _UIOPLib_FastB(void)
{
dbg_printf(("_UIOPLib_FastB()\n"));
_UIOPLib_Scan(ScanBackward);
}
#endif // D_CUSTOM__UIOPLib_FastB
#ifndef D_CUSTOM__UIOPLib_Menu
/****************************************************************************************************
* Function : _UIOPLib_Menu
*
* Input :
*
* Output : None
*
* Return : None
*
* Description : Executes user requested operation and updates the UI messages accordingly
*
****************************************************************************************************/
static void _UIOPLib_Menu(void)
{
EVENT evt = 0;
void *param = NULL;
// <<< Stivenz_0301_2005: Merge from I64_Ruby;
#ifdef D_ALWAYS_ENABLE_TITLE_MENU_RESUME
if( (IS_COP_ENABLE(COP_ROOT_MENU))||(DEC_DISC_TYPE_DVD_VIDEO==g_disc_type) )
#else // D_ALWAYS_ENABLE_TITLE_MENU_RESUME
if (IS_COP_ENABLE( COP_ROOT_MENU ))
#endif // D_ALWAYS_ENABLE_TITLE_MENU_RESUME
{
if (PM_IsPlaybackProgram(PM_GetPlaybackMode()))
{
PM_SetPlaybackMode((BYTE) PM_PLAYBACK_NORMAL);
ie_send(IE_CORE_SEAMLESS_MODE_CHANGE);
}
evt = IE_CORE_ROOT_MENU;
if(CoreAPI_IsDVDRootMenuResumePlay())
{
MS_SendOp(MS_OP_MSG_PLAYSTATE_RESUME_PLAY, 0);
}
else
MS_SendOp(MS_OP_MSG_PLAYSTATE_ROOT_MENU, 0);
}
else
{
PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
}
_UIOPLib_Send_Event(evt,param);
}
#endif // D_CUSTOM__UIOPLib_Menu
#ifndef D_CUSTOM__UIOPLib_Title
/****************************************************************************************************
* Function : _UIOPLib_Title
*
* Input :
*
* Output : None
*
* Return : None
*
* Description : Executes user requested operation and updates the UI messages accordingly
*
****************************************************************************************************/
static void _UIOPLib_Title(void)
{
EVENT evt = 0;
void *param = NULL;
#ifdef DVD_VR_SUPPORT
if((MEDIA_TYPE_DVDVR == CoreAPI_GetCurrentMediaType()) && (PST_STOP == gcs.pstate))
{
_UIOPLib_Send_Event(evt, param);
return;
}
#endif // DVD_VR_SUPPORT
// <<< Stivenz_0301_2005: Merge from I64_Ruby;
#ifdef D_ALWAYS_ENABLE_TITLE_MENU_RESUME
if( (IS_COP_ENABLE(COP_TITLE_MENU))||(MEDIA_TYPE_DVD_VIDEO == CoreAPI_GetCurrentMediaType() )
#else // D_ALWAYS_ENABLE_TITLE_MENU_RESUME
if (IS_COP_ENABLE( COP_TITLE_MENU ))
#endif // D_ALWAYS_ENABLE_TITLE_MENU_RESUME
{
if (IS_DISC_TYPE_DVD)
{
if (PM_IsPlaybackProgram(PM_GetPlaybackMode()))
{
PM_SetPlaybackMode((BYTE) PM_PLAYBACK_NORMAL);
ie_send(IE_CORE_SEAMLESS_MODE_CHANGE);
}
evt= IE_CORE_TITLE_MENU;
if(CoreAPI_IsDVDTitleMenuResumePlay())
{
MS_SendOp(MS_OP_MSG_PLAYSTATE_RESUME_PLAY, 0);
}
else
MS_SendOp(MS_OP_MSG_PLAYSTATE_TITLE_MENU, 0);
}
else
{
PROHIBIT(MSG_PROHIBIT_NOT_SUPPORTED_BY_DISC);
}
}
else
{
PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
}
_UIOPLib_Send_Event(evt,param);
}
#endif // D_CUSTOM__UIOPLib_Title
#ifndef D_CUSTOM__UIOPLib_PBC
/****************************************************************************************************
* Function : _UIOPLib_PBC
*
* Input :
*
* Output : None
*
* Return : None
*
* Description : Executes user requested operation and updates the UI messages accordingly
*
****************************************************************************************************/
static void _UIOPLib_PBC(void)
{
dbg_printf(("_UIOPLib_PBC()\n"));
if ( CoreAPI_IsPBCAvailabe())
{
#ifdef D_PRESSED_AGAIN
if( SCREENPROC_MessageIsDisplayed(MS_OP_MSG_SYS_PBC))
#endif
{
PM_SetPlaybackMode(PM_PLAYBACK_NORMAL);
#ifdef D_GINGER_I96
if(!CoreAPI_IsRepeatABOff())
{
MS_SendOp(MS_OP_MSG_PLAYMODE_REPEAT_AB, PM_REPEAT_AB_OFF);
CoreAPI_SetABRepeatMode(FALSE);
}
#endif //D_GINGER_I96
if (PM_IsPBC(PM_GetPlaybackMode()))
{
MS_SendOp(MS_OP_MSG_SYS_PBC, 0);
PM_SetPBC(FALSE);
}
else
{
MS_SendOp(MS_OP_MSG_SYS_PBC, 1);
PM_SetPBC(TRUE);
}
}
#ifdef D_PRESSED_AGAIN
else
{
if (PM_IsPBC(PM_GetPlaybackMode()))
{
MS_SendOp(MS_OP_MSG_SYS_PBC, 1);
}
else
{
MS_SendOp(MS_OP_MSG_SYS_PBC, 0);
}
}
#endif
CoreAPI_ChangePlaybackMode();
}
else
{
PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_BY_DISC);
}
}
#endif // D_CUSTOM__UIOPLib_PBC
#ifndef D_CUSTOM__UIOPLib_MarkAB
/****************************************************************************************************
* Function : _UIOPLib_MarkAB
*
* Input :
*
* Output : None
*
* Return : None
*
* Description : Executes user requested operation and updates the UI messages accordingly
*
****************************************************************************************************/
static void _UIOPLib_MarkAB(void)
{
dbg_printf(("_UIOPLib_MarkAB()\n"));
if (IS_DISC_TYPE_DVD)
{
if (!IS_COP_ENABLE(COP_ABREPEAT)
#ifdef D_SUPPORT_ABREPEAT_ONLY_INPLAY
|| (gcs.pstate != PST_PLAY)
#else // D_SUPPORT_ABREPEAT_ONLY_INPLAY
|| (gcs.pstate == PST_STOP)
|| (gcs.pstate == PST_STILL)
#endif // D_SUPPORT_ABREPEAT_ONLY_INPLAY
|| CoreAPI_IsInMenu()
|| RESTRICTED_ACCESS)
{
PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
return;
}
}
else if((DEC_DISC_TYPE_VCD == g_disc_type) || (DEC_DISC_TYPE_SVCD == g_disc_type))
{
if ((!SI_SVCD_IS_REPEATAB_AVAILABLE)
#ifdef D_SUPPORT_ABREPEAT_ONLY_INPLAY
|| (gcs.pstate != PST_PLAY)
#else // D_SUPPORT_ABREPEAT_ONLY_INPLAY
|| (gcs.pstate == PST_STOP)
|| (gcs.pstate == PST_STILL)
#endif // D_SUPPORT_ABREPEAT_ONLY_INPLAY
)
{
PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
return;
}
}
#if D_SUPPORT_SACD
else if (DEC_DISC_TYPE_SACD == g_disc_type)
{
if((gcs.pstate == PST_STOP) || (gcs.pstate == PST_STILL)
#ifdef D_SUPPORT_ABREPEAT_ONLY_INPLAY
|| (gcs.pstate != PST_PLAY)
#endif // D_SUPPORT_ABREPEAT_ONLY_INPLAY
)
{
PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
return;
}
}
#endif // D_SUPPORT_SACD
if ( CoreAPI_IsRepeatABB() )
{
// User is cancelling AB
MS_SendOp(MS_OP_MSG_PLAYMODE_REPEAT_AB, PM_REPEAT_AB_OFF);
CoreAPI_SetABRepeatMode(FALSE);
usleep(500000UL); //Make sure core receive the event
}
else if ( CoreAPI_IsRepeatABA() )
{
//LX0609: at leat 3 seconds gap for A2B
if (( g_disc_type == DEC_DISC_TYPE_DVD_VIDEO ) &&
( (g_pDVDNav->dvd.Bookmark.pgc_time - g_pDVDNav->dwBookMarkATime) < 1) && ( g_pDVDNav->dsi.dsi_gi.VOBU_1STREF_EA != 0))
return; //LX082202: Change to 1 second gap and check if there is motion pictures
// User has just selected B
MS_SendOp(MS_OP_MSG_PLAYMODE_REPEAT_AB, PM_REPEAT_AB_B);
CoreAPI_SetABRepeatMode(TRUE);
usleep(500000UL); //Make sure core receive the event
}
else
{
// User has just selected A
MS_SendOp(MS_OP_MSG_PLAYMODE_REPEAT_AB, PM_REPEAT_AB_A);
CoreAPI_SetABRepeatMode(TRUE);
usleep(500000UL); //Make sure core receive the event
}
}
#endif // D_CUSTOM__UIOPLib_MarkAB
#ifndef D_CUSTOM__UIOPLib_StepForward
/****************************************************************************************************
* Function : _UIOPLib_StepForward
*
* Input :
*
* Output : None
*
* Return : None
*
* Description : Executes user requested operation and updates the UI messages accordingly
*
****************************************************************************************************/
static void _UIOPLib_StepForward(void)
{
dbg_printf(("_UIOPLib_StepForward()\n"));
if ( (gcs.pstate == PST_PLAY)
||(gcs.pstate == PST_SCAN)
|| (gcs.pstate == PST_SLOW)
|| (gcs.pstate == PST_STILL)
)
{
if (IS_COP_ENABLE(COP_PAUSE) && !CoreAPI_IsInMenu() )
{
MS_SendOp(MS_OP_MSG_PLAYSTATE_STEP, 0);
CoreAPI_Pause();
return;
}
}
if ( !IS_COP_ENABLE(COP_PAUSE) || !IS_COP_ENABLE(COP_STEP) || (PST_PAUSE != gcs.pstate) )
{
PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
return;
}
MS_SendOp(MS_OP_MSG_PLAYSTATE_STEP, 0);
CoreAPI_Step(TRUE);
}
#endif // D_CUSTOM__UIOPLib_StepForward
#ifndef D_CUSTOM__UIOPLib_Pause
/****************************************************************************************************
* Function : _UIOPLib_Pause
*
* Input :
*
* Output : None
*
* Return : None
*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -