?? al242decoder.c
字號:
if(_hx>0x20) {_VideoFormatDetect=_NTSC_443;}
else {_VideoFormatDetect=_NTSC_M;}}
else {_VideoFormatDetect=_PAL_M;}
break;
case 0x05: // PAL detected
_VideoFormatDetect=_PAL_I;
break;
case 0x06: // SECAM detected
_VideoFormatDetect=_SECAMx;
break;
default:
if(_hx<0x10) _VideoFormatDetect=_PAL_CN;
else {
if(_hx>0x20) _VideoFormatDetect=_PAL_I;
else _VideoFormatDetect=_SECAMx;
}
break;
}
}
break;
case 1: // _PAL_I
//if (_sx==1){_gx=0x05;}
switch(_gx){
case 0: // NTSC detected
case 2:
_VideoFormatDetect=(_hx<0x10)?_NTSC_443:_NTSC_M;
break;
case 0x05:
//_VideoFormatDetect=_PAL_I;
_gx=GetReg(_SubIDOfAL242,0x3c);
if((_gx&0x10)!=0x10){_VideoFormatDetect=_PAL_I;}
else {_VideoFormatDetect=_PAL_N;}
break;
case 0x04:
_VideoFormatDetect=_PAL_CN;//:_NTSC_M;//PAL_N; _kx=(_gx>>4)&0x0f;
break;
case 0x06:
_VideoFormatDetect=_SECAMx;
break;
}
break;
case 3: // PAL_CN
switch(_gx){
case 0: // NTSC detected
case 1:
_VideoFormatDetect=_PAL_M;
break;
case 2:
_VideoFormatDetect=(_hx<0x10)?_NTSC_M:_NTSC_443;
break;
case 0x07:
case 0x05:
if(_hx>0x10) _VideoFormatDetect=_PAL_CN;
break;
case 0x04://PAL detected
case 0x06:
_VideoFormatDetect=(_hx>0x20)?_PAL_I:_SECAMx;
break;
}
break;
case 2: // _PAL_M
switch(_gx){
case 1: // NTSC detected
if(_dx==0x0e) _VideoFormatDetect=_PAL_M;
break;
case 0:
case 2:
if(_hx>0x20)_VideoFormatDetect=_NTSC_443;
else _VideoFormatDetect=_NTSC_M;
break;
default:
_VideoFormatDetect=(_hx<0x10)?_PAL_CN:_PAL_I;
break;
}
break;
case 4: // _SECAMx
switch(_gx){
case 0: // NTSC detected
case 2:
_VideoFormatDetect=(_hx<0x0c)?_NTSC_443:_NTSC_M;
break;
case 0x07:
case 0x06://SECAM detected
_VideoFormatDetect=_SECAMx;
break;
case 0x05://PAL detected
case 0x04:
default:
_VideoFormatDetect=(_hx>0x0c)?_PAL_CN:_PAL_I;
break;
}
break;
}
switch(_AutoDetectMode){
case _DetectNTSC_PAL_Only:
switch(_VideoFormatDetect){
case _NTSC_M:
case _PAL_M:
case _NTSC_443:
_VideoFormatDetect=_NTSC_M;
break;
case _PAL_I:
case _PAL_N:
case _SECAMx:
case _PAL_CN:
case _PAL_60:
_VideoFormatDetect=_PAL_I;
break;
}
break;
case _DetectAllVideoMode:
default:
break;
}
}
if(_VideoFormatDetect!=_VideoFormat){
_AutoDetectLoop++;
if(!_VideoChange){
_VideoChange=1; SetEncoderDisplayMode(_Black);}
if(_AutoDetectLoop>0x2){
if(_VideoFormatDetect!=_VideoFormat){
_VideoFormat=SetupAL242EVBVideoMode(_VideoFormatDetect);
AL242EVBFuncX( _KeyInCommand[_VideoInputSwitch]);
}
_AutoDetectLoop=0;
if(_VideoChange==1){_VideoChange=0; SetEncoderDisplayMode(0); }
}
}
else { _AutoDetectLoop=0;
if(_VideoChange){
_VideoChange=0; SetEncoderDisplayMode(0);}
}
}
*/
void AutoDetectProgress(void){
unsigned char _SystemConfiguration,_StatusReg1,_StatusReg3,_CordicFreqStatus,_ChromaDTOInc0,_AdaptiveMode;
_SystemConfiguration=GetReg(_SubIDOfAL242,0x00); //Get Video Color Standard
_SystemConfiguration&=0x0e;
_SystemConfiguration>>=1;
_StatusReg1=GetReg(_SubIDOfAL242,0x3a);
_StatusReg3=GetReg(_SubIDOfAL242,0x3c);
_StatusReg3&=0x07; //bit 0~~~2
_CordicFreqStatus=GetReg(_SubIDOfAL242,0x7d);
_ChromaDTOInc0=GetReg(_SubIDOfAL242,0x18);
_AdaptiveMode=GetReg(_SubIDOfAL242,0x03);
_AdaptiveMode&=0x07;
if((_CordicFreqStatus&0x80)==0x80){ _CordicFreqStatus=~_CordicFreqStatus;}
if((_StatusReg1&0x01)==0x01){
SetAL242OutputMode(1); //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 ((_KeyInCommand[_VideoInputSwitch]==_Input1)&&((_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
SetReg(_SubIDOfAL242,0x03,0x03);
if((_StatusReg1&0x0f)==0x0e){
if((_CordicFreqStatus>0x1e)&&(_CordicFreqStatus<=0x7f)){_VideoFormatDetect=_NTSC_443;}
else {_VideoFormatDetect=_NTSC_M;}}
else {_VideoFormatDetect=_PAL_M;}
}
}
if(_VideoFormatDetect!=_VideoFormat){
_AutoDetectLoop++;
if(!_VideoChange){
_VideoChange=1; SetEncoderDisplayMode(_Black);}
if(_AutoDetectLoop>0x2){
if(_VideoFormatDetect!=_VideoFormat){
_VideoFormat=SetupAL242EVBVideoMode(_VideoFormatDetect);
AL242EVBFuncX( _KeyInCommand[_VideoInputSwitch]);
}
_AutoDetectLoop=0;
if(_VideoChange==1){_VideoChange=0; SetEncoderDisplayMode(0); }
}
}
else { _AutoDetectLoop=0;
if(_VideoChange){
_VideoChange=0; SetEncoderDisplayMode(0);}
}
}
// ********************************************************************************
// Function: AGCProgress;
// Description: detect the input sourec signal level from $78 for reference to
// setting the amplify scale of the front end OP from $d5.
// Input parameters: None.
// Output parameters: None.
// Return values: None.
// ********************************************************************************
/*void AGCProgress(void){
unsigned char _gx,_cx;
_cx=GetReg(_SubIDOfAL242,0x78);
_cx&=0x0f;
if(_cx!=_AGCX){
_AGCX=_cx;
// _dx=GetReg(_SubIDOfAL242,0x78);
_gx=((_cx/2)-1)*1;
_gx&=0x03;
_cx=GetReg(_SubIDOfAL242,0xd5);
_cx&=0xf0;
_cx|=_gx;
_gx<<=2;
_cx|=_gx;
SetReg(_SubIDOfAL242,0xd5,_cx);
}
}*/
// ********************************************************************************
// Function: VCRModeDetectAndProcess;
// Description: Check if it is a VCR source input
// if True: clear [$02] bit 1
// [$c1]=0x14 // ie 20 or 20 MHZ
// [$c8]=0x00 // Turn off some internal dc restore curcuit
// if False: set [$02] bit 1;
// [$c1]=0x14 // ie 20 or 20 MHZ
// [$c8]=0x51 // write to default setting
// Input parameters: None.
// Output parameters: None.
// Return values: None.
// ********************************************************************************
void VCRModeDetectAndProcess(void){
unsigned char _gx,_dx;
_gx=GetReg(_SubIDOfAL242,0x3c);
_gx&=0x10;
if((_gx==0x10)&&(_VCRMode==0)){
_dx=GetReg(_SubIDOfAL242,0x02);
_dx&=0xfd;
SetReg(_SubIDOfAL242,0x02,_dx);
//SetReg(_SubIDOfAL242,0xc1,0x1b);
SetReg(_SubIDOfAL242,0xc8,0x00);
_dx=GetReg(_SubIDOfAL242,0x17);
_dx&=0xf0;
_dx|=0x08;
SetReg(_SubIDOfAL242,0x17,_dx);
_VCRMode=1;
}
else {
if(((_gx!=0x10))&&(_VCRMode==1)){
_dx=GetReg(_SubIDOfAL242,0x02);
_dx|=0x02;
SetReg(_SubIDOfAL242,0x02,_dx);
SetReg(_SubIDOfAL242,0xc8,0x51);
_dx=GetReg(_SubIDOfAL242,0x17);
_dx&=0xf0;
_dx|=0x0b;
SetReg(_SubIDOfAL242,0x17,_dx);
_VCRMode=0;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -