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

📄 mse_free.c

📁 一个比较好用的TW2835音视频芯片开发板的程序,
💻 C
📖 第 1 页 / 共 2 页
字号:
#include	"hdr.h"

//==================================================================================
//==================================================================================
//						Mse & channel co-operation definition & variable description
//==================================================================================
//==================================================================================
U8	mse_ch_drg;
U8	mse_ch_scl;
U8	mse_ch_ptr;

U8	mse_ch_l;
U8	mse_ch_r;
U8	mse_ch_t;
U8	mse_ch_b;


//==================================================================================
//==================================================================================
//						Mse & channel co-operation function description
//==================================================================================
//==================================================================================
/*		//... display channel number
void	SetMseFreeOSDCh(U8 _index_x, U8 _index_y, U8 _ch)
{
	U8 _t1_;
	
	RamClearOSD(PTH_X);
	_t1_ = ReadAsicByte(MASTER,DVC_PG1,0xa0);
//	IfBitClear(_t1_,BIT7|BIT6)
		DisplayValue(PTH_X,_index_x,_index_y,0xff,_ch,2);
}
//	*/
//==================================================================================
void SetMseFreeDrg(void)
{
	U8 _pos_x_, _pos_y_;
	U8 _pic_sz_[4];
	U8 _dvc_, _ch_;
	U8 _t1_;//, _t2_;

	_pos_x_ = (U8)(reg_crsr_pos_x>>1);
	_pos_y_ = (U8)(reg_crsr_pos_y>>1);


	if((b_mse_rlse_lb == 0)&&(b_mse_init_scl == 0)){
		if(b_mse_init_drg == 0){
			b_mse_init_drg = 1;
			if(b_mse_stts_pth == MSE_PTH_X)	b_mse_stts_free = ON;
//	if(BitClear(mse_flg,MSE_RLSE_LB)&&BitClear(mse_flg,MSE_INIT_SCL)){
//		if(BitClear(mse_flg,MSE_INIT_DRG)){
//			SetBit(mse_flg,MSE_INIT_DRG);
//			if(BitClear(mse_flg,MSE_STTS_PTH))	SetBit(mse_flg,MSE_STTS_FREE);
			
			if(mse_ch != 0xff){
				mse_ch_drg = mse_ch&0x0f;
				
				SetCrntDvcCh(mse_ch_drg,&_dvc_,&_ch_);
				for(_t1_=0;_t1_<4;_t1_++)	_pic_sz_[_t1_] = ReadAsicByte(_dvc_,DVC_PG1,0x30+(_ch_<<2)+_t1_);

//				if(mse_ch_drg < 4){
//					for(_t1_=0;_t1_<4;_t1_++)
//						_pic_sz_[_t1_] = ReadAsicByte(MASTER,DVC_PG1,0x30+(mse_ch_drg<<2)+_t1_);
//				}
//				else{
//					_t2_ = mse_ch_drg&0x03;
//					for(_t1_=0;_t1_<4;_t1_++)
//						_pic_sz_[_t1_] = ReadAsicByte(MASTER,DVC_PG1,0x40+(_t2_<<2)+_t1_);
//				}
				
				SetMseLyr(OFF);
				mse_ch_l = _pos_x_ - _pic_sz_[0];
				mse_ch_r = _pic_sz_[1] - _pos_x_;
				mse_ch_t = _pos_y_ - _pic_sz_[2];
				mse_ch_b = _pic_sz_[3] - _pos_y_;
				
/*		//... display channel number
				_t1_ = (_pic_sz_[0]+2)>>2;
				_t2_ = (_pic_sz_[2]+3)/5;
				SetMseFreeOSDCh(_t1_,_t2_,mse_ch_drg);
				//	*/
			}
			else
				mse_ch_drg = 0xff;
		}

		if(b_mse_stts_free == ON){
//		if(BitSet(mse_flg,MSE_STTS_FREE)){
			if(mse_ch_drg != 0xff){
				if(mse_btn_pshng_cnt == MSE_BTN_DLY_CLK){
					for(_t1_=0;_t1_<cmn_max_ch;_t1_++){
						SetCrntDvcCh(_t1_,&_dvc_,&_ch_);
						if(_t1_ == mse_ch_drg){
//							if(_t1_ < 4){
//	//							SetChFuncMode(PTH_X,_dvc_,_ch_,POP_UP,ON);
//	//							SetChCtrl(PTH_X,_dvc_,_ch_,FREEZE|ENHANCE|BLINK,OFF);
								SetAsicFlgType(_dvc_,DVC_PG1,0x10+(_ch_<<3),BIT6,BIT6);				//... enable popup
								SetAsicFlgType(_dvc_,DVC_PG1,0x11+(_ch_<<3),BIT6|BIT3|BIT0,0x00);	//... disable freeze,enhance,blink
//							}
//							else{
//								_t2_ = _t1_&0x03;
//	//							SetChFuncMode(PTH_X,_dvc_,_ch_,POP_UP,ON);
//	//							SetChCtrl(PTH_X,_dvc_,_ch_,FREEZE|ENHANCE|BLINK,OFF);
//								SetAsicFlgType(MASTER,DVC_PG1,0x13+(_t2_<<3),BIT6,BIT6);				//... enable popup
//								SetAsicFlgType(MASTER,DVC_PG1,0x14+(_t2_<<3),BIT6|BIT3|BIT0,0x00);	//... disable freeze,enhance,blink
//							}
						}
						else{
//							if(_t1_ < 4){
//	//							SetChFuncMode(PTH_X,_dvc_,_ch_,POP_UP,OFF);
								SetAsicFlgType(_dvc_,DVC_PG1,0x10+(_ch_<<3),BIT6,0x00);				//... disable popup
//							}
//							else{
//								_t2_ = _t1_&0x03;
//	//							SetChFuncMode(PTH_X,_dvc_,_ch_,POP_UP,OFF);
//								SetAsicFlgType(MASTER,DVC_PG1,0x13+(_t2_<<3),BIT6,0x00);				//... disable popup
//							}
						}
					}
				}

				SetCrntDvcCh(mse_ch_drg,&_dvc_,&_ch_);
				for(_t1_=0;_t1_<4;_t1_++)	_pic_sz_[_t1_] = ReadAsicByte(_dvc_,DVC_PG1,0x30+(_ch_<<2)+_t1_);

//				if(mse_ch_drg < 4){
//					for(_t1_=0;_t1_<4;_t1_++)
//						_pic_sz_[_t1_] = ReadAsicByte(MASTER,DVC_PG1,0x30+(mse_ch_drg<<2)+_t1_);
//				}
//				else{
//					_t2_ = mse_ch_drg&0x03;
//					for(_t1_=0;_t1_<4;_t1_++)
//						_pic_sz_[_t1_] = ReadAsicByte(MASTER,DVC_PG1,0x40+(_t2_<<2)+_t1_);
//				}


//				if((_pos_x_-mse_ch_l) > 0)//-1)
				if(_pos_x_ > mse_ch_l)
				{
					if((_pos_x_+mse_ch_r) <= 180)	
						_pic_sz_[0] = _pos_x_ - mse_ch_l;
//						_pic_sz_[0] = _pic_sz_[1]-(mse_ch_l+mse_ch_r);
				}
				else
				{
					_pic_sz_[0] = 0;
					_pic_sz_[1] = mse_ch_l + mse_ch_r;
				}


				if((_pos_x_+mse_ch_r) <= 180){
//					if((_pos_x_-mse_ch_l) > 0)//-1)
					if(_pos_x_ > mse_ch_l)
						_pic_sz_[1] = _pos_x_ + mse_ch_r;
				}
				else{
					_pic_sz_[0] = 180 - (mse_ch_l + mse_ch_r);
					_pic_sz_[1] = 180;
				}


//				if((_pos_y_-mse_ch_t)  > 0)//-1)
				if(_pos_y_ > mse_ch_t)
				{
					if((_pos_y_+mse_ch_b) <= cmn_bot)
						_pic_sz_[2] = _pos_y_ - mse_ch_t;
				}
				else{
					_pic_sz_[2] = 0;
					_pic_sz_[3] = mse_ch_t + mse_ch_b;
				}


				if((_pos_y_+mse_ch_b) <= cmn_bot){
//					if((_pos_y_-mse_ch_t) > 0)//-1)
					if(_pos_y_ > mse_ch_t)
						_pic_sz_[3] = _pos_y_ + mse_ch_b;
				}
				else{
					_pic_sz_[2] = cmn_bot - (mse_ch_t + mse_ch_b);
					_pic_sz_[3] = cmn_bot;
				}


				for(_t1_=0;_t1_<4;_t1_++)	WriteAsicByte(_dvc_,DVC_PG1,0x30+(_ch_<<2)+_t1_,_pic_sz_[_t1_]);
				//... 2d box setting
				WriteAsicByte(_dvc_,DVC_PG2,0x62+(_ch_<<3),_pic_sz_[0]+1);
				WriteAsicByte(_dvc_,DVC_PG2,0x64+(_ch_<<3),_pic_sz_[2]);

//				if(mse_ch_drg < 4){
//					for(_t1_=0;_t1_<4;_t1_++)
//						WriteAsicByte(MASTER,DVC_PG1,0x30+(mse_ch_drg<<2)+_t1_,_pic_sz_[_t1_]);
//						
//					//... 2d box setting
//					WriteAsicByte(MASTER,DVC_PG2,0x62+(mse_ch_drg<<3),_pic_sz_[0]+1);
//					WriteAsicByte(MASTER,DVC_PG2,0x64+(mse_ch_drg<<3),_pic_sz_[2]);
//				}
//				else{
//					_t2_ = mse_ch_drg&0x03;
//					for(_t1_=0;_t1_<4;_t1_++)
//						WriteAsicByte(MASTER,DVC_PG1,0x40+(_t2_<<2)+_t1_,_pic_sz_[_t1_]);
//						
//					//... 2d box setting
//					WriteAsicByte(MASTER,DVC_PG2,0x62+(_t2_<<3),_pic_sz_[0]+1);
//					WriteAsicByte(MASTER,DVC_PG2,0x64+(_t2_<<3),_pic_sz_[2]);
//				}


/*		//... display channel boundary value
				if(b_jp_video == NTSC)	_t2_ = 20;
				else	_t2_ = 24;
				for(_t1_=0;_t1_<4;_t1_++)	DisplayValue(PTH_X,1+3*_t1_,_t2_,0xff,_pic_sz_[_t1_],2);
				//	*/

/*	//... display channel number
				if(b_mse_no_moving == OFF){
					_t1_ = (_pic_sz_[0]+2)>>2;
					_t2_ = (_pic_sz_[2]+3)/5;
					SetMseFreeOSDCh(_t1_,_t2_,mse_ch_drg);
				}
				//	*/
			}
		}
	}
	else{
		if(b_mse_init_drg == 1){
			b_mse_init_drg = 0;
			SetMseLyr(ON);
			b_mse_stts_free = OFF;
//		if(BitSet(mse_flg,MSE_INIT_DRG)){
//			ClearBit(mse_flg,MSE_INIT_DRG);
//			SetMseLyr(ON);
//			ClearBit(mse_flg,MSE_STTS_FREE);

/*		//... display channel boundary value
			if(b_jp_video == NTSC)	_t2_ = 20;
			else	_t2_ = 24;
			ClearOSD(PTH_X,0,_t2_,45,1);
			//	*/
		}
	}
}
//==================================================================================
//==================================================================================
//*
U16	GetMseFreeSclVSub(U16 _scl, U8 _dvc, U8 _ch, U8 _picvt, U8 _picvb)
{
	if((_picvb - _picvt) <= (cmn_bot>>1)){
		_scl <<= 1;
		SetAsicFlgType(_dvc,DVC_PG1,0x12+(_ch<<3),BIT5,BIT5);		//... FIELD_OP=1
		SetAsicFlgType(_dvc,DVC_PG1,0x06,BIT2,BIT2);					//... CH_VAR_CTL=1
	}
	else{
		SetAsicFlgType(_dvc,DVC_PG1,0x12+(_ch<<3),BIT5,0x00);		//... FIELD_OP=0
		SetAsicFlgType(_dvc,DVC_PG1,0x06,BIT2,0x00);					//... CH_VAR_CTL=0
	}

	return	_scl;
}
//==================================================================================
U16	GetMseFreeSclV(U16 _scl, U8 _dvc, U8 _ch, U8 _picvt, U8 _picvb)
{
////#if	defined(__4CH__)
////	if(b_jp_4pb == OFF){
////#endif
//		if(GetAsicFlag(_dvc,DVC_PG0,0x38,BIT0<<_ch)){				//... when enable pb
		if(GetAsicFlgType(_dvc,DVC_PG1,0x10+(_ch<<3),BIT2)){				//... PB_PATH_EN=1
////			if(glbl_dspl_pb_inpt == PB_INPT_REC){
//				if(((b_rec_fmt_type == FMT_TYPE_CIF)&&(glbl_rec_fmt_cif_type == CIF_TYPE_FL))||
//					((b_rec_fmt_type == FMT_TYPE_MUX)&&(glbl_rec_fmt_mux_type != MUX_TYPE_LV))){				//... max v scale of pb input is quad for each channel
				if(wndw_rc_fm_type > CIF_TYPE_FR){
					_scl = GetMseFreeSclVSub(_scl,_dvc,_ch,_picvt,_picvb);
				}
//				else if((b_rec_fmt_type == FMT_TYPE_CIF)&&(glbl_rec_fmt_cif_type == CIF_TYPE_FR)){
				else if(wndw_rc_fm_type == CIF_TYPE_FR){
					//... update:050707 Rev2.0
					_scl <<= 1;
#if	defined(__16CH__)
					if((_picvb - _picvt) <= (cmn_bot>>2)){			//... if(real size <= pip)
						_scl <<= 1;
						SetAsicFlgType(_dvc,DVC_PG1,0x12+(_ch<<3),BIT5,BIT5);		//... FIELD_OP=1
						SetAsicFlgType(_dvc,DVC_PG1,0x06,BIT2,BIT2);					//... CH_VAR_CTL=1
					}
					else{
						SetAsicFlgType(_dvc,DVC_PG1,0x12+(_ch<<3),BIT5,0x00);		//... FIELD_OP=0
						SetAsicFlgType(_dvc,DVC_PG1,0x06,BIT2,0x00);					//... CH_VAR_CTL=0
					}
#endif
				}
//			}
//			else if(glbl_dspl_pb_inpt == PB_INPT_MUX){
//				if(glbl_rec_fmt_mux_type != MUX_TYPE_LV){
//					_scl = GetMseFreeSclVSub(_scl,_dvc,_ch,_picvt,_picvb);
//				}
//			}
//			else{
//				if(glbl_rec_fmt_cif_type == CIF_TYPE_FL){
//					_scl = GetMseFreeSclVSub(_scl,_dvc,_ch,_picvt,_picvb);
//				}
//				else{
//					//... update:050707 Rev2.0
//					_scl <<= 1;
////#if	defined(__16CH__)
////					if((_picvb - _picvt) <= (cmn_bot>>2)){			//... if(real size <= pip)
////						_scl <<= 1;
////						SetAsicFlag(_dvc,DVC_PG1,REG_FIELD_OP_X,BIT4<<_ch,BIT4<<_ch);
////						SetAsicFlag(_dvc,DVC_PG1,REG_MUX_CTL_X,BIT2,BIT2);
////					}
////					else{
////							SetAsicFlag(_dvc,DVC_PG1,REG_FIELD_OP_X,BIT4<<_ch,0x00);
////							SetAsicFlag(_dvc,DVC_PG1,REG_MUX_CTL_X,BIT2,0x00);
////					}
////#endif
//				}
//			}
		}
		else{
			SetAsicFlgType(_dvc,DVC_PG1,0x12+(_ch<<3),BIT5,0x00);		//... FIELD_OP=0
			SetAsicFlgType(_dvc,DVC_PG1,0x06,BIT2,0x00);					//... CH_VAR_CTL=0
		}
//#if	defined(__4CH__)
//	}
//#endif

	return	_scl;
}
//	*/
//==================================================================================
void	SetMseFreeSclV(U8 _dvc, U8 _ch, U8 _picxx, U8 _picvt, U8 _picvb)
{
	U16 _scl_v_unt_ = 65536/cmn_bot;//

	if(b_mse_scl_bnd_only == 0){
//	if(BitClear(mse_flg,MSE_SCL_BND_ONLY)){
		_scl_v_unt_ *= (_picvb-_picvt);
		_scl_v_unt_ = GetMseFreeSclV(_scl_v_unt_,_dvc,_ch,_picvt,_picvb);

		if(GetAsicFlgType(_dvc,DVC_PG1,0x10+(_ch<<3),BIT2))				//... PB_PATH_EN=1
//			SetSclV(PTH_PB,_dvc,mse_ch_scl,_scl_v_unt_);	
			SetSclV(PTH_PB,_dvc,_ch,_scl_v_unt_);	
		else
//			SetSclV(PTH_X,_dvc,mse_ch_scl,_scl_v_unt_);	
			SetSclV(PTH_X,_dvc,_ch,_scl_v_unt_);	

//		if(GetAsicFlag(_dvc,DVC_PG1,REG_FIELD_OP_X,BIT4<<_ch))
//			SetAsicFlag(_dvc,DVC_PG0,0x15+0x40*_ch,BIT5,BIT5);				// set 2 for V_ALIAS_X(page0) when FIELD_OP(page1) == 1.
	}
//	if(mse_ch_ptr < 4){
		if(_picxx == 0x32)	WriteAsicByte(_dvc,DVC_PG1,0x32+(_ch<<2),_picvt);
		else	WriteAsicByte(_dvc,DVC_PG1,0x33+(_ch<<2),_picvb);
//	}
//	else{
//		if(_picxx == 0x42)	WriteAsicByte(_dvc,DVC_PG1,0x42+(_ch<<2),_picvt);
//		else	WriteAsicByte(_dvc,DVC_PG1,0x43+(_ch<<2),_picvb);
//	}
}
//==================================================================================
void	SetMseFreeSclH(U8 _dvc, U8 _ch, U8 _picxx, U8 _pichl, U8 _pichr, U8 _shft)
{
	if(b_mse_scl_bnd_only == 0){
//	if(BitClear(mse_flg,MSE_SCL_BND_ONLY)){
		if(GetAsicFlgType(_dvc,DVC_PG1,0x10+(_ch<<3),BIT2))				//... PB_PATH_EN=1
//			SetSclH(PTH_PB,_dvc,mse_ch_scl,((_pichr-_pichl)*0x016c)<<_shft);	// 0x016c(65536/180=364.09)

⌨️ 快捷键说明

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