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

📄 osd270.c

📁 dm270 source code
💻 C
📖 第 1 页 / 共 2 页
字号:
	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 + -