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

📄 uiop_lib.c

📁 ZORAN 962/966 SOURCE CODE,DVD chip
💻 C
📖 第 1 页 / 共 5 页
字号:
* Description	: Executes user requested operation and updates the UI messages accordingly
*	
****************************************************************************************************/
static void _UIOPLib_Pause(void)
{
	dbg_printf(("_UIOPLib_Pause()\n"));
	
	if (gcs.pstate == PST_PAUSE)
	{
		_UIOPLib_StepForward();
		return;
	}

	if ( (gcs.pstate != PST_PLAY) &&
		(gcs.pstate != PST_SCAN) &&
		(gcs.pstate != PST_SLOW) &&
		(gcs.pstate != PST_STILL))
	{
		PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
		return;
	}

	if ( !IS_COP_ENABLE(COP_PAUSE) || CoreAPI_IsInMenu() )	
	{
		PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
		return;
	}


	MS_SendOp(MS_OP_MSG_PLAYSTATE_PAUSE, 0);
	CoreAPI_Pause();
}
#endif // D_CUSTOM__UIOPLib_Pause

#ifndef D_CUSTOM__UIOPLib_SlowF
/****************************************************************************************************
* Function	: _UIOPLib_SlowF
*
* Input		: 
*
* Output		: None
*
* Return		: None
*
* Description	: Executes user requested operation and updates the UI messages accordingly
*	
****************************************************************************************************/
static void _UIOPLib_SlowF(void)
{
	dbg_printf(("_UIOPLib_SlowF()\n"));
	
	_UIOPLib_Slow(SlowForward);

}
#endif // D_CUSTOM__UIOPLib_SlowF

#ifndef D_CUSTOM__UIOPLib_SlowB
/****************************************************************************************************
* Function	: _UIOPLib_SlowB
*
* Input		: 
*
* Output		: None
*
* Return		: None
*
* Description	: Executes user requested operation and updates the UI messages accordingly
*	
****************************************************************************************************/
static void _UIOPLib_SlowB(void)
{
	dbg_printf(("_UIOPLib_SlowB()\n"));
	
	_UIOPLib_Slow(SlowBackward);
}
#endif // D_CUSTOM__UIOPLib_SlowB

#ifndef D_CUSTOM__UIOPLib_Mute
/****************************************************************************************************
* Function	: _UIOPLib_Mute
*
* Input		: 
*
* Output		: None
*
* Return		: None
*
* Description	: Executes user requested operation and updates the UI messages accordingly
*	
****************************************************************************************************/
static void _UIOPLib_Mute(void)
{
	EVENT evt = IE_CORE_UPDATE_PS;
	void *param = (void *)((((DWORD)PS_UPDATE_MUTE_SETTING)<<16) + (DWORD)!gtps.mMute);

	MS_SendOp(MS_OP_MSG_MUTE, !gtps.mMute);
	_UIOPLib_Send_Event(evt,param);
}
#endif // D_CUSTOM__UIOPLib_Mute

#ifndef D_CUSTOM__UIOPLib_Audio
/****************************************************************************************************
* Function	: _UIOPLib_Audio
*
* Input		: 
*
* Output		: None
*
* Return		: None
*
* Description	: Executes user requested operation and updates the UI messages accordingly
*	
****************************************************************************************************/
static void _UIOPLib_Audio(void)
{
	UINT16 wSetting;
	BOOL bChange = FALSE;

	dbg_printf(("_UIOPLib_Audio()\n"));
	
	if ( gcs.pstate != PST_PLAY ) 
	{
		PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
		return;
	}
	
	if(IS_DISC_TYPE_DVD || (DEC_DISC_TYPE_SVCD == g_disc_type))
	{
#ifdef D_PRESSED_AGAIN
		if( SCREENPROC_MessageIsDisplayed(MS_OP_MSG_SYS_AUDIO) )
#endif // D_PRESSED_AGAIN
		{
			if (!IS_COP_ENABLE(COP_AUDIO_CHANGE))
			{
				PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
				return;
			}
			
			wSetting = CoreAPI_GetCurrentAudioNum();
			if (CoreAPI_GetTotalAudioNum() > 1)
			{
				bChange = TRUE;
				if ( ++wSetting > CoreAPI_GetTotalAudioNum() )
					wSetting = UI_MIN_AUDIO_STREAM;
			}
			dbg_printf(("\nSelect audio stream %08li / %x",wSetting, (INT16)CoreAPI_GetTotalAudioNum()) );
		}
#ifdef D_PRESSED_AGAIN
		else
		{
			wSetting = CoreAPI_GetCurrentAudioNum();
		}
#endif
	}
	else
	{
		PROHIBIT(MSG_PROHIBIT_NOT_SUPPORTED_BY_DISC);
		return;
	}
//dvd audio is a special case: we can get channel infor only from current  Audio
// No way we can get channel infor of arbitory Audio Number
// So we must call API to  set the Audio Number first , and send the message after setting had been finished.
#ifdef DVD_AUDIO_SUPPORT
	if((MEDIA_TYPE_DVD_AUDIO== CoreAPI_GetCurrentMediaType()))
	{
		UINT16 wTimeOut = 20;
		if(bChange)
		{	
			
			CoreAPI_SelectAudioStream((UINT32)wSetting);
		//after CoreAPI_SelectAudioStream is return , the setting is not finished and we don't know when it finished 
			while(wTimeOut)
			{
				if(wSetting != CoreAPI_GetCurrentAudioNum())
				{
					usleep(10000);
					wTimeOut--;
				}
				else 
					break;
			}
		}
		
		if(wTimeOut )
			MS_SendOp(MS_OP_MSG_SYS_AUDIO, wSetting);
	}
	else
#endif//DVD_AUDIO_SUPPORT	
	{
		MS_SendOp(MS_OP_MSG_SYS_AUDIO, wSetting);
		if (bChange)
			CoreAPI_SelectAudioStream((UINT32)wSetting);
	}
}
#endif // D_CUSTOM__UIOPLib_Audio

#ifndef D_CUSTOM__UIOPLib_SubTitle
/****************************************************************************************************
* Function	: _UIOPLib_SubTitle
*
* Input		: 
*
* Output		: None
*
* Return		: None
*
* Description	: Executes user requested operation and updates the UI messages accordingly
*	
****************************************************************************************************/
static void _UIOPLib_SubTitle(void)
{
	UINT16 wSetting;
	BOOL bChange = FALSE;

	dbg_printf(("_UIOPLib_SubTitle()\n"));

	if ((DEC_DISC_TYPE_DVD_VIDEO != g_disc_type)
#ifdef DVD_VR_SUPPORT
		 && (DEC_DISC_TYPE_DVD_VR != g_disc_type) 
#endif
	  )
	{
		PROHIBIT(MSG_PROHIBIT_NOT_SUPPORTED_BY_DISC);
		return;
	}
	else if (gcs.pstate != PST_PLAY)
	{
		PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
		return;
	}
	else
	{
#ifdef D_PRESSED_AGAIN
		if( SCREENPROC_MessageIsDisplayed(MS_OP_MSG_SYS_SUBTITLE) )
#endif

		{
			if (!IS_COP_ENABLE(COP_SUBPIC_CHANGE))
			{
				PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
				return;
			}

			wSetting = CoreAPI_GetCurrentSubPicNum();
			if (CoreAPI_GetTotalSubPicNum() > 0)
			{
				bChange = TRUE;
				if ( ++wSetting > CoreAPI_GetTotalSubPicNum() )
					wSetting = UI_MIN_SUBPIC_STREAM;
			}

			dbg_printf(("\nSelect subtitle %08li / %x",(int)wSetting, CoreAPI_GetTotalSubPicNum()));			
		}
#ifdef D_PRESSED_AGAIN
		else
		{
			wSetting = CoreAPI_GetCurrentSubPicNum();
		}
#endif		
	}
	
	//
	// Display String
	//
	MS_SendOp(MS_OP_MSG_SYS_SUBTITLE, wSetting);

	//
	// Send event to core
	//
	if (bChange)
		CoreAPI_SelectSubPicStream((UINT32)wSetting);
}
#endif // D_CUSTOM__UIOPLib_SubTitle

#ifndef D_CUSTOM__UIOPLib_Angle
/****************************************************************************************************
* Function	: _UIOPLib_Angle
*
* Input		: 
*
* Output		: None
*
* Return		: None
*
* Description	: Executes user requested operation and updates the UI messages accordingly
*	
****************************************************************************************************/
static void _UIOPLib_Angle(void)
{
	UINT16 wSetting;
	BOOL bChange = FALSE;
	extern BOOL __NEAR SCHEDULE_STOP_PENDING;//AngieHe_1118_2005: Temp solution:Prohibit angle change when schedule stop pending.

	if(!IS_DISC_TYPE_DVD)
	{
		PROHIBIT(MSG_PROHIBIT_NOT_SUPPORTED_BY_DISC);
		return;
	}
	else if ((gcs.pstate != PST_PLAY)	
#ifndef D_UICC_ANGLE_IN_REPEATAB
			||PM_GetRepeatAB()
#endif
		)
	{
		PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
		return;
	}

#ifdef D_PRESSED_AGAIN
	if( SCREENPROC_MessageIsDisplayed(MS_OP_MSG_SYS_ANGLE) )
#endif
	{
		if ( !IS_COP_ENABLE(COP_ANGLE_CHANGE) 
			|| SCHEDULE_STOP_PENDING)//AngieHe_1118_2005: Temp solution:Prohibit angle change when schedule stop pending.
		{
			PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
			return;
		}
		wSetting = CoreAPI_GetCurrentAngleNum();
		if ( CoreAPI_GetTotalAngleNum() > 1 )
		{
			bChange = TRUE;
			if(++wSetting > CoreAPI_GetTotalAngleNum())
				wSetting = UI_MIN_ANGLE;
		}
		dbg_printf(("Select angle %x / %x\n", (int)wSetting, CoreAPI_GetTotalAngleNum()));
	}
#ifdef D_PRESSED_AGAIN
	else
	{
		// just showing the current angle
		wSetting = CoreAPI_GetCurrentAngleNum();
	}
#endif

	//
	// Display String
	//
	MS_SendOp(MS_OP_MSG_SYS_ANGLE, wSetting);

	//
	//Send event to core
	//
	if (bChange)
		CoreAPI_SelectAngleStream(wSetting);
}
#endif // D_CUSTOM__UIOPLib_Angle

#ifndef D_CUSTOM__UIOPLib_Zoom
/****************************************************************************************************
* Function	: _UIOPLib_Zoom
*
* Input		: 
*
* Output		: None
*
* Return		: None
*
* Description	: Executes user requested operation and updates the UI messages accordingly
*	
****************************************************************************************************/
static void _UIOPLib_Zoom(void)
{
	int iIndex;
#ifdef D_GINGER_I96
	ZOOM_FACTOR zfLast = ZOOM_IN_FACTOR_MAX;
	ZOOM_FACTOR zfLevel = VPU_GetZoomLevel();
#else //D_GINGER_I96
	ZOOM_FACTOR zfLast = ZOOM_IN_MAX;
	ZOOM_FACTOR zfLevel = gcs.mZoomLevel;
#endif //D_GINGER_I96
	BYTE bValid;

	dbg_printf(("_UIOPLib_Zoom()\n"));

	if(PST_STOP == gcs.pstate)
	{
		PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
		return;
	}
#ifdef EZVIEW_ENABLED
	else if(CoreAPI_IsEZViewModeOn())
	{
		PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
		return;
	}
#endif
	else if(!IS_COP_ENABLE(COP_ZOOM))
	{
		PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
		return;
	}
	else if(CoreAPI_IsInMenu())
	{
		PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
		return;
	}
	else if(g_disc_type == DEC_DISC_TYPE_NO_DISK)
	{
		PROHIBIT(MSG_PROHIBIT_NOT_SUPPORTED_BY_DISC);
		return;
	}

#ifdef D_PRESSED_AGAIN
	if( SCREENPROC_MessageIsDisplayed(MS_OP_MSG_SYS_ZOOM) )
#endif
	{
		for ( iIndex = 0; iIndex < zfLast; iIndex++ )
		{
			zfLevel= ((zfLevel+1) % zfLast);

			query_core( CQ_VALID_ZOOM, (void *) (int) zfLevel, (void *) &bValid );

			//Invalid, try find next available zoom level.
			if ( CQ_ZOOM_INVALID != bValid )
				break;
		}
		// Busy, then ignore this zoom button press
		if(CQ_ZOOM_BUSY == bValid )
			return;
		else if (CQ_ZOOM_INVALID == bValid)			// Reached the end of the loop, if all zoom levels are not available
			zfLevel = NO_ZOOM;

		if ( iIndex != zfLast )	//JG_2004_0722
		{
			MS_SendOp(MS_OP_MSG_SYS_ZOOM, zfLevel);

			CoreAPI_SetZoomLevel(zfLevel);
		}
	}
#ifdef D_PRESSED_AGAIN
	else
	{
		query_core( CQ_VALID_ZOOM, (void *) (int) zfLevel, (void *) &bValid );
		if ( CQ_ZOOM_INVALID != bValid )
		{
			MS_SendOp(MS_OP_MSG_SYS_ZOOM, zfLevel);
		}
		else
		{
			PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
		}
	}
#endif
}
#endif // D_CUSTOM__UIOPLib_Zoom

#ifdef EZVIEW_ENABLED
#ifndef D_CUSTOM__UIOPLib_EZView
/****************************************************************************************************
* Function	: _UIOPLib_EZView
*
* Input		: 
*
* Output		: None
*
* Return		: None
*
* Description	: Executes user requested operation on changing DVD EZView mode
*	
****************************************************************************************************/
static void _UIOPLib_EZView(void)
{

	enEZViewModeName eName;

	if(PST_STOP == gcs.pstate || NO_ZOOM != gcs.mZoomLevel || CoreAPI_IsInMenu())
	{
		PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
		return;
	}
	
#ifdef D_PRESSED_AGAIN
	if(SCREENPROC_MessageIsDisplayed(MS_OP_MSG_SYS_EZ_VIEW))
#endif // D_PRESSED_AGAIN
    	{
		if(CoreAPI_SetEZViewMode(&eName))
		{
			MS_SEND_OP(MS_OP_MSG_SYS_EZ_VIEW, eName);
		}
		else PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
	}
#ifdef D_PRESSED_AGAIN
	else
	{
		if(CoreAPI_GetEZViewMode(&eName))
		{
			MS_SendOp(MS_OP_MSG_SYS_EZ_VIEW, eName);
		}
		else PROHIBIT(MSG_PROHIBIT_NOT_ALLOWED_NOW);
	}
#endif // D_PRESSED_AGAIN

	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -