📄 al242decoder.c
字号:
// Function: SetupAL242EVBVideoMode;
// Description: Setup AL242EVB to assigned video standard
//
// Input parameters: _VideoFormatX:
// _NTSC_M 0
// _NTSC_443 1
// _PAL_I 2
// _PAL_M 3
// _PAL_N 4
// _SECAMx 5
// _PAL_CN 6
// _PAL_60 7
// _NTSC_J 8
// Output parameters: None.
// Return values: None.
// ********************************************************************************
unsigned char SetupAL242EVBVideoMode(unsigned int _VideoFormatX)
{
unsigned char _dx;
SetEncoderDisplayMode(_Black);
switch(_VideoFormatX){
case _PAL_M:
SetupAL242VideoModeX(_VideoFormatX,_InputChannel);
SetupSA7105To_NTSC_Mode();
SetupAL260To_NTSC_Mode();
break;
case _NTSC_M:
case _NTSC_J:
case _PAL_60:
SetupAL242VideoModeX(_VideoFormatX,_InputChannel);
SetupSA7105To_NTSC_Mode();
SetupAL260To_NTSC_Mode();
break;
case _NTSC_443:
SetupAL242VideoModeX(_VideoFormatX,_InputChannel);
SetupSA7105To_NTSC_Mode();
SetupAL260To_NTSC_Mode();
SetReg(0x88,0x65,0x09);
SetReg(0x88,0x66,0x2a);
break;
case _PAL_N:
SetupAL242VideoModeX(_VideoFormatX,_InputChannel);
SetupSA7105To_PAL_Mode();
SetupAL260To_PAL_Mode();
break;
case _PAL_CN:
SetupAL242VideoModeX(_VideoFormatX,_InputChannel);
SetupSA7105To_PAL_Mode();
SetupAL260To_PAL_Mode();
_dx=GetReg(0x88,0x61);
_dx&=0x0f;
SetReg(0x88,0x61,_dx); //set to PAL_CN(don't have 7.5 IRE)
break;
case _PAL_I:
SetupAL242VideoModeX(_VideoFormatX,_InputChannel);
SetupSA7105To_PAL_Mode();
SetupAL260To_PAL_Mode();
_dx=GetReg(0x88,0x61);
_dx&=0x0f;
SetReg(0x88,0x61,_dx); //set to PAL_I(don't have 7.5 IRE)
break;
case _SECAMx:
SetupAL242VideoModeX(_VideoFormatX,_InputChannel);
SetupSA7105To_PAL_Mode();
SetupAL260To_PAL_Mode();
break;
}
SetEncoderDisplayMode(0);
return(_VideoFormatX);
}
// ********************************************************************************
// Function: SetAL242OutputMode;
// Description: Switching AL242 decoder to Blue screen or normal display
// Input parameters: _ModeX:
// 0: Set AL242 to normal display
// 1: Set AL242 to blue mode display
// Output parameters: None.
// Return values: None.
// ********************************************************************************
void SetAL242OutputMode(unsigned char _ModeX){
unsigned char _dx;
_dx=GetReg(_SubIDOfAL242,0x07);
_dx&=0xcf;
if(_ModeX==1) _dx|=0x10;
else _dx|=0x20;
SetReg(_SubIDOfAL242,0x07,_dx);
_VideoFormatDetect=7;
}
// ********************************************************************************
// Function: InputChannelSelectAL240;
// Description: Switching AL240 decoder input channel
// Input parameters: _InputChannelX:
// 0: _CVBS0
// 1: _CVBS1
// 2: _svideo_0
// 3: _svideo_1
// Output parameters: None.
// Return values: _Input been assign=_InputChannelX.
// ********************************************************************************
unsigned char InputChannelSelectAL240(unsigned char _InputChannelX){
unsigned char _dx;
switch(_InputChannelX&0x03){
case _Input0://_CVBS0:
_dx=0x20;
SetReg(_SubIDOfAL242,0x07,_dx);
SetReg(_SubIDOfAL242,0xb2,_dx);
_dx&=0xdf;
SetReg(_SubIDOfAL242,0xb2,_dx);
_dx=GetReg(_SubIDOfAL242,0x00);
_dx&=0xfe;
SetReg(_SubIDOfAL242,0x00,_dx);
_dx=0;
SetReg(_SubIDOfAL242,0xb7,_dx);
_dx=GetReg(_SubIDOfAL242,0x01);
_dx&=0x3f;
SetReg(_SubIDOfAL242,0x01,_dx);
break;
case _Input1://_CVBS1:
_dx=0x20;
SetReg(_SubIDOfAL242,0x07,_dx);
_dx=GetReg(_SubIDOfAL242,0xb2);
_dx&=0xdf;
SetReg(_SubIDOfAL242,0xb2,_dx);
_dx=GetReg(_SubIDOfAL242,0x00);
_dx&=0xfe;
SetReg(_SubIDOfAL242,0x00,_dx);
_dx=1;
SetReg(_SubIDOfAL242,0xb7,_dx);
_dx=GetReg(_SubIDOfAL242,0x01);
_dx&=0x3f;
SetReg(_SubIDOfAL242,0x01,_dx);
break;
case _Input2://_svideo_0
_dx=0x20;
SetReg(_SubIDOfAL242,0x07,_dx);
_dx=GetReg(_SubIDOfAL242,0xb2);
_dx&=0xdf;
SetReg(_SubIDOfAL242,0xb2,_dx);
_dx=GetReg(_SubIDOfAL242,0x00);
_dx|=0x01;
SetReg(_SubIDOfAL242,0x00,_dx);
_dx=4;
SetReg(_SubIDOfAL242,0xb7,_dx);
_dx=GetReg(_SubIDOfAL242,0x01);
_dx&=0x3f;
SetReg(_SubIDOfAL242,0x01,_dx);
break;
case _Input3:// _svideo_1
_dx=0x20;
SetReg(_SubIDOfAL242,0x07,_dx);
_dx=GetReg(_SubIDOfAL242,0xb2);
_dx&=0xdf;
SetReg(_SubIDOfAL242,0xb2,_dx);
_dx=GetReg(_SubIDOfAL242,0x00);
_dx|=0x01;
SetReg(_SubIDOfAL242,0x00,_dx);
_dx=5;
SetReg(_SubIDOfAL242,0xb7,_dx);
_dx=GetReg(_SubIDOfAL242,0x01);
_dx&=0x3f;
SetReg(_SubIDOfAL242,0x01,_dx);
break;
}
return(_InputChannelX&0x03);
}
// ********************************************************************************
// Function: InputChannelSelectAL242;
// Description: Switching AL242 decoder input channel
// Input parameters: _InputChannelX:
// 0: _CVBS0
// 1: _SVideo_0
// 2: _Component_1
// 3: NULL
// Output parameters: None.
// Return values: _Input been assign=_InputChannelX.
// ********************************************************************************
unsigned char InputChannelSelectAL242(unsigned char _InputChannelX){
unsigned char _dx;
switch(_InputChannelX&0x03){
case _Input0://_CVBS0:
_dx=0x20;
SetReg(_SubIDOfAL242,0x07,_dx);
_dx=GetReg(_SubIDOfAL242,0xb2);
_dx&=0xdf;
SetReg(_SubIDOfAL242,0xb2,_dx);
_dx=GetReg(_SubIDOfAL242,0x00);
_dx&=0xfe;
SetReg(_SubIDOfAL242,0x00,_dx);
if(_FastSwitchMode==0){
if (_CVBS_0==1){_dx=0;SetReg(_SubIDOfAL242,0xb7,_dx);}
else{
if (_CVBS_1==1){SetReg(_SubIDOfAL242,0xb7,0x01);}
if (_CVBS_2==1){SetReg(_SubIDOfAL242,0xb7,0x02);}
if (_CVBS_3==1){SetReg(_SubIDOfAL242,0xb7,0x03);}
}
}
_dx=GetReg(_SubIDOfAL242,0x01);
_dx&=0x3f;
SetReg(_SubIDOfAL242,0x01,_dx);
break;
case _Input1://_SVideo0:
_dx=0x20;
SetReg(_SubIDOfAL242,0x07,_dx);
_dx=GetReg(_SubIDOfAL242,0xb2);
_dx&=0xdf;
SetReg(_SubIDOfAL242,0xb2,_dx);
_dx=GetReg(_SubIDOfAL242,0x00);
_dx|=0x01;
SetReg(_SubIDOfAL242,0x00,_dx);
if (_SVIDEO_0==1){_dx=4;SetReg(_SubIDOfAL242,0xb7,_dx);}
else {
if (_SVIDEO_1==1){SetReg(_SubIDOfAL242,0xb7,0x05);}}
_dx=GetReg(_SubIDOfAL242,0x01);
_dx&=0x3f;
SetReg(_SubIDOfAL242,0x01,_dx);
break;
case _Input2://_Component1:
_dx=GetReg(_SubIDOfAL242,0xb2);
_dx&=0xdf;
SetReg(_SubIDOfAL242,0xb2,_dx);
_dx=GetReg(_SubIDOfAL242,0x00);
_dx&=0xfe;
SetReg(_SubIDOfAL242,0x00,_dx);
_dx=1;
SetReg(_SubIDOfAL242,0xb7,_dx);
_dx=0x20;
SetReg(_SubIDOfAL242,0x07,_dx);
_dx=GetReg(_SubIDOfAL242,0x01);
_dx&=0x3c;
_dx|=0x41;
SetReg(_SubIDOfAL242,0x01,_dx);
break;
case _Input3:
break;
}
_dx=_InputChannelX&0x03;
return(_dx);
}
// ********************************************************************************
// Function: AutoDetectProgress;
// Description: detect AL242 current video standard input then used to setup AL242
// video stand config.
// Input parameters: None.
// Output parameters: None.
// Return values: None.
// ********************************************************************************
/*
void AutoDetectProgress(void){
unsigned char _dx,_hx,_gx,_cx,_ax,_sx,_SignOf_hx;
// _OSCType=GetAL242EVBOSCType();
_dx=GetReg(_SubIDOfAL242,0x3a);
if((_dx&0x01)==0x01) { // set to blue mode
SetAL242OutputMode(1); }
else { _hx=GetReg(_SubIDOfAL242,0x07);
if((_hx&0x10)==0x10) SetAL242OutputMode(0);
_ax=GetReg(_SubIDOfAL242,0x00);
_ax&=0x0e;
_ax>>=1;
_sx=GetReg(_SubIDOfAL242,0x18);
_hx=GetReg(_SubIDOfAL242,0x7d); _SignOf_hx=0;
if((_hx&0x80)==0x80){ _hx=~_hx; _SignOf_hx=1; }
_gx=GetReg(_SubIDOfAL242,0x3c);
_gx&=0x07;
_cx=GetReg(_SubIDOfAL242,0x03);
_cx&=0x07;
switch(_ax){
case 0: //from _NTSC_M // _NTSC_443
if(_cx==3){ // _NTSC_443
switch(_gx){
case 0x00:
if (_KeyInCommand[_VideoInputSwitch]==_Input1){
if(_sx==0x2d){ // From NTSC
_VideoFormatDetect=_hx>0x1f?_NTSC_443:_NTSC_M;
}
else{ // From NTSC-443
_VideoFormatDetect=_hx>0x30?_NTSC_M:_NTSC_443;}
}
else{
if(_dx!=0x0e) {
_VideoFormatDetect=(((_gx&0x01)!=0x01)?_NTSC_443:_PAL_M); }
else {_VideoFormatDetect=(((_hx>0x19)&&(_hx<0x80))?_NTSC_M:_NTSC_443);}
}
break;
case 0x04:
case 0x05: // PAL detected
_VideoFormatDetect=_PAL_I;
break;
case 0x06: // SECAM detected
_VideoFormatDetect=_SECAMx;
break;
default:
if(_SignOf_hx==1){
if(_hx<0x10) _VideoFormatDetect=_PAL_I;
}
else {
if(_hx>0x20) _VideoFormatDetect=_PAL_CN;
else _VideoFormatDetect=_SECAMx;
}
break;
}
}
else { // _NTSC_M
switch(_gx){
case 0x00:
if (_KeyInCommand[_VideoInputSwitch]==_Input1){SetReg(_SubIDOfAL242,0x03,0X03);}
if((_dx&0x0f)==0x0e){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -