📄 al576ctl.cpp
字号:
{
AL576_RegWrite(hAL576, 0x20a4, ResReg[Al576_MPEG_Seting->Res][0]);
Sleep(50);
AL576_RegWrite(hAL576, 0x20ac, ResReg[Al576_MPEG_Seting->Res][1]);
Sleep(50);
AL576_RegWrite(hAL576, 0x20b4, ResReg[Al576_MPEG_Seting->Res][2]);
Sleep(50);
AL576_RegWrite(hAL576, 0x20bc, ResReg[Al576_MPEG_Seting->Res][3] + 8);
Sleep(50);
AL576_RegWrite(hAL576, 0x2000, 0x0d01);
Sleep(50);
}
}
void CPlayDMODlg::Set_AL576_Command(HANDLE hAL576,Commamd_Ptr Parameter)
{
AL576_MemWrite(hAL576, 0x80,Parameter->Command);
Sleep(50);
AL576_MemWrite(hAL576, 0x84,Parameter->P1);
Sleep(50);
if(Parameter->P_Num >= 2)
{
AL576_MemWrite(hAL576, 0x88,Parameter->P2);
Sleep(50);
}
if(Parameter->P_Num >= 3)
{
AL576_MemWrite(hAL576, 0x8c,Parameter->P3);
Sleep(50);
}
if(Parameter->P_Num >= 4)
{
AL576_MemWrite(hAL576, 0x90,Parameter->P4);
Sleep(50);
}
AL576_RegWrite(hAL576, 0x1C74,0x1);
Sleep(50);
}
void CPlayDMODlg::Set_AL242_Reg(HANDLE hAL576,UINT iAddr,UINT iData)
{
UINT Result;
iAddr = iAddr << 16;
iData = iData << 8;
Result = iAddr | iData | 0x2a000001;
AL576_RegWrite(hAL576, 0x1c60, Result);
Sleep(100);
}
UINT CPlayDMODlg::Get_AL242_Reg(HANDLE hAL576,UINT iAddr)
{
UINT Result;
iAddr = (iAddr << 16) | 0x2b000001;
AL576_RegWrite(hAL576, 0x1c60, iAddr);
Sleep(50);
Result = AL576_RegRead(hAL576,0x1c60);
Sleep(50);
Result = (Result >> 8) & 0x000000ff;
return Result;
}
UINT CPlayDMODlg::Read_ProfileString(HANDLE hAL576,UINT nVideo_input,UINT nVideo_format,AL576_MPEG_SET_Ptr Al576_MPEG_Seting)
{
char szBuf[8];
//Select Video Input
GetProfileString(TEXT("annie"), TEXT("VideoInput"),NULL,szBuf,sizeof(szBuf));
if(strcmp(szBuf,"") == 0)
Set_Video_Input(hAL576,nVideo_input,nVideo_format);
else
{
nVideo_input = atoi(szBuf);
Set_Video_Input(hAL576,nVideo_input,nVideo_format);
}
//Select Video Format
GetProfileString(TEXT("annie"), TEXT("VideoFormat"),NULL,szBuf,sizeof(szBuf));
if(strcmp(szBuf,"") == 0)
{
//Auto Detect must twice
nVideo_format = AutoDetectProgress(hAL576, nVideo_input);
nVideo_format = AutoDetectProgress(hAL576, nVideo_input);
Set_Video_Format(hAL576,nVideo_format,nVideo_input);
}
else
{
nVideo_format = atoi(szBuf);
if(nVideo_format == 9)
{
//Auto Detect must twice
nVideo_format = AutoDetectProgress(hAL576, nVideo_input);
nVideo_format = AutoDetectProgress(hAL576, nVideo_input);
Set_Video_Format(hAL576,nVideo_format,nVideo_input);
}
else
Set_Video_Format(hAL576,nVideo_format,nVideo_input);
}
GetProfileString(TEXT("annie"), TEXT("Contrast"),NULL,szBuf,sizeof(szBuf));
if(strcmp(szBuf,"") != 0)
{
m_contrast = atoi(szBuf);
Set_AL242_Reg(hAL576,0x08,(UINT)m_contrast);
}
GetProfileString(TEXT("annie"), TEXT("Brightness"),NULL,szBuf,sizeof(szBuf));
if(strcmp(szBuf,"") != 0)
{
m_brightness = atoi(szBuf);
Set_AL242_Reg(hAL576,0x09,(UINT)m_brightness);
}
GetProfileString(TEXT("annie"), TEXT("Saturation"),NULL,szBuf,sizeof(szBuf));
if(strcmp(szBuf,"") != 0)
{
m_saturation = atoi(szBuf);
Set_AL242_Reg(hAL576,0x0a,(UINT)m_saturation);
}
GetProfileString(TEXT("annie"), TEXT("Hue"),NULL,szBuf,sizeof(szBuf));
if(strcmp(szBuf,"") != 0)
{
m_hue = atoi(szBuf);
Set_AL242_Reg(hAL576,0x0b,(UINT)m_hue);
}
GetProfileString(TEXT("annie"), TEXT("EC_Type"),NULL,szBuf,sizeof(szBuf));
if(strcmp(szBuf,"") != 0)
Al576_MPEG_Seting->Encoding_Type = atoi(szBuf);
GetProfileString(TEXT("annie"), TEXT("ST_Type"),NULL,szBuf,sizeof(szBuf));
if(strcmp(szBuf,"") != 0)
Al576_MPEG_Seting->Stream_Type = atoi(szBuf);
GetProfileString(TEXT("annie"), TEXT("Bmode"),NULL,szBuf,sizeof(szBuf));
if(strcmp(szBuf,"") != 0)
Al576_MPEG_Seting->Bit_rate_mode = atoi(szBuf);
GetProfileString(TEXT("annie"), TEXT("VBrate"),NULL,szBuf,sizeof(szBuf));
if(strcmp(szBuf,"") != 0)
Al576_MPEG_Seting->Video_bit_rate = atoi(szBuf);
GetProfileString(TEXT("annie"), TEXT("GOP"),NULL,szBuf,sizeof(szBuf));
if(strcmp(szBuf,"") != 0)
Al576_MPEG_Seting->GOP = atoi(szBuf);
GetProfileString(TEXT("annie"), TEXT("N"),NULL,szBuf,sizeof(szBuf));
if(strcmp(szBuf,"") != 0)
Al576_MPEG_Seting->N_Num = atoi(szBuf);
GetProfileString(TEXT("annie"), TEXT("RES"),NULL,szBuf,sizeof(szBuf));
if(strcmp(szBuf,"") != 0)
Al576_MPEG_Seting->Res = atoi(szBuf);
GetProfileString(TEXT("annie"), TEXT("ABR"),NULL,szBuf,sizeof(szBuf));
if(strcmp(szBuf,"") != 0)
Al576_MPEG_Seting->AudioBitRate = atoi(szBuf);
return nVideo_format;
}
void CPlayDMODlg::Set_Video_Format(HANDLE hAL576,int nVideoFormat,int nVideo_input)
{
if(nVideoFormat >= 0 || nVideoFormat <= 8)
SetupAL242VideoModeX(hAL576,nVideoFormat,nVideo_input);
}
#define AL242_DEBUG 0
void CPlayDMODlg::SetupAL242VideoModeX(HANDLE hAL576,unsigned int _VideoModeX,unsigned int _AL242InputMode)
{
unsigned int _dx;
unsigned int _mode;
unsigned int _ix;
unsigned long _gx;
double _Scale;
double _OSC = 20.0;
#if AL242_DEBUG
_dx = Get_AL242_Reg(hAL576,0xb7);
_dx &= 0xf7;
_dx |= 0x08;
Set_AL242_Reg(hAL576,0xb7,_dx);
#endif
_Scale = _OSC/27;
Set_AL242_Reg(hAL576,0xc1,(unsigned int)_OSC);
Set_AL242_Reg(hAL576,0x83,0xdf);
_dx=Get_AL242_Reg(hAL576,0x02);
_dx|=0x01; // enable auto gain control
Set_AL242_Reg(hAL576,0x02,_dx);
_dx = Get_AL242_Reg(hAL576,0x07);
_dx &= 0xcf;
_dx |= 0x10;
Set_AL242_Reg(hAL576,0x07,_dx);
_dx = Get_AL242_Reg(hAL576,0x00);
_dx &= 0x81;
_dx |= (VideoSpec[_colour_mode][_VideoModeX]<<1) + (VideoSpec[_vline_625][_VideoModeX]<<4) + (VideoSpec[_hpixel][_VideoModeX]<<5);
Set_AL242_Reg(hAL576,0x00,_dx);
_dx = Get_AL242_Reg(hAL576,0x01);
_dx &= 0xf0;
_dx |= VideoSpec[_ped][_VideoModeX];
_dx |= VideoSpec[_Chroma_bw_lo][_VideoModeX]<<2;
_dx |= (_VideoModeX !=_NTSC_443)?0x80:0x00;
Set_AL242_Reg(hAL576,0x01,_dx);
_dx=VideoSpec[_hagc][_VideoModeX];
Set_AL242_Reg(hAL576,0x04,_dx);
_gx = (unsigned long)((_4xSubCarrier[_VideoModeX]/_OSC)*0x40000000);
for(_ix = 0;_ix < 4;_ix++)
{
Set_AL242_Reg(hAL576,(0x1b - _ix),(unsigned int)(_gx & 0x000000ff));
_gx >>= 8;
}
_gx=(unsigned long)((13.5/_OSC)*0x40000000);
for(_ix=0;_ix<4;_ix++){
Set_AL242_Reg(hAL576,(0x1f - _ix),(unsigned int)(_gx & 0x000000ff));
_gx>>=8;
}
_dx = VideoSpec[_hactive_start][_VideoModeX];
Set_AL242_Reg(hAL576,0x2e,_dx);
_dx=VideoSpec[_vactive_start][_VideoModeX];
Set_AL242_Reg(hAL576,0x30,_dx);
_dx=VideoSpec[_vactive_high][_VideoModeX];
Set_AL242_Reg(hAL576,0x31,_dx);
_dx = Get_AL242_Reg(hAL576,0x03);
_dx &= 0xf8;
_dx |= (VideoSpec[_adaptive_mode][_VideoModeX]&0x07);
Set_AL242_Reg(hAL576,0x03,_dx);
if (_AL242InputMode == S_VIDEO)
{//S-Video Filter Setup
if((_VideoModeX==_NTSC_M)||(_VideoModeX==_NTSC_443))
{
_dx = Get_AL242_Reg(hAL576,0x03);
_dx &= 0xf8;
_dx |= 0x03;
Set_AL242_Reg(hAL576,0x03,_dx);
}
else
{
_dx = Get_AL242_Reg(hAL576,0x03);
_dx &= 0xf8; // 2d filter for PAL...
Set_AL242_Reg(hAL576,0x03,_dx);
}
}
_dx = Get_AL242_Reg(hAL576,0x0f);
_dx &= 0xc0;
_dx |= VideoSpec[_Cautopos][_VideoModeX];
Set_AL242_Reg(hAL576,0x0f,_dx);
_dx = Get_AL242_Reg(hAL576,0x82);
_dx &= 0xef;
_dx |= VideoSpec[_comb_wide_band][_VideoModeX]<<4;
Set_AL242_Reg(hAL576,0x82,_dx);
if (_AL242InputMode == S_VIDEO)
_mode = 1;
else
_mode = 0;
_dx =_CBS[_mode][_Contrast][_VideoModeX];
m_contrast = (int)_dx;
Set_AL242_Reg(hAL576,0x08,_dx);// contrast
_dx =_CBS[_mode][_Brightness][_VideoModeX];
m_brightness = (int)_dx;
Set_AL242_Reg(hAL576,0x09,_dx);// brightness
_dx =_CBS[_mode][_Saturation][_VideoModeX];
m_saturation = (int)_dx;
Set_AL242_Reg(hAL576,0x0a,_dx);// saturation
m_hue = (int)Get_AL242_Reg(hAL576,0xb);
//SoftWareResetAL242();
Set_AL242_Reg(hAL576,0x3f,0x01);
Set_AL242_Reg(hAL576,0x3f,0x00);
Sleep(0x400);
_dx = Get_AL242_Reg(hAL576,0x07);
_dx &= 0xcf;
_dx |= 0x20;
Set_AL242_Reg(hAL576,0x07,_dx);
}
void CPlayDMODlg::Set_Video_Input(HANDLE hAL576,int nVideo,int nVideo_format)
{
UINT Result = 0xff;
if(nVideo == S_VIDEO)
{
//S-Video
Result = Get_AL242_Reg(hAL576,0x00);
Result |= 0x01;
Set_AL242_Reg(hAL576,0x00,Result);
Result = Get_AL242_Reg(hAL576,0xb7);
Result = Result & 0xf8 | 0x04;
Set_AL242_Reg(hAL576,0xb7,Result);
Result = Get_AL242_Reg(hAL576,0x01);
Result &= 0x3f;
Set_AL242_Reg(hAL576,0x01,Result);
if(nVideo_format == _NTSC_M || nVideo_format == _NTSC_443)
{
Result = Get_AL242_Reg(hAL576,0x03);
Result &= 0xf8;
Result |= 0x03;
Set_AL242_Reg(hAL576,0x03,Result);
}
else
{
Result = Get_AL242_Reg(hAL576,0x03);
Result &= 0xf8;
Set_AL242_Reg(hAL576,0x03,Result);
}
}
else
{
//Composite-video
Result = Get_AL242_Reg(hAL576,0x00);
Result &= 0xfe;
Set_AL242_Reg(hAL576,0x00,Result);
Result = Get_AL242_Reg(hAL576,0xb7);
Result = Result & 0xf8 | 0x01;
Set_AL242_Reg(hAL576,0xb7,Result);
Result = Get_AL242_Reg(hAL576,0x01);
Result &= 0x3f;
Set_AL242_Reg(hAL576,0x01,Result);
Result = Get_AL242_Reg(hAL576,0x03);
Result &= 0xf8;
Set_AL242_Reg(hAL576,0x03,Result);
}
}
UINT CPlayDMODlg::AutoDetectProgress(HANDLE hAL576, unsigned int _AL242InputMode)
{
unsigned char _StatusReg1,_StatusReg3,_CordicFreqStatus,_ChromaDTOInc0,_AdaptiveMode,_dx;
UINT _SystemConfiguration;
_SystemConfiguration = Get_AL242_Reg(hAL576,0x00); //Get Video Color Standard
_SystemConfiguration &= 0x0e;
_SystemConfiguration >>= 1;
_StatusReg1 = (unsigned char)Get_AL242_Reg(hAL576,0x3a);
_StatusReg3 = (unsigned char)Get_AL242_Reg(hAL576,0x3c);
_StatusReg3 &= 0x07; //bit 0~~~2
_CordicFreqStatus = (unsigned char)Get_AL242_Reg(hAL576,0x7d);
_ChromaDTOInc0 = (unsigned char)Get_AL242_Reg(hAL576,0x18);
_AdaptiveMode = (unsigned char)Get_AL242_Reg(hAL576,0x03);
_AdaptiveMode &= 0x07;
if((_CordicFreqStatus & 0x80) == 0x80)
_CordicFreqStatus =~ _CordicFreqStatus;
if((_StatusReg1 & 0x01)==0x01)
{
_dx = (unsigned char)Get_AL242_Reg(hAL576,0x07);
_dx &= 0xcf;
_dx |= 0x10;
Set_AL242_Reg(hAL576,(unsigned int)0x07,(unsigned int)_dx);
//Blue Mode
}
else
{
switch(_SystemConfiguration)
{
case 0: //NTSC_M
if(_AdaptiveMode==3)
{ //NTSC443
if ((_StatusReg3&0x02)==0x02){_VideoFormatDetect=_SECAMx;}
else if ((((_StatusReg3&0x04)==0x04))&&(((_CordicFreqStatus>=0x00)&&(_CordicFreqStatus<=0x19))||((_CordicFreqStatus>=0x01)&&(_CordicFreqStatus<=0x1e)))){_VideoFormatDetect=_PAL_I;}
else if ((((_StatusReg3&0x04)!=0x04))&&((_CordicFreqStatus>0x19)&&(_CordicFreqStatus<0x80))){_VideoFormatDetect=_NTSC_M;}
else if ((((_StatusReg3&0x04)!=0x04))&&(((_CordicFreqStatus>=0x00)&&(_CordicFreqStatus<=0x19))||((_CordicFreqStatus>=0x01)&&(_CordicFreqStatus<=0x1e)))&&(((_StatusReg3&0x01)==0x01))){_VideoFormatDetect=_PAL_60;}
else if ((((_StatusReg3&0x04)==0x04))&&((_CordicFreqStatus>0x19)&&(_CordicFreqStatus<0x80))){_VideoFormatDetect=_PAL_CN;}
else {_VideoFormatDetect=_NTSC_443;}}
else{
if ((_StatusReg3&0x02)==0x02){_VideoFormatDetect=_SECAMx;}
else if ((((_StatusReg3&0x04)==0x04))&&((_CordicFreqStatus>0x1e)&&(_CordicFreqStatus<=0x7f))){_VideoFormatDetect=_PAL_I;}
else if ((((_StatusReg3&0x04)!=0x04))&&((_CordicFreqStatus>0x1e)&&(_CordicFreqStatus<=0x7f))){_VideoFormatDetect=((_StatusReg3&0x01)==0x01)?_PAL_60:_NTSC_443;}
else if ((((_StatusReg3&0x04)!=0x04))&&(((_CordicFreqStatus>=0x00)&&(_CordicFreqStatus<=0x19))||((_CordicFreqStatus>=0x01)&&(_CordicFreqStatus<=0x1e)))&&(((_StatusReg1&0x08)!=0x08))){_VideoFormatDetect=_PAL_M;}
else if ((((_StatusReg3&0x04)==0x04))&&(((_CordicFreqStatus>=0x00)&&(_CordicFreqStatus<=0x19))||((_CordicFreqStatus>=0x01)&&(_CordicFreqStatus<=0x1e)))){_VideoFormatDetect=_PAL_CN;}
else {_VideoFormatDetect=_NTSC_M;}}
break;
case 1: //PAL_I
if ((_StatusReg3&0x02)==0x02){_VideoFormatDetect=_SECAMx;}
else if ((((_StatusReg3&0x04)!=0x04))&&((_CordicFreqStatus>0x19)&&(_CordicFreqStatus<0x80))){_VideoFormatDetect=((_StatusReg1&0x08)!=0x08)?_PAL_M:_NTSC_M;}
else if ((((_StatusReg3&0x04)==0x04))&&((_CordicFreqStatus>0x19)&&(_CordicFreqStatus<0x80))){_VideoFormatDetect=_PAL_CN;}
else if ((((_StatusReg3&0x04)!=0x04))&&(((_CordicFreqStatus>=0x00)&&(_CordicFreqStatus<=0x19))||((_CordicFreqStatus>=0x01)&&(_CordicFreqStatus<=0x1e)))&&(((_StatusReg3&0x01)!=0x01))){_VideoFormatDetect=_NTSC_443;}
else if ((((_StatusReg3&0x04)!=0x04))&&(((_CordicFreqStatus>=0x00)&&(_CordicFreqStatus<=0x19))||((_CordicFreqStatus>=0x01)&&(_CordicFreqStatus<=0x1e)))&&(((_StatusReg3&0x01)==0x01))){_VideoFormatDetect=_PAL_60;}
else {_VideoFormatDetect=_PAL_I;}
break;
case 2: //PAL_M
if ((_StatusReg3&0x02)==0x02){_VideoFormatDetect=_SECAMx;}
else if ((((_StatusReg3&0x04)==0x04))&&((_CordicFreqStatus>0x1e)&&(_CordicFreqStatus<=0x7f))){_VideoFormatDetect=_PAL_I;}
else if ((((_StatusReg3&0x04)!=0x04))&&((_CordicFreqStatus>0x1e)&&(_CordicFreqStatus<=0x7f))){_VideoFormatDetect=((_StatusReg3&0x01)==0x01)?_PAL_60:_NTSC_443;}
else if ((((_StatusReg3&0x04)==0x04))&&(((_CordicFreqStatus>=0x00)&&(_CordicFreqStatus<=0x19))||((_CordicFreqStatus>=0x01)&&(_CordicFreqStatus<=0x1e)))){_VideoFormatDetect=_PAL_CN;}
else {_VideoFormatDetect=_PAL_M;}
break;
case 3: //PAL_CN
if ((_StatusReg3&0x02)==0x02){_VideoFormatDetect=((_CordicFreqStatus>0x1e)&&(_CordicFreqStatus<=0x7f))?_SECAMx:_PAL_CN;}
else if ((((_StatusReg3&0x04)!=0x04))&&(((_CordicFreqStatus>=0x00)&&(_CordicFreqStatus<=0x19))||((_CordicFreqStatus>=0x01)&&(_CordicFreqStatus<=0x1e)))){_VideoFormatDetect=_NTSC_M;}
else if ((((_StatusReg3&0x04)==0x04))&&((_CordicFreqStatus>0x1e)&&(_CordicFreqStatus<=0x7f))){_VideoFormatDetect=_PAL_I;}
else if ((((_StatusReg3&0x04)!=0x04))&&((_CordicFreqStatus>0x1e)&&(_CordicFreqStatus<=0x7f))&&(((_StatusReg3&0x01)==0x01))){_VideoFormatDetect=_PAL_60;}
else if ((((_StatusReg3&0x04)!=0x04))&&((_CordicFreqStatus>0x1e)&&(_CordicFreqStatus<=0x7f))&&(((_StatusReg3&0x01)!=0x01))){_VideoFormatDetect=_NTSC_443;}
else {_VideoFormatDetect=_PAL_CN;}
break;
case 4: //SECAM
if (((_StatusReg3&0x02)!=0x02)&&(((_StatusReg3&0x04)==0x04))&&(((_CordicFreqStatus>=0x00)&&(_CordicFreqStatus<=0x19))||((_CordicFreqStatus>=0x01)&&(_CordicFreqStatus<=0x1e)))&&(((_StatusReg3&0x01)==0x01))){_VideoFormatDetect=_PAL_I;}
else if (((_StatusReg3&0x02)!=0x02)&&(((_StatusReg3&0x04)!=0x04))&&(((_CordicFreqStatus>=0x00)&&(_CordicFreqStatus<=0x19))||((_CordicFreqStatus>=0x01)&&(_CordicFreqStatus<=0x1e)))){_VideoFormatDetect=_PAL_60;}
else if (((_StatusReg3&0x02)!=0x02)&&(((_StatusReg3&0x04)!=0x04))&&((_CordicFreqStatus>0x19)&&(_CordicFreqStatus<0x80))){_VideoFormatDetect=_NTSC_M;}
else if (((_StatusReg3&0x02)!=0x02)&&(((_StatusReg3&0x04)==0x04))&&((_CordicFreqStatus>0x10)&&(_CordicFreqStatus<0x80))){_VideoFormatDetect=_PAL_CN;}
else if (((_StatusReg3&0x02)!=0x02)&&(((_StatusReg3&0x04)==0x04))&&(((_CordicFreqStatus>=0x00)&&(_CordicFreqStatus<=0x19))||((_CordicFreqStatus>=0x01)&&(_CordicFreqStatus<=0x1e)))&&(((_StatusReg3&0x01)!=0x01))){_VideoFormatDetect=_NTSC_443;}
else {_VideoFormatDetect=_SECAMx;}
break;
}
}
if((_AL242InputMode == S_VIDEO) && ((_VideoFormatDetect==_NTSC_M) || (_VideoFormatDetect==_NTSC_443)))
{ //S-Video:NTSC/NTSC443 AdaptiveMode=0x03
if(_AdaptiveMode==3)
{ //NTSC443
if((_StatusReg1&0x0f) == 0x0e)
{
if(_ChromaDTOInc0==0x2d)
{ // From NTSC
_VideoFormatDetect=_CordicFreqStatus>0x1f?_NTSC_443:_NTSC_M;}
else
{ // From NTSC-443
_VideoFormatDetect=_CordicFreqStatus>0x30?_NTSC_M:_NTSC_443;}
}
else
{
_VideoFormatDetect=_PAL_M;
}
}
else
{ //NTSC_M
Set_AL242_Reg(hAL576,(unsigned int)0x03,(unsigned int)0x03);
if((_StatusReg1&0x0f)==0x0e)
{
if((_CordicFreqStatus>0x1e)&&(_CordicFreqStatus<=0x7f))
{_VideoFormatDetect=_NTSC_443;}
else
{_VideoFormatDetect=_NTSC_M;}
}
else
{_VideoFormatDetect=_PAL_M;}
}
}
return _VideoFormatDetect;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -