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

📄 osd270.c

📁 dm270 source code
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
    DM270 ARM Evaluation Software

    (c)Texas Instruments 2003
*/

/**
	\file osd270.c
	\brief On-Screen Display (OSD) related APIs
*/
#include <osd270.h>


/**
    \brief	Set OSD Mode parameters

	This routine sets parameters which will affect all OSD windows

    \param osdMode	OSD Mode parameters

    \return if success, \c E_PASS, else error code

	\see OSD_ModeData
*/
STATUS OSD_setMode( OSD_ModeData *osdMode){ 

	OSD_FSET( OSDMODE, CS,    osdMode->cbcrOrder );
	OSD_FSET( OSDMODE, BCLUT,  osdMode->backgroundLUT );
	OSD_FSET( OSDMODE, CABG,  osdMode->backgroundColor );
	OSD_FSET( OSDMODE, FSINV, osdMode->fieldSignalReverse );
	OSD_RSET( BASEPX, osdMode->baseX );
	OSD_RSET( BASEPY, osdMode->baseY );

	return E_PASS;
}

/**
    \brief	Set OSD Video Window Mode parameters

	This routine set parameters which will affect both OSD video windows

    \param videoWinMode		OSD video window mode parameters

    \return if success, \c E_PASS, else error code

	\see OSD_VideoWinModeData
*/
STATUS OSD_setVideoWinMode( OSD_VideoWinModeData *videoWinMode){ 

	OSD_FSET( OSDMODE, EF,    videoWinMode->expandFilterEnable == TRUE ? 1 : 0 );
	OSD_FSET( OSDMODE, VVRSZ, videoWinMode->vexpand == TRUE ? 1 : 0 );
	OSD_FSET( OSDMODE, VHRSZ, videoWinMode->hexpand == TRUE ? 1 : 0 );

	return E_PASS;
}

/**
    \brief	Set OSD Bitmap Window Mode parameters

	This routine set parameters which will affect both OSD bitmap windows

    \param bmpWinMode		OSD bitmap window mode parameters

    \return if success, \c E_PASS, else error code

	\see OSD_BmpWinModeData
*/
STATUS OSD_setBmpWinMode( OSD_BmpWinModeData *bmpWinMode){ 
	OSD_FSET( OSDMODE, ORSZ, bmpWinMode->vexpand == TRUE ? 1 : 0 );
	return E_PASS;
}

/**
    \brief	Set OSD Window Configuration

	This routine configures OSD window 'winID'

	\param winID			OSD window ID (see OSD_WIN_ID)
    \param winConfig		OSD window configuration parameters

    \return if success, \c E_PASS, else error code

	\see OSD_WinConfigData, OSD_WIN_ID
*/
STATUS OSD_setWinConfig( OSD_WIN_ID winID, OSD_WinConfigData *winConfig){ 
	STATUS status=E_PASS;

	OSD_setWinSize(winID, winConfig->width, winConfig->height);
	OSD_setWinStartPosition(winID, winConfig->startX, winConfig->startY);
	OSD_setWinAddr(winID, winConfig->address );

	if( winConfig->offset%32 != 0 )
		status = E_INVALID_INPUT;
	
	switch(winID) {
		case OSD_VID_WIN0 :
			OSD_RSET( VIDWIN0OFST, winConfig->offset/32 );
	
			OSD_FSET( VIDWINMD, VFF0,  winConfig->displayMode );
			OSD_FSET( VIDWINMD, VHZ0,  winConfig->hzoom );
			OSD_FSET( VIDWINMD, VVZ0, winConfig->vzoom );
			break;
		case OSD_VID_WIN1 :
			OSD_RSET( VIDWIN1OFST, winConfig->offset/32 );
	
			OSD_FSET( VIDWINMD, VFF1,  winConfig->displayMode );
			OSD_FSET( VIDWINMD, VHZ1,  winConfig->hzoom );
			OSD_FSET( VIDWINMD, VVZ1, winConfig->vzoom );

			break;
		case OSD_BMP_WIN0 :
			OSD_RSET( OSDWIN0OFST, winConfig->offset/32 );
	
			OSD_FSET( OSDWIN0MD, OFF0, winConfig->displayMode );
			OSD_FSET( OSDWIN0MD, OHZ0, winConfig->hzoom );
			OSD_FSET( OSDWIN0MD, OVZ0, winConfig->vzoom );

			break;
		case OSD_BMP_WIN1 :
			OSD_RSET( OSDWIN1OFST, winConfig->offset/32 );
	
			OSD_FSET( OSDWIN1MD, OFF1, winConfig->displayMode );
			OSD_FSET( OSDWIN1MD, OHZ1, winConfig->hzoom );
			OSD_FSET( OSDWIN1MD, OVZ1, winConfig->vzoom );

			break;
		default:
			status=E_INVALID_INPUT;
			break;
	}
	return status;
}

/**
    \brief	Set OSD Bitmap Window Configuration

	Configure paramters specific to OSD bitmap windows

    \param winID			OSD_BMP_WIN0 or OSD_BMP_WIN1
	\param bmpWinConfig		Bitmpa window configuration data

    \return if success, \c E_PASS, else error code

	\see OSD_BmpWinConfigData, OSD_WIN_ID
*/
STATUS OSD_setBmpWinConfig( OSD_WIN_ID winID, OSD_BmpWinConfigData *bmpWinConfig){ 
	STATUS status=E_PASS;

	switch(winID) {
		case OSD_BMP_WIN0:
			OSD_FSET( OSDWIN0MD, CLUTS0, bmpWinConfig->selectLUT );
			OSD_FSET( OSDWIN0MD, BMW0,   bmpWinConfig->pixelWidth );
			OSD_FSET( OSDWIN0MD, BLND0,  bmpWinConfig->blendRatio );
			OSD_FSET( OSDWIN0MD, TE0,    bmpWinConfig->transparencyEnable == TRUE ? 1 : 0 );
			break;
		case OSD_BMP_WIN1:
			OSD_FSET( OSDWIN1MD, OASW,   bmpWinConfig->attrWinModeEnable == TRUE ? 1 : 0 );
			if(bmpWinConfig->attrWinModeEnable==FALSE) {
				OSD_FSET( OSDWIN1MD, CLUTS1, bmpWinConfig->selectLUT );
				OSD_FSET( OSDWIN1MD, BMW1,   bmpWinConfig->pixelWidth );
				OSD_FSET( OSDWIN1MD, BLND1,  bmpWinConfig->blendRatio );
				OSD_FSET( OSDWIN1MD, TE1,    bmpWinConfig->transparencyEnable == TRUE ? 1 : 0 );
			} else {
				OSD_FSET( OSDWIN1MD, BMW1, bmpWinConfig->attrWinBlinkInterval-1 );
			}
			break;
		default:
			status = E_INVALID_INPUT;
			break;
	}
	return status;
}

/**
    \brief	Set OSD Hardware Cursor Configuration

    \param	cursorConfig	OSD Hardware Cursor Configuration data

    \return if success, \c E_PASS, else error code

	\see OSD_CursorConfigData 
*/
STATUS OSD_setCursorConfig( OSD_CursorConfigData *cursorConfig){ 
	Uint8 w;

	OSD_setWinStartPosition( OSD_CURSOR, cursorConfig->startX, cursorConfig->startY );
	OSD_setWinSize( OSD_CURSOR, cursorConfig->width, cursorConfig->height );

	w=cursorConfig->pixelWidthH;
	if( w>=1 && w < 4)
		OSD_FSET( RECTCUR, RCHW, 0 );
	else
	if( w>=4 && w < 8)
		OSD_FSET( RECTCUR, RCHW, 1 );
	else
	if( w>=8 && w <16)
		OSD_FSET( RECTCUR, RCHW, 2 );
	else
	if( w>=16 && w <20)
		OSD_FSET( RECTCUR, RCHW, 3 );
	else
	if( w>=20 && w <24)
		OSD_FSET( RECTCUR, RCHW, 4 );
	else
	if( w>=24 && w <28)
		OSD_FSET( RECTCUR, RCHW, 5 );
	else
	if( w>=28 )
		OSD_FSET( RECTCUR, RCHW, 6 );
	
	w=cursorConfig->pixelHeightV;
	if( w>=1 && w < 2)
		OSD_FSET( RECTCUR, RCVW, 0 );
	else
	if( w>=2 && w < 4)
		OSD_FSET( RECTCUR, RCVW, 1 );
	else
	if( w>=4 && w <6)
		OSD_FSET( RECTCUR, RCVW, 2 );
	else
	if( w>=6 && w <8)
		OSD_FSET( RECTCUR, RCVW, 3 );
	else
	if( w>=8 && w <10)
		OSD_FSET( RECTCUR, RCVW, 4 );
	else
	if( w>=10 && w <12)
		OSD_FSET( RECTCUR, RCVW, 5 );
	else
	if( w>=12 && w <14 )
		OSD_FSET( RECTCUR, RCVW, 6 );
	else
	if( w>=14 )
		OSD_FSET( RECTCUR, RCVW, 7 );
		

	OSD_FSET( RECTCUR, CLUTSR, cursorConfig->selectLUT );
	OSD_FSET( RECTCUR, RCAD,   cursorConfig->color );

	return E_PASS;
}

/**
    \brief	Enable(Show)/disable(Hide) OSD Window

    \param  winID		OSD window ID 
	\param  enable		TRUE: display OSD window, FALSE: hide OSD window

    \return if success, \c E_PASS, else error code

	\see OSD_WIN_ID
*/
STATUS OSD_winEnable( OSD_WIN_ID winID, BOOL enable){ 
	STATUS status=E_PASS;
	
	switch(winID) {
		case OSD_VID_WIN0:
			OSD_FSET(VIDWINMD, ACT0, enable == TRUE ? 1 : 0 );
			break;
		case OSD_VID_WIN1:
			OSD_FSET(VIDWINMD, ACT1, enable == TRUE ? 1 : 0 );
			break;
		case OSD_BMP_WIN0:
			OSD_FSET(OSDWIN0MD, OACT0, enable == TRUE ? 1 : 0 );
			break;
		case OSD_BMP_WIN1:
			OSD_FSET(OSDWIN1MD, OACT1, enable == TRUE ? 1 : 0 );
			break;
		case OSD_CURSOR  :
			OSD_FSET(RECTCUR, RCACT, enable == TRUE ? 1 : 0 );
			break;
		default:
			status=E_INVALID_INPUT;
			break;
	}
	return status;
}

/**
    \brief	Set OSD window start position

    \param	winID		OSD window ID
	\param  startX		display start position in X direction. Unit: pixels      
	\param  startY		display start position in Y direction. Unit: field lines 

    \return if success, \c E_PASS, else error code

	\see OSD_WIN_ID
*/
STATUS OSD_setWinStartPosition( OSD_WIN_ID winID, Uint16 startX, Uint16 startY){ 
	STATUS status=E_PASS;
	
	switch(winID) {
		case OSD_VID_WIN0:
			OSD_RSET( VIDWIN0XP, startX);
			OSD_RSET( VIDWIN0YP, startY);	
			break;
		case OSD_VID_WIN1:
			OSD_RSET( VIDWIN1XP, startX);
			OSD_RSET( VIDWIN1YP, startY);
			break;
		case OSD_BMP_WIN0:
			OSD_RSET( OSDWIN0XP, startX);
			OSD_RSET( OSDWIN0YP, startY);
			break;
		case OSD_BMP_WIN1:
			OSD_RSET( OSDWIN1XP, startX);
			OSD_RSET( OSDWIN1YP, startY);
			break;
		case OSD_CURSOR  :
			OSD_RSET( CURXP, startX);
			OSD_RSET( CURYP, startY);
			break;
		default:
			status=E_INVALID_INPUT;
			break;
	}
	return status;
}


/**
    \brief	Set OSD window horizontal, vertical size

    \param	winID		OSD window ID
	\param  width		display width. Unit: pixels      
	\param  height		display height. Unit: field lines 

    \return if success, \c E_PASS, else error code

	\see OSD_WIN_ID
*/
STATUS OSD_setWinSize( OSD_WIN_ID winID, Uint16 width, Uint16 height){ 
	STATUS status=E_PASS;
	
	switch(winID) {
		case OSD_VID_WIN0:
			OSD_RSET( VIDWIN0XL, width);
			OSD_RSET( VIDWIN0YL, height);	
			break;
		case OSD_VID_WIN1:
			OSD_RSET( VIDWIN1XL, width);
			OSD_RSET( VIDWIN1YL, height);
			break;
		case OSD_BMP_WIN0:
			OSD_RSET( OSDWIN0XL, width);
			OSD_RSET( OSDWIN0YL, height);
			break;
		case OSD_BMP_WIN1:
			OSD_RSET( OSDWIN1XL, width);
			OSD_RSET( OSDWIN1YL, height);
			break;
		case OSD_CURSOR  :
			OSD_RSET( CURXL, width);
			OSD_RSET( CURYL, height);
			break;
		default:
			status=E_INVALID_INPUT;
			break;
	}
	return status;
}

/**
    \brief	Set OSD window data address

    \param	winID		OSD window ID
	\param  address		Absolute SDRAM address, must be 32byte aligned

    \return if success, \c E_PASS, else error code
	
	\see OSD_WIN_ID
*/
STATUS OSD_setWinAddr(OSD_WIN_ID winID, char *address){ 
	STATUS status=E_PASS;

⌨️ 快捷键说明

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