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

📄 osd.c

📁 dm270 source code
💻 C
字号:
/**
    \file osd.c
    \brief OSD User APIs
*/

#include <system/osd270.h>
#include <user/osd.h>

OSD_ModeData osdMode_ntsc = {
	OSD_FORMAT_CbCr,	// cbcrOrder;
	OSD_LUT_ROM,		// backgroundLUT;
	0,					// backgroundColor;
	FALSE,				// fieldSignalReverse;
	120,				// baseX;
	18					// baseY;
};

OSD_ModeData osdMode_pal = {
	OSD_FORMAT_CbCr,	// cbcrOrder;
	OSD_LUT_ROM,		// backgroundLUT;
	0,					// backgroundColor;
	TRUE,				// fieldSignalReverse;
	144,				// baseX;
	22					// baseY;
};

/**
	\brief Initialize OSD in NTSC mode

	\return if success, \c E_PASS, else error code
*/
STATUS OSDInit() {
	STATUS status;

	status = OSD_setMode( &osdMode_ntsc);

	if(status!=E_PASS)
		return status;

	return status;
}

/**
	\brief Setup OSD video window in a user specified display mode

	\param winID		OSD video window ID, OSD_VID_WIN0 or OSD_VID_WIN1
	\param vidModeID	OSD video window display mode ID
	\param address		OSD video window data absolute SDRAM

	\return if success, \c E_PASS, else error code
*/
STATUS OSDSetMode( OSD_WIN_ID winID, VID_DISPLAY_MODE_ID vidModeID, char *address) {
	STATUS status=E_PASS;
	OSD_WinConfigData		winConfig;
	OSD_VideoWinModeData	vidWinMode;

	if(vidModeID>=VID_MAX_ID)
		return E_INVALID_INPUT;

	if(winID!=OSD_VID_WIN0 && winID!= OSD_VID_WIN1)
		return E_INVALID_INPUT;

	switch(vidModeID) {
		case VID_FLD_720x480:
			winConfig.offset  = 720*2;
			winConfig.address = address;
			winConfig.startX  = 0;
			winConfig.startY  = 0;
			winConfig.width   = 720;
			winConfig.height  = 480/2;
			winConfig.displayMode = OSD_FIELD_MODE;
			winConfig.hzoom	  = OSD_NO_ZOOM;
			winConfig.vzoom   = OSD_NO_ZOOM;

			vidWinMode.expandFilterEnable = FALSE;
			vidWinMode.hexpand = FALSE;
			vidWinMode.vexpand = FALSE;
		case VID_720x480:
			winConfig.offset  = 720*2;
			winConfig.address = address;
			winConfig.startX  = 0;
			winConfig.startY  = 0;
			winConfig.width   = 720;
			winConfig.height  = 480/2;
			winConfig.displayMode = OSD_FRAME_MODE;
			winConfig.hzoom	  = OSD_NO_ZOOM;
			winConfig.vzoom   = OSD_NO_ZOOM;

			vidWinMode.expandFilterEnable = FALSE;
			vidWinMode.hexpand = FALSE;
			vidWinMode.vexpand = FALSE;
			break;
		case VID_FLD_640x480:
			winConfig.offset  = 640*2;
			winConfig.address = address;
			winConfig.startX  = 0;
			winConfig.startY  = 0;
			winConfig.width   = 720;
			winConfig.height  = 480/2;
			winConfig.displayMode = OSD_FIELD_MODE;
			winConfig.hzoom	  = OSD_NO_ZOOM;
			winConfig.vzoom   = OSD_NO_ZOOM;

			vidWinMode.expandFilterEnable = TRUE;
			vidWinMode.hexpand = TRUE;
			vidWinMode.vexpand = FALSE;

			break;
		case VID_640x480:
			winConfig.offset  = 640*2;
			winConfig.address = address;
			winConfig.startX  = 0;
			winConfig.startY  = 0;
			winConfig.width   = 720;
			winConfig.height  = 480/2;
			winConfig.displayMode = OSD_FRAME_MODE;
			winConfig.hzoom	  = OSD_NO_ZOOM;
			winConfig.vzoom   = OSD_NO_ZOOM;

			vidWinMode.expandFilterEnable = TRUE;
			vidWinMode.hexpand = TRUE;
			vidWinMode.vexpand = FALSE;

			break;
		case VID_320x240:
			winConfig.offset  = 320*2;
			winConfig.address = address;
			winConfig.startX  = (720-320)/2;
			winConfig.startY  = ((480-240)/2)/2;
			winConfig.width   = 320;
			winConfig.height  = 240/2;
			winConfig.displayMode = OSD_FRAME_MODE;
			winConfig.hzoom	  = OSD_NO_ZOOM;
			winConfig.vzoom   = OSD_NO_ZOOM;

			vidWinMode.expandFilterEnable = FALSE;
			vidWinMode.hexpand = FALSE;
			vidWinMode.vexpand = FALSE;
			break;
		case VID_FLD_320x240:
			winConfig.offset  = 320*2;
			winConfig.address = address;
			winConfig.startX  = 0;
			winConfig.startY  = 0;
			winConfig.width   = 720;
			winConfig.height  = 240;
			winConfig.displayMode = OSD_FIELD_MODE;
			winConfig.hzoom	  = OSD_ZOOM_2x;
			winConfig.vzoom   = OSD_NO_ZOOM;

			vidWinMode.expandFilterEnable = TRUE;
			vidWinMode.hexpand = TRUE;
			vidWinMode.vexpand = FALSE;
			break;
		case VID_352x288:
			winConfig.offset  = 352*2;
			winConfig.address = address;
			winConfig.startX  = (720-352)/2;
			winConfig.startY  = ((480-288)/2)/2;
			winConfig.width   = 352;
			winConfig.height  = 288/2;
			winConfig.displayMode = OSD_FRAME_MODE;
			winConfig.hzoom	  = OSD_NO_ZOOM;
			winConfig.vzoom   = OSD_NO_ZOOM;

			vidWinMode.expandFilterEnable = FALSE;
			vidWinMode.hexpand = FALSE;
			vidWinMode.vexpand = FALSE;
			break;
		case VID_FLD_352x288:
			winConfig.offset  = 352*2;
			winConfig.address = address;
			winConfig.startX  = 0;
			winConfig.startY  = 0;
			winConfig.width   = 720;
			winConfig.height  = 240;
			winConfig.displayMode = OSD_FIELD_MODE;
			winConfig.hzoom	  = OSD_ZOOM_2x;
			winConfig.vzoom   = OSD_NO_ZOOM;

			vidWinMode.expandFilterEnable = FALSE;
			vidWinMode.hexpand = FALSE;
			vidWinMode.vexpand = FALSE;
			break;
		default:
			break;
	}

	status = OSD_setVideoWinMode( &vidWinMode );
	if(status!=E_PASS)
		return status;

	status=OSD_setWinConfig( winID, &winConfig );
	if(status!=E_PASS)
		return status;

	return status;
}


⌨️ 快捷键说明

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