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

📄 video.c

📁 myson的MTV332的DEMO程序 主要功能有菜单的设计和无线遥控以及视频参数的调节
💻 C
字号:
#include "global.h"

BYTE OldVideoStatus;

//#define _Decoder_For_LG_

#ifdef _CS7110_
/****************************************************************************/
void Set_VideoBrightness(void)
{
       sBright.Brightness = ItemValue.value;
	Set_BrightPWM = sBright.Brightness;
	
#ifdef _DEBUG_
	gotoxy(2,6);
	PrintValue(sBright.Brightness,Yellow);
#endif

}

/****************************************************************************/
void Set_VideoContrast(void)
{
	sBright.Contrast = ItemValue.value;
	Set_ContrastPWM = sBright.Contrast;
	
#ifdef _DEBUG_
	gotoxy(2,6);
	PrintValue(sBright.Contrast,Yellow);
#endif
	
}

/****************************************************************************/
void Set_VideoSaturation(void)
{
	sColor.Saturation = ItemValue.value;
	Set_SaturatPWM = sColor.Saturation;

#ifdef _DEBUG_
		gotoxy(2,6);
		PrintValue(sColor.Saturation,Yellow);
#endif
	
}

/****************************************************************************/
void Set_VideoHue(void)
{
	sColor.Hue = ItemValue.value;
	Set_TintPWM = sColor.Hue;

#ifdef _DEBUG_
		gotoxy(2,6);
		PrintValue(sColor.Hue,Yellow);
#endif

}

/****************************************************************************/
void Def_VideoData(void)
{
	Set_BrightPWM = sBright.Brightness;
	Set_ContrastPWM = sBright.Contrast;
	Set_SaturatPWM = sColor.Saturation ;
	//Set_TintPWM = sColor.Hue;	//byMTV_DA5
	Set_TintPWM = 0x78;	//byMTV_DA5

#ifdef _MTV332_	
	//GammaPWM_VG1L = sGamma.Vg1;
	GammaPWM_VG1L = 0x3F;
	GammaPWM_VG2L = sGamma.Vg2;
	GammaPWM_SUB1B = sGamma.Vg1B;
	GammaPWM_SUB2B = sGamma.Vg2B;
	GammaPWM_SUB1R = sGamma.Vg1R;
	GammaPWM_SUB2R = sGamma.Vg2R;
#endif
	byMTV_HORD=sOSD.H_Pos;
	byMTV_VERTD=sOSD.V_Pos;
}

#ifdef _MTV332_
void Get_VideoSync(void)
{
    GetSync();

    if(!bVsyncChange)
		return;
	
    ReadSyncStatus();

    if(bNoSync)
    	{
    	  HVMUX = 0x03;
         byMTV_FSSTP = 0x83;
         byMTV_OSDCON = 0x80;
	  bNTSCVideo = 1;
	  Disp_NoSync_Input();
     	  return;
    	}
	
    HVMUX = 0x00;
    byMTV_FSSTP = 0x00;
    byMTV_OSDCON = 0x00;	

    if(bNTSCVideo)  //NTSC Mode
        Disp_NTSC_Mode();
    else
	 Disp_PAL_Mode();
}
#endif


#else
#ifdef _CS7111_

void Set_VideoBrightness(void)
{
	sBright.Brightness = ItemValue.value;
	CS7111_Write(0x04,sBright.Brightness);
}

/****************************************************************************/
void Set_VideoContrast(void)
{
	sBright.Contrast = ItemValue.value;
	CS7111_Write(0x00,sBright.Contrast);
	
}
void Set_VideoSubContrast(void)
{
	sBright.SubContrast = ItemValue.value;
	CS7111_Write(0x05,sBright.SubContrast|0x10);
	
}

/****************************************************************************/
void Set_VideoSaturation(void)
{
	sColor.Saturation = ItemValue.value;
	CS7111_Write(0x01,sColor.Saturation|0x80);
}

/****************************************************************************/
void Set_VideoHue(void)
{
	sColor.Hue = ItemValue.value;
	CS7111_Write(0x02,sColor.Hue|0x80);
}
/****************************************************************************/
void Set_VideoSharpness(void)
{
	sColor.Sharpness = ItemValue.value;
	CS7111_Write(0x03,sColor.Sharpness|0x80);
	
}
/****************************************************************************/
void Def_VideoData(void)
{
	CS7111_Write(0x04,sBright.Brightness);
	CS7111_Write(0x00,sBright.Contrast);
	CS7111_Write(0x01,sColor.Saturation|0x80);		// bit7: C-TRAP 1:on , 0:off
	CS7111_Write(0x02,sColor.Hue|0x80);				// bit7: RGB 1:AC input, 0:DC input
	CS7111_Write(0x03,sColor.Sharpness|0x80);		// bit7: N-COMB 1:NTSC on, 0:off
	CS7111_Write(0x06,((sGamma.WhiteLimit&0x0F)<<4)|(sGamma.BlackLimit&0x0F));
	CS7111_Write(0x07,sGamma.Vg1);
	CS7111_Write(0x08,sGamma.Vg2);
	CS7111_Write(0x0E,sGamma.CAMP);
	CS7111_Write(0x0F,sGamma.CDC);
	CS7111_Write(0x0A,sGamma.DR | 0x00);			// 
	CS7111_Write(0x0B,sGamma.DG | 0x00);
	CS7111_Write(0x0C,sGamma.DB | 0x00);
	
	
	switch(sImage.InputMode)
	{
		case 0x00:		// CVBS in
			//CS7111_Write(0x0D,0x08);
			VSW = 0x00;
			SyncSW = 0;
			ColorSys = 0;
			WIDEBLKPOL = 0;
			CS7111_Write(0x0D,((SyncSW<<7)|(WIDEBLKPOL<<6)|(VSW<<3)|(ColorSys&0x07)));
			break;
		case 0x01:		// S-Video
			//CS7111_Write(0x0D,0x10);
			VSW = 0x03;
			SyncSW = 0;
			ColorSys = 0;
			WIDEBLKPOL = 0;			
			CS7111_Write(0x0D,((SyncSW<<7)|(WIDEBLKPOL<<6)|(VSW<<3)|(ColorSys&0x07)));
			break;
		case 0x02:
			//CS7111_Write(0x0D,0x20);		// YPbPr
			VSW = 0x04;
			SyncSW = 0;
			ColorSys = 0;
			WIDEBLKPOL = 0;
			CS7111_Write(0x0D,((SyncSW<<7)|(WIDEBLKPOL<<6)|(VSW<<3)|(ColorSys&0x07)));
			break;
		case 0x03:
			//CS7111_Write(0x0D,0xA8);		// R, G, B
			VSW = 0x05;
			SyncSW = 1;
			ColorSys = 0;
			WIDEBLKPOL = 0;
			CS7111_Write(0x0D,((SyncSW<<7)|(WIDEBLKPOL<<6)|(VSW<<3)|(ColorSys&0x07)));
			break;
	}
	
	
}
/****************************************************************************/
void Set_GammaVg1(void)
{
	sGamma.Vg1 = ItemValue.value;
	CS7111_Write(0x07,sGamma.Vg1);
}
/****************************************************************************/
void Set_GammaVg2(void)
{
	sGamma.Vg2 = ItemValue.value;
	CS7111_Write(0x08,sGamma.Vg2);
}
/****************************************************************************/
void Set_VCOMAMP(void)
{
	sGamma.CAMP= ItemValue.value;
	CS7111_Write(0x0E,sGamma.CAMP);
}
/****************************************************************************/
void Set_VCOMDC(void)
{
	sGamma.CDC = ItemValue.value;
	CS7111_Write(0x0F,sGamma.CDC);
}
/****************************************************************************/
void Set_DriveR(void)
{
	sGamma.DR = ItemValue.value;
	CS7111_Write(0x0A,sGamma.DR | 0x00);
	//CS7111_Write(0x12,sGamma.DR );
}
/****************************************************************************/
void Set_DriveG(void)
{
	sGamma.DG= ItemValue.value;
	CS7111_Write(0x0B,sGamma.DG | 0x00);
	//CS7111_Write(0x13,sGamma.DG );
}
/****************************************************************************/
void Set_DriveB(void)
{
	sGamma.DB = ItemValue.value;
	CS7111_Write(0x0C,sGamma.DB | 0x00);
}
/****************************************************************************/



BYTE ReadVideoStatus()
{
	BYTE Temp;

	SStatus=Video_Sync();	// For Sync detect
	Video_S(SStatus);
	CS7111_Read(0x00,&Temp,1);		
	
	Temp&=0x7C;
	return Temp;
	
}
void Get_VideoSync(void)
{
	BYTE temp;

	bSyncChange = FALSE;

	switch(SyncStep)
	{
		case 0 :   // check video sync change
			temp = ReadVideoStatus();
			if(temp != OldVideoStatus)
			{                       
				OldVideoStatus = temp;
				SyncStep = 1;
				SyncReChkCnt = SYNC_STABLE_TIME;
				CS7111_Write(0x0A, 0x60);	// enable Free run
				byMTV_TCONADDR = 0x0B;  // 0x00 ~ 0x1d
				byMTV_TCONDATA = 0x08;  // 0x00 ~ 0x1d
				DisableOSD();
			}				
				
				#if 0
				if((temp&0x20) == 0x20)
				{
					tmpbuf[0]++;
					OldVideoStatus = temp;
					temp=(temp&0x1C)>>2;
					if(temp>=0x01&&temp<=0x03)
						bNTSCVideo = 0;
					else if(temp>=0x04&&temp<=0x05)
						bNTSCVideo = 1;
					bSyncChange = TRUE;
					bNoSync = 0;
				}
				else if((temp&0x20) == 0x00)
				{
					tmpbuf[1]++;
					OldVideoStatus = temp;
					bSyncChange = TRUE;
					bNoSync = 1;
				}
				#endif
			/*	
                        if(temp != 0x3C)
                        {
                        // turn off  display                       	                            
				    SetBlack(ON);
                                Res_BKLT;
                                Close_OSD();
                                OldVideoStatus = temp;
                                SyncStep = 1;
                                SyncReChkCnt = VIDEOSYNC_STABLE_TIME;
                        }
				*/
			break;
		#if 1
		case 1 :  // wait sync stable
			if(SyncReChkCnt == 0)
			{
				SyncStep = 0;
				temp = ReadVideoStatus();
				if(temp == OldVideoStatus )
				{
					if((temp&0x3C)==0x20)
					{
						//VSW = 0x01;
						//SyncSW = 0;
						ColorSys = ~ColorSys;
						//WIDEBLKPOL = 0;
						CS7111_Write(0x0D,((SyncSW<<7)|(WIDEBLKPOL<<6)|(VSW<<3)|(ColorSys&0x01)));			 	
					}	
					VideoStatusDecode(temp);
					bSyncChange = TRUE;
				}
			}
			break;
		  #endif
		  //Prevent unknow variable
		default:
			SyncStep = 0;
			break;
	}

}

void Video_SyncProc()
{
	if(bSyncChange==0)
		return;
	if(bNoSync)
	{
		CS7111_Write(0x0A, 0x40);
		Disp_No_Input_Signal();
		return;
	}
	else
	{
		CS7111_Write(0x0A, 0x20);
	}


	byMTV_TCONADDR = 0x0B;  // 0x00 ~ 0x1d
	if(!bNTSCVideo)
	
		byMTV_TCONDATA = 0x05;  
	else
		byMTV_TCONDATA = 0x08;  // 0x00 ~ 0x1d

	
	Disp_Input_Mode();
	
		
}

void Initial_Video()
{
	
	
	DoWait(150);
	
	//CS7111_Write(0x0E,0xA0);
	//CS7111_Write(0x0F,0x80);
	CS7111_Write(0x0A,0x40);		// For default is no sync

	#ifdef MTV332_PLL
	CS7111_Write(0x12,0x7F);	
	CS7111_Write(0x10,0x31);		
	CS7111_Write(0x11,0x14);
	#endif

	#ifdef VD_PLL
	CS7111_Write(0x12,0x07);	
	CS7111_Write(0x10,0x11);		
	CS7111_Write(0x11,0x00);
	#endif
}
#endif

#endif
/****************************************************************************/
void VideoStatusDecode(BYTE temp)
{
        if( ((temp & 0x20) == 0) )       // No Connector
                bNoSync = TRUE;
        else
        {
                bNoSync = FALSE;

                if((temp & 0x40) )       
                        bNTSCVideo = 1;	// NTSC input
                else
                        bNTSCVideo = 0;	//PAL input

		byVideoMode = ((temp & 0x1c)>>2);

        }
}


/****************************************************************************/
void ReadSyncStatus(void)
{
        BYTE temp;
        temp = 0x00;
	 temp =  byMTV_HVSTUS & 0x80;  //Check Csync Present
        temp |=  byMTV_HVSTUS & 0x40;  //NPO  1:NTSC 0:PAL	 
        VideoStatusDecode(temp);
}

/****************************************************************************/
void ReadSyncPort(WORD *sync_pulse)
{

	if (byMTV_VCNTH & 0x80)   // V_Cnt overflow
	{
		sync_pulse[1] = 0;
	}
	else
	{
		sync_pulse[1] = ((byMTV_VCNTH & 0x0F)<<8) | byMTV_VCNTL;
	}

}


/****************************************************************************/
void GetSync(void)
{
	WORD temp[2];  //Save the H/V Sync in the array	
		
	bSyncChange = FALSE;
	
	switch(SyncStep)
	{
		case 0 :   // check sync change
			
			ReadSyncPort(temp);
			//Check the SYNC Tolerance  Hsync tolerance = 6  Vsync tolerance = 2
			if( Abs(temp[1],OldSyncPulse[1])> VCounterOffset)
			{
				OldSyncPulse[0] = temp[0];
				OldSyncPulse[1] = temp[1];
				SyncStep = 1;
				SyncReChkCnt = SYNC_STABLE_TIME;
			}
			
		break;	
		case 1 :  // wait sync stable

			if(SyncReChkCnt == 0)
			{
				SyncStep = 0;
				ReadSyncPort(temp);
				if( ( Abs(temp[1],OldSyncPulse[1])<= VCounterOffset))
				{
  				       ReadSyncStatus();
					bSyncChange = TRUE;					
					bVsyncChange = 1;
				}
			}
			
		break;
		
		//Prevent unknow variable
		default:
			SyncStep = 0;
		break;
	}
	
}

/****************************************************************************/

/****************************************************************************/
/*
#ifdef _MTV230_
void Get_VideoSync(void)
{

}

#endif

*/

void Disp_VideoDefault(void)
{
	/**/
	sBright.Brightness = 0xA2;
	sBright.Contrast = 0x5A;
	sBright.SubContrast = 0x06;
	sColor.Hue = 0x40;
	sColor.Saturation = 0x44;
	sColor.Sharpness= 0x32;
	sGamma.CAMP = 0x80;
	sGamma.CDC = 0xA0;
	sGamma.DB = 0x20;
	sGamma.DG = 0x20;
	sGamma.DR = 0x20;
	sGamma.Vg1 = 0x40;
	sGamma.Vg2 = 0x64;
	sImage.InputMode = 0x00;
	sGamma.WhiteLimit = 0x09;
	sGamma.BlackLimit = 0x08;
	/**/

	/*
	sBright.Brightness = 0xA5;
	sBright.Contrast = 0x68;
	sBright.SubContrast = 0x09;
	sColor.Hue = 0x40;
	sColor.Saturation = 0x40;
	sColor.Sharpness= 0x35;
	sGamma.CAMP = 0x75;
	sGamma.CDC = 0x82;
	//sGamma.DB = 0x09;
	//sGamma.DG = 0x1d;
	//sGamma.DR = 0x19;
	sGamma.DB = 0x20;
	sGamma.DG = 0x20;
	sGamma.DR = 0x20;
	sGamma.Vg1 = 0x40;
	sGamma.Vg2 = 0x64;
	sImage.InputMode = 0x00;
	sGamma.WhiteLimit = 0x09;
	sGamma.BlackLimit = 0x08;
	*/
	// CS7111 default setting
	#if 0
	CS7111_Write(0x00, 0x40);
	CS7111_Write(0x01, 0xC0);
	CS7111_Write(0x02, 0xC0);
	CS7111_Write(0x03, 0x90);
	CS7111_Write(0x04, 0x80);
	CS7111_Write(0x05, 0x04);
	CS7111_Write(0x06, 0x88);
	CS7111_Write(0x07, 0x80);
	CS7111_Write(0x08, 0x80);
	CS7111_Write(0x09, 0x88);
	CS7111_Write(0x0A, 0x20);
	CS7111_Write(0x0B, 0x20);
	CS7111_Write(0x0C, 0x20);
	CS7111_Write(0x0D, 0x00);
	CS7111_Write(0x0E, 0xA0);
	CS7111_Write(0x0F, 0x80);
	CS7111_Write(0x10, 0x10);
	CS7111_Write(0x11, 0x00);
	//CS7111_Write(0x12, 0x17);
	CS7111_Write(0x12, 0x03);
	CS7111_Write(0x13, 0x00);
	#endif
	
	#ifdef _Decoder_For_LG_	// Test only
	CS7111_Write(0x00, 0x5A);
	CS7111_Write(0x01, 0xC4);
	CS7111_Write(0x02, 0xC0);
	CS7111_Write(0x03, 0xB2);
	CS7111_Write(0x04, 0xA2);
	CS7111_Write(0x05, 0x16);
	CS7111_Write(0x06, 0xF5);
	CS7111_Write(0x07, 0x40);
	CS7111_Write(0x08, 0x64);
	CS7111_Write(0x09, 0x88);
	CS7111_Write(0x0A, 0x20);
	CS7111_Write(0x0B, 0x20);
	CS7111_Write(0x0C, 0x20);
	CS7111_Write(0x0D, 0x08);
	CS7111_Write(0x0E, 0x80);
	CS7111_Write(0x0F, 0xA0);
	CS7111_Write(0x10, 0x11);
	CS7111_Write(0x11, 0x10);
	CS7111_Write(0x12, 0x7F);
	CS7111_Write(0x13, 0x00);
	CS7111_Write(0x12, 0x7F);
	#endif

	#if 1	// Test only
	CS7111_Write(0x00, sBright.Contrast);		// Contrast(b6-b0) : 0x5A
	CS7111_Write(0x01, sColor.Saturation|0x80);		// Color(b6-b0) : 
	CS7111_Write(0x02, sColor.Hue|0x80);		// Tint(b6-b0)
	CS7111_Write(0x03, sColor.Sharpness|0x80);		// Sharpness(b5-b0)
	CS7111_Write(0x04, sBright.Brightness);		// Brightness(b7-b0) : A2
	CS7111_Write(0x05, sBright.SubContrast |0x01);		// SubContrast(b3-b0)
	CS7111_Write(0x06, ((sGamma.WhiteLimit<<4)|(sGamma.BlackLimit)));		// White(b7-b4) and Black(b3-b0) Limiter
	CS7111_Write(0x07, sGamma.Vg1);		// Gamma1(b7-b0)
	CS7111_Write(0x08, sGamma.Vg2);		// Gamma 2(b7-b0)
	CS7111_Write(0x09, 0x88);		// Sub Bright-R(b7-b4) and Sub Bright-B(b3-b0)
	CS7111_Write(0x0A, sGamma.DR);		// Drive R(b5-b0)
	CS7111_Write(0x0B, sGamma.DG);		// Drive G(b5-b0)
	CS7111_Write(0x0C, sGamma.DB);		// Drive B(b5-b0)
	CS7111_Write(0x0D, 0x00);		// Video SW + Color System
	CS7111_Write(0x0E, sGamma.CAMP);		// VCOM Amplitude(b7-b0)
	CS7111_Write(0x0F, sGamma.CDC);		// VCOM DC(b7-b0)
	CS7111_Write(0x10, 0x31);		// 
	CS7111_Write(0x11, 0x14);
	CS7111_Write(0x12, 0x7F);
	CS7111_Write(0x13, 0x00);
	//CS7111_Write(0x12, 0x7F);
	#endif

	 MenuProcess = Disp_Entry;

}

⌨️ 快捷键说明

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