⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clips_runtime.c

📁 Zoran V966 DVD 解码 Soc芯片的源程序
💻 C
📖 第 1 页 / 共 3 页
字号:
		{
			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 + -