📄 osd270.c
字号:
/*
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 + -