📄 video.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 + -