📄 saa7119.c
字号:
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 + -