📄 clips_runtime.c
字号:
{
if(CoreAPI_IsDivX6MenuDomainPlay() || CoreAPI_IsDivX6TitleDomainPlay())
{
ActionEngine_CurrItemGotoTitleMenu(FgActionEnginePtr);
return MS_OP_NONE;
}
else if(CoreAPI_IsDivX6MenuDomainLoading() || CoreAPI_IsDivX6TitleDomainLoading())
return MS_OP_NONE;
}
break;
case MS_OP_SKIPB: // Fall Through !!!
case MS_OP_SKIPF:
{
// If current track is DIVX6, need to check current track have menu or not.
// When loading can not differ Divx6 from AVI type. so check like below.
if((ActionEngine_IsMPEG4Loading(FgActionEnginePtr))
&& (eClipType_AVI == ActionEngine_GetFileType(FgActionEnginePtr, ActionEngine_GetActiveItem(FgActionEnginePtr))))
{
PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
return MS_OP_NONE;
}
if(CoreAPI_IsDivX6TitleDomainPlay())
{
if(MS_OP_SKIPF == MsOp)
{
if(TRUE == ActionEngine_CurrItemNextChapter(FgActionEnginePtr))
{
MS_SendOp(MS_OP_MSG_PLAYSTATE_NEXT, 0);
return MS_OP_NONE;
}
else
{
PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
return MS_OP_NONE;
}
}
else
{
if(TRUE == ActionEngine_CurrItemPrevChapter(FgActionEnginePtr))
{
MS_SendOp(MS_OP_MSG_PLAYSTATE_PREV, 0);
return MS_OP_NONE;
}
else
{
PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
return MS_OP_NONE;
}
}
}
} // Fall Through !!!
case MS_OP_AUDIO: // Fall Through !!!
case MS_OP_SUBTITLE: // Fall Through !!!
case MS_OP_MARKAB: // Fall Through !!!
case MS_OP_FASTB: // Fall Through !!!
case MS_OP_FASTF: // Fall Through !!!
case MS_OP_SLOWF: // Fall Through !!!
case MS_OP_SLOWB: // Fall Through !!!
case MS_OP_PAUSE:
{
if(CoreAPI_IsDivX6MenuDomainPlay() || CoreAPI_IsDivX6MenuDomainLoading() || CoreAPI_IsDivX6TitleDomainLoading())
{
PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
return MS_OP_NONE;
}
}
break;
default:
break;
}
#endif // D_DIVX6_SUPPORT
// Post-processing for MP4
#ifdef IS_MP4_CAPABLE
switch(MsOp)
{
case MS_OP_NEXT_CHAPTER:
if(eClipType_MP4 == CoreAPI_GetCurrentClipType())
{
if(TRUE == ActionEngine_CurrItemNextChapter(FgActionEnginePtr))
{
MS_SendOp(MS_OP_MSG_PLAYSTATE_NEXT_CHAPTER,
(((UINT32)CoreAPI_GetCurrentChapterTrackNum())<<16)
|(UINT32)CoreAPI_GetTotalChapterTrackNum(CoreAPI_GetCurrentChapterTrackNum()) );
return MS_OP_NONE;
}
}
PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
return MS_OP_NONE;
case MS_OP_PREV_CHAPTER:
if(eClipType_MP4 == CoreAPI_GetCurrentClipType())
{
if(TRUE == ActionEngine_CurrItemPrevChapter(FgActionEnginePtr))
{
MS_SendOp(MS_OP_MSG_PLAYSTATE_PREV_CHAPTER,
(((UINT32)CoreAPI_GetCurrentChapterTrackNum())<<16)
|(UINT32)CoreAPI_GetTotalChapterTrackNum(CoreAPI_GetCurrentChapterTrackNum()) );
return MS_OP_NONE;
}
}
PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
return MS_OP_NONE;
default:
break;
}
#endif//IS_MP4_CAPABLE
// Post-processing
switch(MsOp)
{
case MS_OP_INIT:
MS_SEND_OP_OBJECT(pThis, MS_OP_FREEZE, lParam);
break;
#ifdef USE_AUX_SUBTITLES
case MS_OP_CORE_PLAY_DIVX_CLIP:
{
UINT16 wClipNum =(UINT16)lParam&0xffff;
UINT16 wDirIndex ;
MSO_OBJECT __NEAR* pObSubtitle;
if (eObjectProgramList == FgActionEnginePtr->mObjectType)
wDirIndex = ProgramList_GetParentDirIndex((PtrToProgramList)FgActionEnginePtr, wClipNum);
else //if (eObjectDirectoryBrowser == FgActionEnginePtr->mObjectType)
wDirIndex = DirBrowser_GetWorkDirIndex((PtrToDirBrowser)FgActionEnginePtr);
//create aux subtitle
pObSubtitle = MS_FindDescendant(pThis, &oAuxSubtDescriptor);
if (NULL == pObSubtitle)
{
pObSubtitle = (MSO_OBJECT __NEAR*)MS_ComponentOpen((MS_DESCRIPTOR_COMPONENT *)&oAuxSubtDescriptor,
(MSO_CONTAINER __NEAR*)pThis);
MS_ObjectMove(pObSubtitle, AREA_AUX_SUBT_X, AREA_AUX_SUBT_Y);
// MS_ObjectResize(pObSubtitle, AREA_AUX_SUBT_W, AREA_AUX_SUBT_H);
}
else
MS_SendOperation(pObSubtitle, MS_OP_MENU_STOP_DISPLAY_AUX_SUBTITLE, 0);
MS_DisplayAddObject(pObSubtitle);
#ifdef D_GUI_COMPONENT_DISPLAY
MS_ComponentClose((MS_DESCRIPTOR_COMPONENT*)&oComponentDisplay, TRUE);
#endif
MS_SendOperation((MSO_OBJECT __NEAR*)MS_GetParentPtr(pThis), MS_OP_MENU_CLOSE_POPUP_COMPONENT, 0);
#ifndef D_GUI_AUX_SUBTITLE_SELECTION_POP_UP_AFTER_RESUME_STOP
if (TRUE == ActionEngine_AmIResumeStop(FgActionEnginePtr, wClipNum) )
{
//ActionEngine_Continue(FgActionEnginePtr, wClipNum);
// Make sure we refresh the whole menu (display component might be there and will refresh itself only partially)
MS_DisplayAddObject((MSO_OBJECT __NEAR*)MS_GetParentPtr(pThis));
// Should return this message, it is meaning open Aux sel failed.
return MsOp;
}
#endif
//pop up external subtitle selection
pObSubtitle=OpenAuxSubtSelection((MSO_CONTAINER __NEAR*)pThis, wClipNum, wDirIndex);
if (NULL != pObSubtitle)
{
#ifdef D_GUI_SINGLE_LINE_COMPONENT
//before switch OSD layout and display subtitle selection we should stop current playback
//remove this after add stop in API
if(PST_STOP != ActionEngine_GetPlayState(FgActionEnginePtr))
ActionEngine_Stop(FgActionEnginePtr);
// Make sure the queue of events from UI to CORE is empty
CoreAPI_WaitForUICoreActionDone();
// Display the background logo will change the SDRAM confiruation
// !! Must do it before setting the layout
CoreAPI_DisplayLogo(eBackground);
//switch to browser layout to display this component when press next
OSDTurnOff();
// TODO: Remove, quick fix, increased from 10ms to 1s
usleep(1000000L);
MS_MenuSetOsdLayout((MS_DESCRIPTOR_MENU*)MS_MenuGetActiveMenuId());
VPU_SetOSDStatus(VPU_OSD_STATUS_START_E);
#else
CoreAPI_DisplayLogo(eBackground);
#endif // D_GUI_SINGLE_LINE_COMPONENT
MS_ObjectMove(pObSubtitle, AREA_SUBT_SELECTION_X,AREA_SUBT_SELECTION_Y);
MS_DisplayObject(pThis);
return MS_OP_NONE;
}
}
break;
#endif //USE_AUX_SUBTITLES
#if defined(D_GUI_SINGLE_LINE_COMPONENT)
case MS_OP_MENU_CLIPS_SET_LAYOUT_RUNTIME:
OSDTurnOff();
usleep(10000);
_LayoutRuntime();
VPU_SetOSDStatus(VPU_OSD_STATUS_START_E);
// Make sure we refresh the whole menu (display component might be there and will refresh itself only partially)
MS_DisplayAddObject(pThis);
return MS_OP_NONE;
#endif //defined(D_GUI_SINGLE_LINE_COMPONENT)
#ifdef D_GUI_COMPONENT_DISPLAY
case MS_OP_DISPLAY:
{
if (CoreAPI_IsMenuAllowedDisplay()
&& (PST_STOP != ActionEngine_GetPlayState(FgActionEnginePtr)
|| PST_STOP != ActionEngine_GetPlayState(BgActionEnginePtr)) // In simultaneous mode, When Last Jpeg.
&& (!ActionEngine_IsMPEG4Loading(FgActionEnginePtr)))
{
MSO_OBJECT __NEAR *pObjectDisplay;
pObjectDisplay = MS_FindDescendant(pThis, &oComponentDisplay);
if (NULL == pObjectDisplay)
{
// TODO: close the possible component when open these components. temp fixing
MS_SendOperation((MSO_OBJECT __NEAR*)MS_GetParentPtr(pThis), MS_OP_MENU_CLOSE_POPUP_COMPONENT, 0);
pObjectDisplay = (MSO_OBJECT __NEAR*)MS_ComponentOpen((MS_DESCRIPTOR_COMPONENT*)&oComponentDisplay,
(MSO_CONTAINER __NEAR*)pThis);
MS_ObjectMove(pObjectDisplay, AREA_DISPLAY_X, AREA_DISPLAY_Y);
MS_ObjectResize(pObjectDisplay, AREA_DISPLAY_W, AREA_DISPLAY_H);
MS_DisplayAddObject(pObjectDisplay);
}
else
{
if (MS_OP_NONE == MS_SendOperation(pObjectDisplay, MS_OP_DISPLAY, 0))
return MS_OP_NONE;
}
return MS_OP_NONE;
}
PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
}
return MS_OP_NONE;
#endif
case MS_OP_RIGHT:
if(ActionEngine_CurrItemGetZoomLevel(FgActionEnginePtr) >0)
{
ActionEngine_CurrItemPanning(FgActionEnginePtr, PANNING_JUMP_RIGHT);
return MS_OP_NONE;
}
//rotate 90
else if(_IsPlayingFileType(CLIPTYPE_FILTER_PHOTO))
{
UINT8 cAngle = ActionEngine_CurrItemGetJpegAngle(FgActionEnginePtr);
cAngle = (cAngle + eCIO_Rotate90Deg)%eCIO_OrientationCnt;
if(ActionEngine_CurrItemSetJpegAngle(FgActionEnginePtr, cAngle))
MS_SendOp(MS_OP_MSG_SYS_JPEG_ROTATION, (UINT32) cAngle);
else PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
return MS_OP_NONE;
}
#ifdef D_USE_LEFT_RIGHT_AS_FAST_SCAN
return MS_OP_FASTF;
#else
return MS_OP_NONE;
#endif //D_USE_LEFT_RIGHT_AS_FAST_SCAN
case MS_OP_LEFT:
if(ActionEngine_CurrItemGetZoomLevel(FgActionEnginePtr) >0)
{
ActionEngine_CurrItemPanning(FgActionEnginePtr, PANNING_JUMP_LEFT);
return MS_OP_NONE;
}
//rotate 90 anti-clockwise
else if(_IsPlayingFileType(CLIPTYPE_FILTER_PHOTO))
{
UINT8 cAngle = ActionEngine_CurrItemGetJpegAngle(FgActionEnginePtr);
cAngle = (cAngle + eCIO_Rotate270Deg)%eCIO_OrientationCnt;
if(ActionEngine_CurrItemSetJpegAngle(FgActionEnginePtr, cAngle))
MS_SendOp(MS_OP_MSG_SYS_JPEG_ROTATION, (UINT32) cAngle);
else PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
return MS_OP_NONE;
}
#ifdef D_USE_LEFT_RIGHT_AS_FAST_SCAN
return MS_OP_FASTB;
#else
return MS_OP_NONE;
#endif //D_USE_LEFT_RIGHT_AS_FAST_SCAN
case MS_OP_UP:
if(ActionEngine_CurrItemGetZoomLevel(FgActionEnginePtr) >0)
{
ActionEngine_CurrItemPanning(FgActionEnginePtr, PANNING_JUMP_UP);
}
//rotate 180
else if(_IsPlayingFileType(CLIPTYPE_FILTER_PHOTO))
{
UINT8 cAngle = ActionEngine_CurrItemGetJpegAngle(FgActionEnginePtr);
cAngle = (cAngle + eCIO_Rotate180Deg)%eCIO_OrientationCnt;
if(ActionEngine_CurrItemSetJpegAngle(FgActionEnginePtr, cAngle))
MS_SendOp(MS_OP_MSG_SYS_JPEG_ROTATION, (UINT32) cAngle);
else PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
return MS_OP_NONE;
}
else if (_IsPlayingFileType(CLIPTYPE_FILTER_MOVIE))
{
#ifdef D_USE_UP_DOWN_AS_SLOW_KEY
MS_SEND_OP_OBJECT(pThis, MS_OP_SLOW_UP, lParam);
#endif //D_USE_UP_DOWN_AS_SLOW_KEY
}
else PROHIBIT(MSG_PROHIBIT_INVALID_OPERATION);
return MS_OP_NONE;
case MS_OP_DOWN:
if(ActionEngine_CurrItemGetZoomLevel(FgActionEnginePtr) > 0)
{
ActionEngine_CurrItemPanning(FgActionEnginePtr, PANNING_JUMP_DOWN);
}
//rotate 180
else if(_IsPlayingFileType(CLIPTYPE_FILTER_PHOTO))
{
UINT8 cAngle = ActionEngine_CurrItemGetJpegAngle(FgActionEnginePtr);
cAngle = (cAngle + eCIO_Rotate180Deg)%eCIO_OrientationCnt;
if(ActionEngine_CurrItemSetJpegAngle(FgActionEnginePtr, cAngle))
MS_SendOp(MS_OP_MSG_SYS_JPEG_ROTATION, (UINT32) cAngle);
else PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
return MS_OP_NONE;
}
//slow forward
else if (_IsPlayingFileType(CLIPTYPE_FILTER_MOVIE))
{
#ifdef D_USE_UP_DOWN_AS_SLOW_KEY
MS_SEND_OP_OBJECT(pThis, MS_OP_SLOW_DOWN, lParam);
#endif //D_USE_UP_DOWN_AS_SLOW_KEY
}
else PROHIBIT(MSG_PROHIBIT_INVALID_OPERATION);
return MS_OP_NONE;
#ifdef D_ENABLE_ENTER_KEY_AS_PLAY_IN_SCANMODE
case MS_OP_ENTER:
return MS_OP_PLAY;
#endif//D_ENABLE_ENTER_KEY_AS_PLAY_IN_SCANMODE
case MS_OP_SLOWF:
{
SLOW_SPEED eSlowSpeed;
if (!ActionEngine_CurrItemIsRepeatABOff(FgActionEnginePtr)
//Intro mode is MUSIC intro only, so MOVIE clips are not concerned by this restriction.
|| ActionEngine_IsPlaybackIntro(FgActionEnginePtr) && !_IsFileTypeMovie(ActionEngine_GetFileType(FgActionEnginePtr,ActionEngine_GetActiveItem(FgActionEnginePtr))))
{
PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
return MS_OP_NONE;
}
eSlowSpeed = ActionEngine_GetSlowSpeed(FgActionEnginePtr);
switch(eSlowSpeed)
{
case SLOW_SPEED_F1:
eSlowSpeed = SLOW_SPEED_F2;
break;
case SLOW_SPEED_F2:
eSlowSpeed = SLOW_SPEED_F3;
break;
case SLOW_SPEED_F3:
eSlowSpeed = SLOW_SPEED_F4;
break;
#ifdef D_SLOW_LOOP_INCLUDE_PLAY_STATE
case SLOW_SPEED_F4:
{
if(ActionEngine_CurrItemPlay(FgActionEnginePtr))
MS_SEND_OP(MS_OP_MSG_PLAYSTATE_PLAY, 0);
else PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
return MS_OP_NONE;
}
break;
#endif //D_SLOW_LOOP_INCLUDE_PLAY_STATE
default:
if(!(MS_PARAM_OP_KEYHOLD & lParam))
eSlowSpeed = SLOW_SPEED_F1;
break;
}
if(ActionEngine_CurrItemSlow(FgActionEnginePtr, eSlowSpeed))
MS_SEND_OP(MS_OP_MSG_PLAYSTATE_SLOW, eSlowSpeed);
else PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
}
return MS_OP_NONE;
case MS_OP_SLOWB:
{
SLOW_SPEED eSlowSpeed;
if (!ActionEngine_CurrItemIsRepeatABOff(FgActionEnginePtr)
|| ActionEngine_IsPlaybackIntro(FgActionEnginePtr))
{
PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
return MS_OP_NONE;
}
eSlowSpeed = ActionEngine_GetSlowSpeed(FgActionEnginePtr);
switch(eSlowSpeed)
{
case SLOW_SPEED_B1:
eSlowSpeed = SLOW_SPEED_B2;
break;
case SLOW_SPEED_B2:
eSlowSpeed = SLOW_SPEED_B3;
break;
case SLOW_SPEED_B3:
eSlowSpeed = SLOW_SPEED_B4;
break;
#ifdef D_SLOW_LOOP_INCLUDE_PLAY_STATE
case SLOW_SPEED_B4:
{
if(ActionEngine_CurrItemPlay(FgActionEnginePtr))
MS_SEND_OP(MS_OP_MSG_PLAYSTATE_PLAY, 0);
else PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
return MS_OP_NONE;
}
break;
#endif //D_SLOW_LOOP_INCLUDE_PLAY_STATE
default:
if(!(MS_PARAM_OP_KEYHOLD & lParam))
eSlowSpeed = SLOW_SPEED_B1;
break;
}
if(ActionEngine_CurrItemSlow(FgActionEnginePtr, eSlowSpeed))
MS_SEND_OP(MS_OP_MSG_PLAYSTATE_SLOW, eSlowSpeed);
else PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
}
return MS_OP_NONE;
case MS_OP_ZOOM:
{
ZOOM_FACTOR wZoomLevel = ActionEngine_CurrItemGetZoomLevel(FgActionEnginePtr);
#ifdef D_PRESSED_AGAIN
if(SCREENPROC_MessageIsDisplayed(MS_OP_MSG_SYS_ZOOM))
#endif // D_PRESSED_AGAIN
{
#ifdef D_GINGER_I86
if(ZOOM_IN_MAX > (wZoomLevel + 1)) // ZOOM_IN_MAX is actually 1 greater than the
#endif
#ifdef D_GINGER_I96
if(ZOOM_IN_FACTOR_MAX > (wZoomLevel + 1)) // ZOOM_IN_MAX is actually 1 greater than the
#endif //D_GINGER_I96
{ // maximum zoom, so don't allow wZoomLevel to reach this value.
wZoomLevel += 1;
}
else
wZoomLevel = NO_ZOOM;
if(ActionEngine_CurrItemZoom(FgActionEnginePtr, &wZoomLevel))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -