📄 osd270.c
字号:
Uint32 addr;
if(address==NULL)
return E_INVALID_INPUT;
addr = (Uint32)address - SDRAM_MEMORY_BASE;
if( addr%32 != 0 )
status = E_INVALID_INPUT;
addr /= 32;
switch(winID) {
case OSD_VID_WIN0:
OSD_FSET( VIDWINADH, V0AH, addr >> 16 );
OSD_RSET( VIDWIN0ADL, addr );
break;
case OSD_VID_WIN1:
OSD_FSET( VIDWINADH, V1AH, addr >> 16);
OSD_RSET( VIDWIN1ADL, addr );
break;
case OSD_BMP_WIN0:
OSD_FSET( OSDWINADH, O0AH, addr >> 16);
OSD_RSET( OSDWIN0ADL, addr );
break;
case OSD_BMP_WIN1:
OSD_FSET( OSDWINADH, O1AH, addr >> 16);
OSD_RSET( OSDWIN1ADL, addr );
break;
default:
status=E_INVALID_INPUT;
break;
}
return status;
}
/**
\brief Get OSD window data address
\param winID OSD window ID
\return Absolute SDRAM address
\see OSD_WIN_ID
*/
Uint32 OSD_getWinAddr(OSD_WIN_ID winID){
Uint16 addrl=0, addrh=0;
switch(winID) {
case OSD_VID_WIN0:
addrh = OSD_FGET( VIDWINADH, V0AH);
addrl = OSD_RGET( VIDWIN0ADL );
break;
case OSD_VID_WIN1:
addrh = OSD_FGET( VIDWINADH, V1AH);
addrl = OSD_RGET( VIDWIN1ADL);
break;
case OSD_BMP_WIN0:
addrh = OSD_FGET( OSDWINADH, O0AH);
addrl = OSD_RGET( OSDWIN0ADL);
break;
case OSD_BMP_WIN1:
addrh = OSD_FGET( OSDWINADH, O1AH);
addrl = OSD_RGET( OSDWIN1ADL);
break;
default:
break;
}
return ( ( (Uint32)addrh << 16 ) | addrl )*32 + SDRAM_MEMORY_BASE;
}
/**
\brief Setup OSD LUT in RAM
LUT data in 'lut' must be arranged as follows:
\code
Uint8 lut[n*3]; // Y, Cb, Cr value range = 0..255, n = number of LUT entries to be added, 1..256
lut[0] = Y0; // color for index 0
lut[1] = Cb0;
lut[2] = Cr0;
lut[3] = Y1; // color for index 1
lut[4] = Cb1;
lut[5] = Cr1;
...
lut[(n-1)*3] = Y(n-1); // color for index 255
lut[(n-1)*3+1] = Cb(n-1);
lut[(n-1)*3+2] = Cr(n-1);
\endcode
\param lut pointer to LUT YUV data
\param numEntries number of LUT entries to be added, 1..256
\return if success, \c E_PASS, else error code
*/
STATUS OSD_setRamLUT(Uint8 *lut, Uint16 numEntries){
Uint16 i;
if(numEntries>256 || lut==NULL)
return E_INVALID_INPUT;
for(i=0; i< numEntries; i++) {
while( OSD_FGET( MISCCTL, CPBSY) )
;
OSD_RSET( CLUTRAMYCB, ((Uint16)lut[i*3] << 8) | lut[i*3+1] ); // Y, Cb value
OSD_RSET( CLUTRAMCR, ((Uint16)lut[i*3+2] << 8) | i ); // address, Cr value
}
return E_PASS;
}
/**
\brief Set OSD Video Window 0, ping pong buffer address
\param address Absolute SDRAM address
\return if success, \c E_PASS, else error code
*/
STATUS OSD_setPingPongBuffAddr( char *address){
STATUS status=E_PASS;
Uint32 addr;
if(address==NULL)
return E_INVALID_INPUT;
addr = (Uint32)address - SDRAM_MEMORY_BASE;
if( addr%32 != 0 )
status = E_INVALID_INPUT;
addr /= 32;
OSD_RSET( PPVWIN0ADH, addr >> 16);
OSD_RSET( PPVWIN0ADL, addr );
return status;
}
/**
\brief Get OSD Video Window 0, ping pong buffer address
\return Absolute SDRAM address
*/
Uint32 OSD_getPingPongBuffAddr(){
return ( ( (Uint32)OSD_RGET(PPVWIN0ADH) << 16 ) | OSD_RGET( PPVWIN0ADL) )*32 + SDRAM_MEMORY_BASE ;
}
/**
\brief Switch OSD Video Window 0 address
\param pingPongBuff TRUE: Use ping pong buffer address, FALSE: use other address
\return if success, \c E_PASS, else error code
*/
STATUS OSD_switchToPingPongBuff( BOOL pingPongBuff){
if( OSD_FGET(MISCCTL, PPRV) == 0) {
OSD_FSET(MISCCTL, PPSW, pingPongBuff == TRUE ? 1 : 0 );
} else {
OSD_FSET(MISCCTL, PPSW, pingPongBuff == TRUE ? 0 : 1 );
}
return E_PASS;
}
/**
\brief Set OSD 1,2,4-bit bitmap color pallatte
\param winID OSD_BMP_WIN0 or OSD_BMP_WIN1
\param bmpWidth Pixel width, 0: OSD_BMP_1BIT, 1: OSD_BMP_2BIT, 2: OSD_BMP_4BIT
\param bmpValue Bitmap index value
\param lutColor LUT color index for 'bmpValue'
\return if success, \c E_PASS, else error code
*/
STATUS OSD_setBmpColor( OSD_WIN_ID winID, Uint8 bmpWidth, Uint8 bmpValue, Uint8 lutColor){
STATUS status=E_PASS;
switch( winID ) {
case OSD_BMP_WIN0:
switch(bmpWidth) {
case OSD_BMP_1BIT:
switch(bmpValue) {
case 0:
OSD_FSET(W0BMP01, PAL00, lutColor);
break;
case 1:
OSD_FSET(W0BMPEF, PAL15, lutColor);
break;
default:
status=E_INVALID_INPUT;
break;
}
break;
case OSD_BMP_2BIT:
switch(bmpValue) {
case 0:
OSD_FSET(W0BMP01, PAL00, lutColor);
break;
case 1:
OSD_FSET(W0BMP45, PAL05, lutColor);
break;
case 2:
OSD_FSET(W0BMPAB, PAL10, lutColor);
break;
case 3:
OSD_FSET(W0BMPEF, PAL15, lutColor);
break;
default:
status=E_INVALID_INPUT;
break;
}
break;
case OSD_BMP_4BIT:
switch(bmpValue) {
case 0:
OSD_FSET(W0BMP01, PAL00, lutColor);
break;
case 1:
OSD_FSET(W0BMP01, PAL01, lutColor);
break;
case 2:
OSD_FSET(W0BMP23, PAL02, lutColor);
break;
case 3:
OSD_FSET(W0BMP23, PAL03, lutColor);
break;
case 4:
OSD_FSET(W0BMP45, PAL04, lutColor);
break;
case 5:
OSD_FSET(W0BMP45, PAL05, lutColor);
break;
case 6:
OSD_FSET(W0BMP67, PAL06, lutColor);
break;
case 7:
OSD_FSET(W0BMP67, PAL07, lutColor);
break;
case 8:
OSD_FSET(W0BMP89, PAL08, lutColor);
break;
case 9:
OSD_FSET(W0BMP89, PAL09, lutColor);
break;
case 10:
OSD_FSET(W0BMPAB, PAL10, lutColor);
break;
case 11:
OSD_FSET(W0BMPAB, PAL11, lutColor);
break;
case 12:
OSD_FSET(W0BMPCD, PAL12, lutColor);
break;
case 13:
OSD_FSET(W0BMPCD, PAL13, lutColor);
break;
case 14:
OSD_FSET(W0BMPEF, PAL14, lutColor);
break;
case 15:
OSD_FSET(W0BMPEF, PAL15, lutColor);
break;
default:
status=E_INVALID_INPUT;
break;
}
break;
default:
status=E_INVALID_INPUT;
break;
}
break;
case OSD_BMP_WIN1:
switch(bmpWidth) {
case OSD_BMP_1BIT:
switch(bmpValue) {
case 0:
OSD_FSET(W1BMP01, PAL00, lutColor);
break;
case 1:
OSD_FSET(W1BMPEF, PAL15, lutColor);
break;
default:
status=E_INVALID_INPUT;
break;
}
break;
case OSD_BMP_2BIT:
switch(bmpValue) {
case 0:
OSD_FSET(W1BMP01, PAL00, lutColor);
break;
case 1:
OSD_FSET(W1BMP45, PAL05, lutColor);
break;
case 2:
OSD_FSET(W1BMPAB, PAL10, lutColor);
break;
case 3:
OSD_FSET(W1BMPEF, PAL15, lutColor);
break;
default:
status=E_INVALID_INPUT;
break;
}
break;
case OSD_BMP_4BIT:
switch(bmpValue) {
case 0:
OSD_FSET(W1BMP01, PAL00, lutColor);
break;
case 1:
OSD_FSET(W1BMP01, PAL01, lutColor);
break;
case 2:
OSD_FSET(W1BMP23, PAL02, lutColor);
break;
case 3:
OSD_FSET(W1BMP23, PAL03, lutColor);
break;
case 4:
OSD_FSET(W1BMP45, PAL04, lutColor);
break;
case 5:
OSD_FSET(W1BMP45, PAL05, lutColor);
break;
case 6:
OSD_FSET(W1BMP67, PAL06, lutColor);
break;
case 7:
OSD_FSET(W1BMP67, PAL07, lutColor);
break;
case 8:
OSD_FSET(W1BMP89, PAL08, lutColor);
break;
case 9:
OSD_FSET(W1BMP89, PAL09, lutColor);
break;
case 10:
OSD_FSET(W1BMPAB, PAL10, lutColor);
break;
case 11:
OSD_FSET(W1BMPAB, PAL11, lutColor);
break;
case 12:
OSD_FSET(W1BMPCD, PAL12, lutColor);
break;
case 13:
OSD_FSET(W1BMPCD, PAL13, lutColor);
break;
case 14:
OSD_FSET(W1BMPEF, PAL14, lutColor);
break;
case 15:
OSD_FSET(W1BMPEF, PAL15, lutColor);
break;
default:
status=E_INVALID_INPUT;
break;
}
break;
default:
status=E_INVALID_INPUT;
break;
}
break;
default:
status=E_INVALID_INPUT;
break;
}
return status;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -