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

📄 saa7119.c

📁 GM5621原代码
💻 C
📖 第 1 页 / 共 2 页
字号:
			dev_Write(0x84, 0xa0);
			dev_Write(0x85, 0x10);
#else
         dev_Write(0x84, 0x00);
         dev_Write(0x85, 0x01);
#endif
         break;
      default:
         break;
   } // end switch - mode
}

//******************************************************************************
//
// FUNCTION     :   BYTE dev_saa7119GetVideoMode(void)
// USAGE        :   This function returns the current input video mode
// INPUT        :   None
// OUTPUT       :   returns the mode - NO_VIDEO, NTSC, PAL, SECAM
// GLOBALS      :   None
// USED_REGS    :
//******************************************************************************
static BYTE __near dev_saa7119GetVideoMode(void)
{
    BYTE B_Status;

    B_Status = dev_Read(SAA7119_DEC_STAT_ADDR) & SAA7119_VID_MODE_STAT_MASK;
#if DEBUG_VDD && DEBUG_MSG	
	if (B_Status!=VideoModeType)
	{
		VideoModeType=B_Status;
	    switch (B_Status)
	    {
        	case 0x01:
            	msg("SAA7119:GetVideoMode =NTSC",0);
				break;
	        case 0x02:
    	        msg("SAA7119:GetVideoMode =PAL",0);
				break;
        	case 0x03:
            	msg("SAA7119:GetVideoMode =SECAM",0);
				break;
	        default:
    	        dev_Read(SAA7119_DEC_STAT_ADDR2) & SAA7119_VID_FIELD_FRQ_MASK ? msg("SAA7119:GetVideoMode =NTSC",0) : msg("SAA7119:GetVideoMode =PAL",0);
				break;
    	}
	}
#endif	
    switch (B_Status)
    {
        case 0x01:
            return VDD_MODE_NTSC;
        case 0x02:
            return VDD_MODE_PAL;
        case 0x03:
            return VDD_MODE_SECAM;
        default:
            return (dev_Read(SAA7119_DEC_STAT_ADDR2) & SAA7119_VID_FIELD_FRQ_MASK) ? VDD_MODE_NTSC : VDD_MODE_PAL;
    }
}

//******************************************************************************
//
// FUNCTION     :   void dev_saa7119SetVideoInput(BYTE B_InType)
// USAGE        :   This function sets SAA7119 input video type
// INPUT        :   input video type - COMPOSITE/SVIDEO
// OUTPUT       :   None
// GLOBALS      :   None
// USED_REGS    :
//******************************************************************************
#define SAA7119_LUMINANCE   0x09
#define SAA7119_OVERLAY     0x27

static void __near dev_saa7119SetVideoInput(BYTE B_InType)
{
    BYTE B_FiltCtrl;

    B_FiltCtrl = dev_Read(0x09);
	msg("dev_saa7119SetVideoInput",0);
	msg("B_inType=%d",B_InType);
#if DEBUG_VDD && DEBUG_MSG
	VideoModeType=0xff;
#endif

   switch (B_InType)
   {
      case VDD_INTYP_COMPOSITE   :
         B_FiltCtrl = (B_FiltCtrl & 0x7F) | 0x40;  //chrominance trap/comb filter active enabled
         B_InType = 0x00;   // Setting for Composite input
         break;
      case VDD_INTYP_TUNER       :
         B_FiltCtrl = (B_FiltCtrl & 0x7F) | 0x40;  //chrominance trap/comb filter active enabled
         B_InType = 0x02;     // Setting for Tuner input
         break;
      case VDD_INTYP_COMPOSITE2  :
         B_FiltCtrl &= 0x7F;  //chrominance trap/comb filter active enabled
         B_InType = 0x01;     // was 0xc1
         break;
      case VDD_INTYP_SVIDEO      :
         B_FiltCtrl |= 0x80;  // chrominance trap/comb filter bypassed
         B_InType = 0x16;     // was 0xd6
         break;
      case VDD_INTYP_COMPONENT      :
         B_FiltCtrl = 0x00;  // chrominance trap/comb filter bypassed
         B_InType = 0x2f;     // 
   		 dev_Write(0x27,0x01);
/*       dev_Write(0x01,0x18);   //Test for component input
		 dev_Write(0x03,0x43);
		 dev_Write(0x4,0x9c);
		 dev_Write(0x5,0x9c);
		 dev_Write(0x21,0x03);
		 dev_Write(0x22,0x9c);
		 dev_Write(0x23,0x9c);
		 dev_Write(0x27,0x01);
		 dev_Write(0x28,0x10);
		 dev_Write(0x29,0x0);
		 dev_Write(0x2A,0x80);
		 dev_Write(0x2B,0x40);
		 dev_Write(0x2C,0x40);
*/		 
         break;
		 
      default  :
         return;
   }

    dev_Write(0x09,B_FiltCtrl);
    dev_Write(0x02,B_InType); //SAA7119_AIN1_ADDR
    return;
}

//******************************************************************************
//
// FUNCTION     :   void dev_saa7119SetVideoBrightness(BYTE B_BrightVal)
// USAGE        :   This function sets the brightness value for SAA7119
// INPUT        :   brightness value
// OUTPUT       :   None
// GLOBALS      :   None
// USED_REGS    :
//******************************************************************************
static void __near dev_saa7119SetVideoBrightness(BYTE B_BrightVal)
{
    dev_Write(SAA7119_BRT_ADDR, B_BrightVal);
}


//******************************************************************************
//
// FUNCTION     :   void dev_saa7119SetVideoContrast(BYTE B_ContrastVal)
// USAGE        :   This function sets the contrast value for SAA7119
// INPUT        :   contrast value
// OUTPUT       :   None
// GLOBALS      :   None
// USED_REGS    :
//******************************************************************************
static void __near dev_saa7119SetVideoContrast(BYTE B_ContrastVal)
{
   dev_Write(SAA7119_CON_ADDR,B_ContrastVal);
}

//******************************************************************************
//
// FUNCTION     :   void dev_saa7119SetVideoHue(BYTE B_HueVal)
// USAGE        :   This function sets the hue value for SAA7119
// INPUT        :   hue value
// OUTPUT       :   None
// GLOBALS      :   None
// USED_REGS    :
//******************************************************************************
static void __near dev_saa7119SetVideoHue(BYTE B_HueVal)
{
    dev_Write(SAA7119_HUE_ADDR,B_HueVal);
}

//******************************************************************************
//
// FUNCTION     :   void dev_saa7119SetVideoSaturation(BYTE B_SaturationVal)
// USAGE        :   This function sets the saturation value for SAA7119
// INPUT        :   saturation value
// OUTPUT       :   None
// GLOBALS      :   None
// USED_REGS    :
//******************************************************************************
static void __near dev_saa7119SetVideoSaturation(BYTE B_SaturationVal)
{
    dev_Write(SAA7119_SAT_ADDR, B_SaturationVal);
}

//******************************************************************************
//
// FUNCTION     :   BYTE dev_saa7119GetVideoStatus(void)
// USAGE        :   This function returns the status of the incoming video
// INPUT        :   None
// OUTPUT       :   0 - Locked
//                  1 - Not Locked
// GLOBALS      :   None
// USED_REGS    :
//******************************************************************************
static BYTE __near dev_saa7119GetVideoStatus(void)
{
   BYTE B_Status;
   B_Status = dev_Read(SAA7119_DEC_STAT_ADDR);
   if((B_Status & 0x40) != 0x40)
      return 0x00;
   msg("dev_saa7119GetVideoStatus: Gest Status= 0x%x",B_Status);
   return (NO_HS | NO_VS);
}

//******************************************************************************
//
//  FUNCTION     :   void dev_saa7119PowerUp(void)
//  USAGE        :   This function powers up the SAA7119 modules.
//  INPUT        :   None
//  OUTPUT       :   None
//  GLOBALS      :   None
//  USED_REGS    :   Power Save Control
//
//******************************************************************************
static void __near dev_saa7119PowerUp(void)
{
   VideoDecoderPowerControlSetup();
   VideoDecoderPowerHigh();
//   gm_SetRegBitsByte(GPOUTPUT3, GPIO24_OUT);         
   msg("dev_saa7119PowerUp",0);
   gm_Delay1ms(10);			//50
 
   VideoDEcoderResetControlSetup();
   VideoDecoderResetLow();
   gm_Delay1ms(10);
   VideoDecoderResetHigh();
   gm_Delay1ms(50);

   dev_Write(0x83,0x01);//data sheet says to set to '1' even if x-port not used
   dev_Write(0x3c,0x40);//enable clock 1.
#if (SAA7119_PORT == SAA7119_OUTPUT_IPORT)
   dev_Write(0x83,0x00); // disable X-Port drivers if don't need x-port.
#endif
   dev_Write(0x88,0x00);// software reset
   dev_Write(0x88,0xF0);// software reset
}

//******************************************************************************
//
//  FUNCTION     :   void dev_saa7119PowerDown(void)
//  USAGE        :   This function powers down the SAA7119 modules.
//  INPUT        :   None
//  OUTPUT       :   None
//  GLOBALS      :   None
//  USED_REGS    :   Power Save Control
//
//******************************************************************************
static void __near dev_saa7119PowerDown(void)
{
   msg("dev_saa7119PowerDown",0);
   VideoDecoderPowerLow();
//   dev_Write(0X88,0X0B);
   
}

//******************************************************************************
//
//  FUNCTION     :   BYTE dev_saa7119GetVideoInterlace(void)
//  USAGE        :   This function returns the current input video interlace status
//  INPUT        :   None
//  OUTPUT       :   0 - Non Interlaced
//                   1 - Interlaced
//  GLOBALS      :   None
//  USED_REGS    :
//******************************************************************************
static BYTE __near dev_saa7119GetVideoInterlace(void)
{
   BYTE B_Status;

   B_Status = dev_Read(SAA7119_DEC_STAT_ADDR);

   if(B_Status & 0x80)
      return D_INTERLACED;
   return D_NONINTERLACED;
}

//******************************************************************************
//
//  FUNCTION     :   vpc323_VideoDecoderEntry
//  USAGE        :   This function is main entry point into the video decoder
//                   driver.
//  INPUT        :   driver function and WORD value.
//  OUTPUT       :   returns WORD value.
//  GLOBALS      :   None
//  USED_REGS    :   None
//
//******************************************************************************
WORD saa7119_VideoDecoderEntry(BYTE func, void *p1, void *p2)
{
    WORD val = (WORD)p1;
    WORD val2 = (WORD)p2;

    WORD ret = 0;
	if (func!=gmd_VID_RAW_READ)
		{
        msgx("**From Call Driver:SAA7119",0);
  		msgx("  Func number = %d", func);
		msgx("  P1= 0x%x", val);
		msgx("  P1= 0x%x", val2);
		}

    switch(func)
    {
  //      case gmd_VID_SET_TWOWIRE_PORT   :
  //          TWO_WIRE_PORT = (BYTE)val;
  //          break;

		
        case gmd_VID_SET_INPUT          :
            dev_saa7119SetVideoInput((BYTE)val);
            break;
        case gmd_VID_SET_OUTPUT_FORMAT  :
            // default is 656 output.
            break;
        case gmd_VID_SET_MODE           :
            dev_saa7119ConfigVideoMode((BYTE)val);
            break;
        case gmd_VID_SET_MIXER          :
            // No support for mixer.
            break;
        case gmd_VID_SET_BRIGHTNESS     :
            dev_saa7119SetVideoBrightness((BYTE)val);
            break;
        case gmd_VID_SET_CONTRAST       :
            dev_saa7119SetVideoContrast((BYTE)val);
            break;
        case gmd_VID_SET_SATURATION     :
            dev_saa7119SetVideoSaturation((BYTE)val);
            break;
        case gmd_VID_SET_HUE            :
            dev_saa7119SetVideoHue((BYTE)val);
            break;
        case gmd_VID_SET_SHARPNESS      :
            // No sharpness support
            break;
        case gmd_VID_GET_STATUS         :
            ret = (WORD)dev_saa7119GetVideoStatus();
            break;
        case gmd_VID_GET_INTERLACE      :
            ret = (WORD)dev_saa7119GetVideoInterlace();
            break;
        case gmd_VID_GET_LINES_PER_FIELD:
            // No support
            ret = 0;
            break;
        case gmd_VID_GET_SUB_MODE       :
            ret = (WORD)dev_saa7119GetVideoMode();
            break;
        case gmd_VID_GET_MODE           :
            ret = (WORD)dev_saa7119GetVideoMode();
            break;
        case gmd_VID_PWR_UP             :
            dev_saa7119PowerUp();
            break;
        case gmd_VID_PWR_DOWN           :
            dev_saa7119PowerDown();
           break;
        case gmd_VID_RAW_READ           :
            ret = (WORD)dev_Read(val);
            break;
        case gmd_VID_RAW_WRITE          :
            dev_Write((BYTE)val,(BYTE)val2);
           break;
        default :
            msg("SAA7119: No Video Decoder Function!!",0);
            break;
    }
    return ret;
}

#endif //(USE_VPORT && USE_GSEL_DRVR_MODEL && (DEV_VIDEO_DECODER == DEV_SAA7119))

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -