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

📄 o_ssaver.c

📁 Zoran V966 DVD 解码 Soc芯片的源程序
💻 C
字号:
/* **************************************************************************************
*  Copyright (c) 2004 ZORAN Corporation, All Rights Reserved
*  THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF ZORAN CORPORATION
*
*  File: $Workfile: o_ssaver.c $
*
* Description:	
* ============
* Project definition of the MSO_SCREEN_SAVER functions
*
****************************************************************************************************/
#include "Config.h"		// Global Configuration - do not remove!

#ifdef DEBUG_UI_TRACE
#undef IFTRACE
#define IFTRACE if (gTraceUI)
#include "Debug\DbgMain.h"
#endif //DEBUG_UI_TRACE

#include "Include\SysDefs.h"
/****************************************************************************************************
*	INCLUDE FILES
****************************************************************************************************/
// Include C Standard
#include <stdio.h>
#include <string.h>

// Include project specific

#include "include\math-macro.h"
#ifdef D_GINGER_I86
#include "Decoder\osdlayou.h"
#endif //D_GINGER_I86

#ifdef D_GINGER_I96
#include "Osdlayou.h"
#endif //D_GINGER_I96

#include "CoreAPI\CoreAPI.h"
#include "Playcore\Coremain\CoreGDef.h"

#include "GUI\Menu_system\ms_object.h"
#include "GUI\menu_system\osd_rendering.h"
#include "GUI\menu_system\ms_container.h"
#include "GUI\menu_system\ms_display.h"
#include "GUI\Menu_system\ms_menu.h"
#include "GUI\Menu_system\ms_screen.h"
#include "GUI\menu_system\ms_send_op.h"

#include "GUI\Resource\Bitmap\bitmap.h"

#include "Components\Screen_saver\o_ssaver.h"
#include "Components\Screen_saver\o_ssaver_config.h"
#include "Components\Custom\Screen_saver\o_ssaver_custom.h"
#ifndef DEBUG_UI_TRACE
#undef dbg_printf(sMsg)
#define dbg_printf(sMsg)
#undef	dbgm_printf(sMsg, mode)
#define dbgm_printf(sMsg, mode)
#endif






/****************************************************************************************************
*	DEFINITION: Public (global) variables
****************************************************************************************************/

/****************************************************************************************************
*	DEFINITION: Private (static) variables
****************************************************************************************************/


/****************************************************************************************************
*	DECLARATION: Private (static) functions
****************************************************************************************************/
STATIC BOOL _FillOsdSeg(MSO_OBJECT __NEAR* pThis, MS_AREA __NEAR* pAbsArea);
STATIC MS_OP _Operation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam);
STATIC BOOL _Layout(void);

#include "Components\Custom\Screen_saver\o_ssaver_custom.c"
#include "Components\Screen_saver\o_ssaver_config.c"


/****************************************************************************************************
*	DEFINITION: Public functions
****************************************************************************************************/



/**************************************************************************
*	Function	:	_FillOsdSeg
*
*	In		: 	pThis	 :	Pointer to Title object.
*				pAbsArea	 :	Absolute area of pThis object.
*
*	Out		: 	None.
*
*	Return	:	None.
*
*	Desc 	:	Display function of the screensaver object.
*
****************************************************************************/
#pragma argsused
STATIC BOOL _FillOsdSeg(MSO_OBJECT __NEAR* pThis, MS_AREA __NEAR* pAbsArea)
{
	return OSDR_FillOsdSegBitmap(BITMAP,
							pAbsArea, 
							0, 
							0,
							ALIGN_H_LEFT, 
							ALIGN_V_TOP,
							NULL_EXPANSION, 
							NULL_EXPANSION);
}

/**************************************************************************
*	Function	:	_Layout
*
*	In		: 	None
*
*	Out		: 	None
*
*	Return	:	TRUE always
*
*	Desc 	:	Defines the layout area of the screensaver object
*
 ***************************************************************************/
STATIC BOOL _Layout(void)
{
#ifdef D_GINGER_I96
	go_CurrentLayout.m_bBigMemMap = OSD_LAYOUT_MEM_MAP_LARGE;
#endif //D_GINGER_I96
#ifdef D_CD_GRAPHIC_ENABLED
	go_CurrentLayout.m_bOSDBufferNum = OSD_BUFFER_0;
#endif//D_CD_GRAPHIC_ENABLED

	OSDClearArea();
	OSDAddArea((OSD_LAYOUT_AREA*)&OsdLayoutArea);	
	OSDSetLayout();
	OSDAdaptPixResolutionToProgressive();
	OSDAdaptDisplayRangeToVideoStandard();
	return (TRUE);
}

/**************************************************************************
*	Function	:	_OnTickMoveObject
*
*	In		: 	None
*
*	Out		: 	None
*
*	Return	:	None
*
*	Desc 	:	This function moves the bitmap in the screensaver at 45 degree angle to
*				the sides of the rectangle in which it is positioned
*
 ***************************************************************************/
STATIC void _OnTickMoveObject(MSO_SCREEN_SAVER __NEAR* pThis)
{

	//step increments/decrements
	if(SCREEN_SAVER_MOVE_NW_TO_SE == pThis->moParam.mbDirection)
	{
		pThis->moParam.mXPosition += SSAVER_BM_MOVE_STEP;
		pThis->moParam.mYPosition += SSAVER_BM_MOVE_STEP;
	}
	else if(SCREEN_SAVER_MOVE_NE_TO_SW == pThis->moParam.mbDirection)
	{
		pThis->moParam.mXPosition -=SSAVER_BM_MOVE_STEP;
		pThis->moParam.mYPosition += SSAVER_BM_MOVE_STEP;
	}
	else if (SCREEN_SAVER_MOVE_SE_TO_NW == pThis->moParam.mbDirection)
	{
		pThis->moParam.mXPosition -=SSAVER_BM_MOVE_STEP;
		pThis->moParam.mYPosition -= SSAVER_BM_MOVE_STEP;
	}
	else //if (SCREEN_SAVER_MOVE_SW_TO_NE == pDescriptorSSaver->moParam.mbDirection)
	{
		pThis->moParam.mXPosition +=SSAVER_BM_MOVE_STEP;
		pThis->moParam.mYPosition -=SSAVER_BM_MOVE_STEP;
	}

	//limitation checks
	if(pThis->moParam.mXPosition > (AREA_SCREEN_SAVER_W + AREA_SCREEN_SAVER_X - BMWIDTH))
	{
		pThis->moParam.mXPosition =(AREA_SCREEN_SAVER_W + AREA_SCREEN_SAVER_X - BMWIDTH);	
		if(SCREEN_SAVER_MOVE_NW_TO_SE == pThis->moParam.mbDirection)
			pThis->moParam.mbDirection = SCREEN_SAVER_MOVE_NE_TO_SW;
		else
			pThis->moParam.mbDirection = SCREEN_SAVER_MOVE_SE_TO_NW;
	}
	if(pThis->moParam.mYPosition > (AREA_SCREEN_SAVER_H + AREA_SCREEN_SAVER_Y - BMHEIGHT))
	{
		pThis->moParam.mYPosition = (AREA_SCREEN_SAVER_H + AREA_SCREEN_SAVER_Y - BMHEIGHT);	
		if(SCREEN_SAVER_MOVE_NW_TO_SE == pThis->moParam.mbDirection)
			pThis->moParam.mbDirection = SCREEN_SAVER_MOVE_SW_TO_NE;
		else
			pThis->moParam.mbDirection = SCREEN_SAVER_MOVE_SE_TO_NW;
	}		

	if(pThis->moParam.mXPosition < (AREA_SCREEN_SAVER_X))
	{
		pThis->moParam.mXPosition = (AREA_SCREEN_SAVER_X);	
		if(SCREEN_SAVER_MOVE_SE_TO_NW == pThis->moParam.mbDirection)
			pThis->moParam.mbDirection = SCREEN_SAVER_MOVE_SW_TO_NE;
		else
			pThis->moParam.mbDirection = SCREEN_SAVER_MOVE_NW_TO_SE;
	}		
	if(pThis->moParam.mYPosition < (AREA_SCREEN_SAVER_Y))
	{
		pThis->moParam.mYPosition = AREA_SCREEN_SAVER_Y;	
		if(SCREEN_SAVER_MOVE_SE_TO_NW == pThis->moParam.mbDirection)
			pThis->moParam.mbDirection = SCREEN_SAVER_MOVE_NE_TO_SW;
		else
			pThis->moParam.mbDirection = SCREEN_SAVER_MOVE_NW_TO_SE;
	}
	
	//resize the layout area
	//go_CurrentLayout.m_oArea[0].m_wStartX = pThis->moParam.mXPosition; 
	//go_CurrentLayout.m_oArea[0].m_wEndX = OSD_AREA_END_X(pThis->moParam.mXPosition, BMWIDTH); 
	go_CurrentLayout.m_oArea[0].m_wStartY = pThis->moParam.mYPosition;
	go_CurrentLayout.m_oArea[0].m_wEndY = OSD_AREA_END_Y(pThis->moParam.mYPosition, BMHEIGHT);
	MS_ObjectMove((MSO_OBJECT __NEAR*)pThis, pThis->moParam.mXPosition, pThis->moParam.mYPosition);

}


/**************************************************************************
*	Function	:	_Operation
*
*	In		: 	pThis : Pointer to the screensaver object
*
*				MsOp : Operation ID.
*
*				lParam :	Parameter associated with an MS_OP if any.
*
*	Out		: 	None
*
*	Return	:	ID of the operation that is to be propagated once processing is done, 
*				otherwise MS_OP_NONE.
*
*	Desc 	:	This function is the operation function of the screen saver object
*
 ***************************************************************************/
#pragma argsused
STATIC MS_OP _Operation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam)
{		
	MS_AREA oArea;
	UINT16 i;
	
	switch (MsOp)
	{
#ifdef D_AUTO_SHUTDOWN_AFTER_SCREEN_SAVER
		case MS_OP_INIT:
			{
				MSO_SCREEN_SAVER __NEAR* pScreensaver = (MSO_SCREEN_SAVER __NEAR*)pThis;

				pScreensaver->moParam.mwAutoShutdownTimeout = UI_AUTO_SHUTDOWN_AFTER_SCREEN_SAVER_TIMEOUT_MINUTES * 600;
			}
			break;
#endif
			
		case MS_OP_TICK:	 	
			for(i = 0; i<SSAVER_BM_STEPS_IN_TICK; i++)
			{
				_OnTickMoveObject((MSO_SCREEN_SAVER __NEAR*)pThis);
				OSDAdaptDisplayRangeToVideoStandard();
				memcpy((MS_AREA __NEAR*)&oArea, (MS_AREA __NEAR*)(&pThis->moArea), sizeof(MS_AREA));
				if (oArea.msX >= (SSAVER_BM_MOVE_STEP))
					oArea.msX -= SSAVER_BM_MOVE_STEP;
				else
					oArea.msX =0;
				// Compensate on the left and on the right 
				oArea.mwW += SSAVER_BM_MOVE_STEP << 1;
				MS_DisplayArea((MS_AREA __NEAR*)&oArea);
			}
#ifdef D_AUTO_SHUTDOWN_AFTER_SCREEN_SAVER
			{
				MSO_SCREEN_SAVER __NEAR* pScreensaver = (MSO_SCREEN_SAVER __NEAR*)pThis;

				if (pScreensaver->moParam.mwAutoShutdownTimeout)
				{
					pScreensaver->moParam.mwAutoShutdownTimeout--;
					if (0 == pScreensaver->moParam.mwAutoShutdownTimeout)
					{
						CoreAPI_PowerControl(FALSE);
					}
				}
			}
#endif
			break;			
	}

	return MsOp;
}
/**************************************************************************
*	Function	:	OSCREEN_SAVER_Start
*
*	In		: 	None
*
*	Out		: 	None
*
*	Return	:	None
*
*	Desc 	:	This function will initialise and run the screensaver
*
 ***************************************************************************/

void OSCREEN_SAVER_Start(void)
{
	MSO_OBJECT __NEAR* pObject;
	MS_DESCRIPTOR_SCREENSAVER* pDescriptorSSaver;

	MS_MenuFreeze();
	
	pObject = MS_CreateAndAddObject((MS_DESCRIPTOR *)&ScreenSaverDescriptor, (MSO_CONTAINER __NEAR*)gpScreen);
	MS_SendOperation(pObject, MS_OP_INIT, 0);

	// The OSD layout for the screen saver
	pDescriptorSSaver = (MS_DESCRIPTOR_SCREENSAVER*)(pObject->mpDescriptor);
	pDescriptorSSaver->mpfLayout();

	// Display the screen saver bitmap
	MS_DisplayObject(pObject);	

	//Display a black background
	CoreAPI_DisplayLogo(eBackground);
#ifdef D_GINGER_I86
	OSDTurnOn();
#endif //D_GINGER_I86
#ifdef D_GINGER_I96
        VPU_SetOSDStatus(VPU_OSD_STATUS_START_E);
#endif //D_GINGER_I96
}

/**************************************************************************
*	Function	:	OSCREEN_SAVER_Stop
*
*	In		: 	None
*
*	Out		: 	None
*
*	Return	:	None
*
*	Desc 	:	This function closes the screensaver by removing the screensaver object
*				and reinstating the previous state of the layout and background
*
 ***************************************************************************/
void OSCREEN_SAVER_Stop(void)
{	
	MSO_OBJECT __NEAR* pObject = MS_FindObjectFromDescriptor((MSO_CONTAINER __NEAR*)gpScreen, (MS_DESCRIPTOR *)&ScreenSaverDescriptor);
	
	OSDTurnOff();
	MS_SEND_OP(MS_OP_REMOVE, pObject);
	CoreAPI_DisplayLogo(eFrame);
	MS_SEND_OP(MS_OP_OPEN, MS_MenuGetPrevFrozen());
}


⌨️ 快捷键说明

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