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

📄 al242decoder.c

📁 Averlogic AL576芯片MPEG4压缩示例源程序
💻 C
📖 第 1 页 / 共 3 页
字号:
								    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 + -