📄 key_handler_dvdv.c
字号:
/******************************************************************************
* Filename : Change_key_dvdv.c
* Start : 2002. 11. 6.
* By : Taejin Kwon
* Contact : tj1kwon@samsung.co.kr
* Description : Key to UI command for dvd video.
******************************************************************************
*/
/******************************************************
* INCLUDES
*****************************************************/
#include "Basic_typedefs.h"
#include "CUSTOM/Custom_option.h"
#include "OS/OS_abstract.h"
#include "API/SH_types.h"
#include "API/SH_api.h"
#include "COMMON/Common.h"
#include "MAIN/Appl_types.h"
#include "MAIN/Global_state.h"
#include "MAIN/Uop_msg.h"
#include "CUSTOM/Osd_types.h"
#include "CUSTOM/Osd_if.h"
#include "CUSTOM/Key_handler_setup.h"
#include "CUSTOM/Key_receive.h"
#include "CUSTOM/Key_defs.h"
#include "CUSTOM/Key_2_uop.h"//for removing warnings
#include "DRIVER/FS/Fs_api.h"
#include "MAIN/DVD/Dvd_predef.h"
#include "MAIN/DVD/Dvd_common.h"
#include "MAIN/MMP/Mmp_common.h"
/******************************************************
* Global variables / functions
*****************************************************/
/******************************************************
* Extern variables
*****************************************************/
extern SysQueue_t gQ_gui;
/******************************************************
* functions
*****************************************************/
VOID GuiDvdvSkip( UCHAR param );
VOID GuiDvdvSlow( UCHAR data,UCHAR param );
VOID GuiDvdvScan( UCHAR data,UCHAR param );
VOID GuiDvdvMenu( UCHAR param );
VOID GuiDvdvUpDown( UCHAR param );
VOID GuiDvdvLeftRight( UCHAR param );
VOID GuiDvdvAudSubtAngleId( UCHAR param );
VOID GuiDvdvDefaultEnter(VOID);
BOOL GuiDvdvHandleSpecialOsd(UCHAR data);
BOOL GuiDvdvUpdateAudio(VOID);
BOOL GuiDvdvUpdateSubtitle(VOID);
BOOL GuiDvdvUpdateAngle( VOID );
extern BYTE1 GetDvdvCMDState(void);
extern VOID GetDvdvInfoInAppLayer(DvdVideoInfo_t* dvdv);
extern INLINE OSD_MainType_et GetDisplayMainState( VOID );
extern VOID GuiDualMonoOn(VOID);
extern VOID OsdSelTimerSet( SysTimeTick_t time, SysEnable_t set );
#if _APP_CAP_NAV_DVD_VIDEO
/******************************************************************************
* Function name : ChangeKeyToDvdvCommand
* By : Liu renliang
* Revisions :
******************************************************************************
*/
VOID ChangeKeyToDvdvCommand( UCHAR data, UCHAR param )
{
if( GuiDvdvHandleSpecialOsd(data) ) /* (yanglu, 051024) */
return;
switch(data)
{
#if _APP_CAP_FUNC_SLOW_REV
case RC_KEY_REV_STEP:
GuiDvdvReverseStep(param);
break;
#endif
case RC_KEY_NUM0:
case RC_KEY_NUM1:
case RC_KEY_NUM2:
case RC_KEY_NUM3:
case RC_KEY_NUM4:
case RC_KEY_NUM5:
case RC_KEY_NUM6:
case RC_KEY_NUM7:
case RC_KEY_NUM8:
case RC_KEY_NUM9:
case RC_KEY_NUM10:
NumberKeyControl( data );
break;
case RC_KEY_PREV:
case RC_KEY_NEXT:
GuiDvdvSkip(data);
break;
case RC_KEY_SLOW_FWD:
case RC_KEY_SLOW_REV:
GuiDvdvSlow( data, param);
break;
case RC_KEY_FF:
case RC_KEY_FR:
GuiDvdvScan(data,param);
break;
case RC_KEY_ROOT_MENU:
case RC_KEY_TITLE_MENU:
GuiDvdvMenu(data);
break;
case RC_KEY_UP:
case RC_KEY_DOWN:
GuiDvdvUpDown(data);
break;
case RC_KEY_LEFT:
case RC_KEY_RIGHT:
GuiDvdvLeftRight(data);
break;
case RC_KEY_SETUP:
GuiSetUp( );
break;
case RC_KEY_ENTER:
GuiDvdvEnter(param);
break;
#if _APP_CAP_AUD_KARAOKE
case RC_KEY_KARAOKE: /* Merge code (yanglu, 051025) */
#if !_APP_CAP_AUD_KARAOKE_IN_DTS
if(DvdExt_GetDvdvAudioCodingMode() == C_MODE_DTS)
{
ToggleKaraokeSetting();
OSD_SetIconDisplay(ICON_WARNING, NULL, SYS_NO_WAIT);
}
else
#endif
GuiKaraoke();
break;
#endif
case RC_KEY_DUALMONO:
GuiDualMonoOn();
break;
case RC_KEY_AUDIO:
case RC_KEY_SUBTITLE:
case RC_KEY_ANGLE:
GuiDvdvAudSubtAngleId(data);
break;
case RC_KEY_DISPLAY:
GuiDvdvDisplay(param);
break;
case RC_KEY_SEARCH:
GuiInfoGoto(param);
break;
case RC_KEY_SCREEN_DISPLAY:
break;
case RC_KEY_PAUSE:
UiCmdGeneral( UOP_PAUSE);
break;
case RC_KEY_STEP:
GuiDvdvStep( param);
break;
#if _APP_CAP_FUNC_BOOKMARK
case RC_KEY_BOOKMARK:
GuiBookMark();
break;
#endif
case RC_KEY_RETURN:
GuiDvdvReturn( param);
break;
case RC_KEY_ZOOM:
GuiZoom();
break;
#if _APP_CAP_KEY_USE_CLEAR
case RC_KEY_CLEAR:
GuiClear();
break;
#endif
#if _APP_CAP_OSD_3D
case RC_KEY_3D:
Gui3DId(param);
break;
#endif
break;
#if _APP_CAP_AUD_REVERBERATION
case RC_KEY_REVERBRATION:
GuiReverbration(param);
break;
#endif
case RC_KEY_PLAY:
GuiDvdvPlay( param);
break;
case RC_KEY_STOP:
GuiStop( param);
break;
#if _APP_CAP_FUNC_INSTANT_PLAY
case RC_KEY_INST_SKIP:
GuiDvdvInstantSkip(param);
break;
case RC_KEY_INST_REPLAY:
GuiDvdvInstantReplay(param);
break;
#endif
#if _APP_CAP_FUNC_DISPLAY_FIT
case RC_KEY_FIT_DISPLAY:
GuiDvdvDisplayFit(param);
break;
#endif
#if _APP_CAP_KEY_TIME_KEY
case RC_KEY_TIME:
SysPrintf("\n[LS] RC_KEY_TIME input\n");
/* Merge code (yanglu, 051024) */
#if !(_USE_5010 || _USE_5009)
if( IsDvdFullStopMode() )
OSD_SetIconDisplay(ICON_WARNING, NULL, SYS_NO_WAIT);
else
#endif
OSD_SetMainDisplay(DISPLAY_TIME, SYS_WAIT);
break;
#endif
default:
OSD_SetIconDisplay(ICON_WARNING, NULL, SYS_NO_WAIT);
break;
}
}
/******************************************************************************
Function name : IsMenuDomainKeyForbidden
* Arguments :
* Return : BOOL
* By :
* Description : Added by Qian liping 050804
Used to forbidden some key in Menu domain.
* Revisions :
******************************************************************************
*/
BOOL IsMenuDomainKeyForbidden( UCHAR data )
{
Domain_t domain;
domain = GetDvdDomain();
if( (domain == DVD_DOM_VTSM) || (domain == DVD_DOM_VMGM) )
{
if( IS_INVALID_KEY_IN_MENU_DOMAIN(data) )
{
OSD_SetIconDisplay(ICON_WARNING, NULL, SYS_NO_WAIT);
return TRUE;
}
}
return FALSE;
}
/* Merge code(yanglu, 051028) */
BOOL GuiDvdvHandleKeysWithBtn( UCHAR data )
{
if( IS_NUM_KEY(data) )
{
NumberKeyControl( data );
}
else if( IS_DIRECTION_KEY(data) )
{
#if _APP_CAP_NAV_DVD_AUDIO
if(GetDiscState() == DVDA_DISC)
UiCmdGeneral( ( UOP_DVDA_BTN_UP + ( data - RC_KEY_UP )));
else
#endif
UiCmdGeneral( UOP_DVDV_BTN_UP + ( data - RC_KEY_UP ));
if( gOSD_state.etCur_icon == ICON_NUMERIC )
{
OSD_SetIconDisplay(ICON_CLEAR, NULL, SYS_NO_WAIT);
}
}
else if( data == RC_KEY_ENTER )
{
GuiDvdvDefaultEnter();
}
else if( data == RC_KEY_PLAY )
{
if( (GetMainState() >= MAIN_PAUSE && GetMainState() <= MAIN_SR) )
UiCmdGeneral( UOP_PLAY );
else
GuiDvdvDefaultEnter();
}
else
{
return FALSE;
}
return TRUE;
}
/******************************************************************************
* Function name : GuiDvdvHandleSpecialOsd
* Arguments :
* Return : BOOL
* By : QQ
* Description :
* Revisions :
******************************************************************************
*/
BOOL GuiDvdvHandleSpecialOsd(UCHAR data) /* Merge code(yanglu, 051024) */
{
OSD_State_st *osd_state;
OsdCtrl_st ctrl;
BOOL flag;
BOOL return_val = TRUE;
osd_state = OSD_GetState();
if( osd_state->etCur_dsp == DISPLAY_OFF ||
( osd_state->etCur_dsp == DISPLAY_INFO && osd_state->etInfo_sub == INFO_SUB_NONE) )
{
if( GetDvdButtonSelectionState() != DVD_BTN_NONE )
{
if( GuiDvdvHandleKeysWithBtn( data ) )
{
return TRUE;
}
}
}
switch( osd_state->etCur_dsp )
{
case DISPLAY_ADULT_CONFIRM:
flag = GetAdultLevelChangeState();
switch( data )
{
case RC_KEY_UP:
case RC_KEY_DOWN:
SetAdultLevelChangeState( !flag );
ctrl.p.toggle = !flag;
OSD_ChangeDisplay( OSD_CTRL_ADULT_SET, &ctrl, SYS_NO_WAIT );
break;
case RC_KEY_ENTER:
if( flag )
{
InitTempValueState();
OSD_SetMainDisplay(DISPLAY_ADULT_PSWD_CHECK, SYS_WAIT);
}
else {
OSD_SetMainDisplay(DISPLAY_OFF, SYS_WAIT);
UiDvdvPassword( FALSE );
}
break;
default:
OSD_SetIconDisplay(ICON_WARNING, NULL, SYS_NO_WAIT);
break;
}
break;
case DISPLAY_ADULT_PSWD_CHECK:
if( IS_NUM_KEY(data) )
NumberKeyControl( data );
else
OSD_SetIconDisplay(ICON_WARNING, NULL, SYS_NO_WAIT);
break;
case DISPLAY_ADULT_PSWD_ERROR:
break;
#if _APP_CAP_FUNC_BOOKMARK
case DISPLAY_BOOKMARK:
return_val = ( GuiHandleKeysInBookmarkOsd( data ) );
break;
#endif
#if _APP_CAP_OSD_3D
case DISPLAY_3D:
return_val = ( GuiHandleKeysIn3DOsd( data ) );
break;
#endif
case DISPLAY_AUDIO: //wanglin 20060330
if(data == RC_KEY_AUDIO)
return_val = GuiDvdvUpdateAudio();
else
return_val = FALSE;
break;
case DISPLAY_SUBTITLE: //wanglin 20060330
if(data == RC_KEY_SUBTITLE)
return_val = GuiDvdvUpdateSubtitle();
else
return_val = FALSE;
break;
case DISPLAY_ANGLE: //wanglin 20060407
if(data == RC_KEY_ANGLE)
return_val = GuiDvdvUpdateAngle();
else
return_val = FALSE;
break;
default:
return_val = FALSE;
break;
}
return return_val;
}
/******************************************************************************
*
* By QQ 050818
*
******************************************************************************
*/
#if _APP_CAP_KEY_QUICK_RESPONSE_NEXT_PREV//By QQ 0508019
BOOL GuiDvdvSkipModeHandleInProgramMode(UCHAR param)
{
BYTE2 temp;
if(GetNextPrevFlag() == FALSE)
{
SetNextPrevFlag(TRUE);
SetNextPrevSearchValue(gDvd_program.cur_index);
}
SetNextPrevTimer(TIMER_ENABLE);
temp = GetNextPrevSearchValue();
if (param==RC_KEY_NEXT)
{
if( temp < (gDvd_program.num_program -1) )
{
temp++;
}
else if( GetDvdvRepeatState() == REPEAT_SUB_TITLE )
{
temp = 0;
}
}
else
{
if(temp>0)
{
temp --;
}
}
SetNextPrevSearchValue(temp);
return TRUE;
}
BOOL GuiDvdvSkipModeHandleInNormalMode(UCHAR param)
{
DvdVideoInfo_t dvdv;
BYTE2 temp;
BOOL is_sequential_playback;
GetDvdvInfoInAppLayer(&dvdv);
is_sequential_playback = IsCurrentPgcSequentialMode();
if( !is_sequential_playback )
{
if (param==RC_KEY_NEXT)
UiCmdGeneral( UOP_DVDV_NEXT_PG );
else
UiCmdGeneral( UOP_DVDV_PREV_PG );
return TRUE;
}
if(GetNextPrevFlag() == FALSE)
{
SetNextPrevFlag(TRUE);
SetNextPrevSearchValue(dvdv.cur_chapter);
}
SetNextPrevTimer(TIMER_ENABLE);
temp = GetNextPrevSearchValue();
if (param==RC_KEY_NEXT)
{
if(temp < 0xFFFF)
{
if(temp < dvdv.total_chapter)
{
temp++;
}
else
{
if( GetDvdvRepeatState() == REPEAT_SUB_TITLE )
temp = 1;
else
temp = 0xFFFF; /* 0xFFFF is only used to skip to the next TT */
}
}
}
else
{
if(temp > 0)
{
temp --; /* 0x0 is only used to skip to the prev TT */
}
}
SetNextPrevSearchValue(temp);
return TRUE;
/* >>> @: 5008CHN-XXX.QQ 050818 */
}
BOOL GuiDvdvSkipModeHandleInRandomMode(UCHAR param)
{
if (param==RC_KEY_PREV)
UiCmdGeneral( UOP_DVDV_PREV_PG );
else
UiCmdGeneral(UOP_DVDV_NEXT_PG);
return TRUE;
}
BOOL GuiDvdvSkipModeHandle(UCHAR param)
{
GuiDvdvSkipModeModeFunction GuiDvdvSkipModeModeFunction_temp[] =
{
GuiDvdvSkipModeHandleInNormalMode,
GuiDvdvSkipModeHandleInRandomMode,
GuiDvdvSkipModeHandleInProgramMode,
};
return GuiDvdvSkipModeModeFunction_temp[GetDvdvPlayMode()](param);
}
VOID GuiDvdvSkip( UCHAR param )//By QQ 050819
{
DvdVideoInfo_t dvdv;
BOOL IsNext;
if( param == RC_KEY_NEXT )
IsNext = TRUE;
else
IsNext = FALSE;
GetDvdvInfoInAppLayer(&dvdv);
SetTempValueSetFlag( FALSE );
InitTempValueState();
/* Handle Skip key in Menu domain or RepeatCH case */
if(GetDvdDomain() == DVD_DOM_VTSM || GetDvdDomain() == DVD_DOM_VMGM || GetDvdvRepeatState() == REPEAT_SUB_CHAPTER)
{
if (param==RC_KEY_PREV)
UiCmdGeneral( UOP_DVDV_PREV_PG );
else
UiCmdGeneral( UOP_DVDV_NEXT_PG );
return;
}
/* Prohibit if nav is responsing previous Skip keys */
if(!IsSkipAllowed(IsNext))
{
OSD_SetIconDisplay(ICON_WARNING, NULL, SYS_NO_WAIT);
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -