📄 vpc3230.c
字号:
// return GVideoDecoder[VidDecId].InpType; //commented John
}
//******************************************************************************
//
// FUNCTION : void dev_vpc323SetVideoOutputFormat(BYTE VidDecId,BYTE outtype)
// USAGE : Set video output format for video decoder device
// INPUT : VidDecId - video decoder device ID (SAA7115, vpc323)
// OutType - output type: VDD_OUTTYPE_NONE, VDD_OUTTYPE_601, VDD_OUTTYPE_656
// OUTPUT : None
// GLOBALS : None
// USED_REGS : None
//
//******************************************************************************
static void __near dev_vpc323SetVideoOutputFormat(BYTE outtype)
{
// GVideoDecoder[VidDecId].OutType = outtype; //Commented and will be used for later use.
switch (outtype)
{
case VDD_OUTTYPE_601:
msg_vdd("ITU601 ",0);
dev_vpc323_ByteWrite(VPC_OUT_INTERFACE_TWC_REG,0x20);
break;
case VDD_OUTTYPE_656:
msg_vdd("ITU656 ",0);
dev_vpc323_ByteWrite(VPC_OUT_INTERFACE_TWC_REG,0x38);
break;
default:
break;
}
}
//******************************************************************************
//
// FUNCTION : BYTE dev_vpc323GetVideoOutputFormat(BYTE VidDecId)
// USAGE : Get video output format of a video decoder device
// INPUT : VidDecId - video decoder device ID (SAA7115, vpc323)
// OUTPUT : Output type: VDD_OUTTYPE_NONE, VDD_OUTTYPE_601, VDD_OUTTYPE_656
// GLOBALS : None
// USED_REGS : None
//
//******************************************************************************
#if UNUSED && 0
static BYTE __near dev_vpc323GetVideoOutputFormat(BYTE VidDecId)
{
VidDecId = VidDecId+0;
return 0;
// return GVideoDecoder[VidDecId].OutType;
}
#endif
//******************************************************************************
//
// FUNCTION : BYTE dev_vpc323GetVideoStatus(BYTE VidDecId)
// USAGE : Get status from video decoder device
// INPUT : VidDecId - video decoder device ID (SAA7115, vpc323)
// OUTPUT : Status: D_LOCKED, D_NOTLOCKED
// GLOBALS : None
// USED_REGS : None
//
//******************************************************************************
static BYTE __near dev_vpc323GetVideoStatus(void)
{
WORD status;
status = dev_vpc323FPRead(VPC_ASR_FP_REG);
if(status == 0xffff)
return 0xff;
// if either sync locked, than that's good enough. Could be in FF or
// REW causing one or the other sync to disappear.
if(status & (STAT_V_LOCK | STAT_H_LOCK))
return 0x00;
return (NO_HS | NO_VS);
}
//******************************************************************************
//
// FUNCTION : BYTE dev_vpc323GetVideoInterlace()
// USAGE : Get video interlaced infor of video decoder device
// INPUT : VidDecId - video decoder device ID (SAA7115, vpc323)
// OUTPUT : D_INTERLACED, D_NONINTERLACED
// GLOBALS : None
// USED_REGS : None
//
//******************************************************************************
static BYTE __near dev_vpc323GetVideoInterlace(void)
{
WORD temp;
temp = dev_vpc323FPRead(VPC_ASR_FP_REG);
/* if(temp & 0x0080)
GVideoDecoder[VidDecId].Interlace = D_INTERLACED;
else
GVideoDecoder[VidDecId].Interlace = D_NONINTERLACED;
return GVideoDecoder[VidDecId].Interlace;
*/
if(temp & 0x0080)
return D_INTERLACED;
else
return D_NONINTERLACED;
}
//******************************************************************************
//
// FUNCTION : WORD dev_vpc323GetVideoLinesPerField(BYTE VidDecId)
// USAGE : Get number of lines per field of a specified video decoder device
// INPUT : VidDecId - video decoder device ID (SAA7115, vpc323)
// OUTPUT : # of lines per field
// GLOBALS : None
// USED_REGS : None
//
//******************************************************************************
static WORD __near dev_vpc323GetVideoLinesPerField(void)
{
return dev_vpc323FPRead(VPC_NLPF_FP_REG);
}
//******************************************************************************
//
// FUNCTION : BYTE vdd_GetVideoSubMode(BYTE VidDecId)
// USAGE : Get video sub mode from a specified video decoder device
// INPUT : VidDecId - video decoder device ID (SAA7115, vpc323)
// OUTPUT : Submode - VDD_SUBMODE_PAL_BGHI, VDD_SUBMODE_NTSC_M, VDD_SUBMODE_SECAM
// VDD_SUBMODE_NTSC_44, VDD_SUBMODE_PAL_M, VDD_SUBMODE_PAL_N
// VDD_SUBMODE_PAL_60, VDD_SUBMODE_NTSC_COMB
// GLOBALS : None
// USED_REGS : None
//
//******************************************************************************
static BYTE __near dev_vpc323GetVideoSubMode(void)
{
return (dev_vpc323FPRead(VPC_SDT_FP_REG)& 0x0007);
}
//******************************************************************************
//
// FUNCTION : BYTE dev_vpc323GetVideoMode(BYTE VidDecId)
// USAGE : Get video mode from a specified video decoder device
// INPUT : VidDecId - video decoder device ID (SAA7115, vpc323)
// OUTPUT : Mode - VDD_MODE_NOVIDEO, VDD_MODE_NTSC, VDD_MODE_PAL
// VDD_MODE_SECAM, VDD_MODE_INIT
// GLOBALS : None
// USED_REGS : None
//
//******************************************************************************
static BYTE __near dev_vpc323GetVideoMode(void)
{
BYTE status,submode,mode;
submode = dev_vpc323GetVideoSubMode();
submode = submode & 0x0007;
status = dev_vpc323GetVideoStatus();
if(dev_vpc323GetVideoInput() == VDD_INTYP_TUNER)
{
return VDD_MODE_NTSC;
}
if(D_NOTLOCKED == status)
mode = VDD_MODE_NOVIDEO;
else
{
if ((submode == VDD_SUBMODE_NTSC_M) ||
(submode == VDD_SUBMODE_NTSC_44)||
(submode == VDD_SUBMODE_PAL_M) ||
(submode == VDD_SUBMODE_PAL_60) ||
(submode == VDD_SUBMODE_NTSC_COMB))
{
mode = VDD_MODE_NTSC;
}
else if((submode == VDD_SUBMODE_PAL_BGHI) ||
(submode == VDD_SUBMODE_PAL_N))
{
mode = VDD_MODE_PAL;
}
else if(submode == VDD_SUBMODE_SECAM)
mode = VDD_MODE_SECAM;
else
mode = VDD_MODE_NOVIDEO;
}
return mode;
}
//******************************************************************************
//
// FUNCTION : void dev_vpc323ConfigVideoMode(BYTE VidDecId,BYTE mode)
// USAGE : Initializes video decoder device with a specified video mode
// INPUT : VidDecId - video decoder device ID (SAA7115, vpc323)
// : Mode - VDD_MODE_NOVIDEO, VDD_MODE_NTSC, VDD_MODE_PAL
// VDD_MODE_SECAM, VDD_MODE_INIT
// OUTPUT : None
// GLOBALS : None
// USED_REGS : None
//
//******************************************************************************
static void __near dev_vpc323ConfigVideoMode(BYTE mode)
{
switch (mode)
{
case VDD_MODE_INIT:
VideoDecoderResetLow();
gm_Delay1ms(10);
VideoDecoderResetHigh();
gm_Delay1ms(50);
// good bad
dev_vpc323_WordWrite(VPC_PIN_CTRL_TWC_REG,0x0e40); // 0x1f = 0x0e40 ** 0x00
msg_vdd("@ x1f = %x", dev_vpc323_WordRead(VPC_PIN_CTRL_TWC_REG) );
dev_vpc323_ByteWrite(VPC_SYNCGEN_CTRL_TWC_REG,0x28); // 0x20 = 0x28
dev_vpc323_WordWrite(VPC_OP_STENGTH_TWC_REG,0x0000); // 0x23 = 0x0000
dev_vpc323_WordWrite(VPC_LINE_LEN_TWC_REG,0x0359); // 0x21 = 0x0359
dev_vpc323_WordWrite(VPC_HC_START_TWC_REG,0x0100); // 0x26 = 0x0100
dev_vpc323_WordWrite(VPC_HC_STOP_TWC_REG,0x013e); // 0x27 = 0x13e -
//dev_vpc323_WordWrite(VidDecId,VPC_AVO_START_TWC_REG,0x0088,2);
dev_vpc323_WordWrite(VPC_AVO_START_TWC_REG,0x0072); // _FIX_ 0x28 = 0x0072
dev_vpc323_WordWrite(VPC_AVO_STOP_TWC_REG,0x0358); // 0x29 =
//dev_vpc323_WordWrite(VidDecId,VPC_NEWLINE_TWC_REG,0x0088,2);
dev_vpc323_WordWrite(VPC_NEWLINE_TWC_REG,0x0072); // _FIX_ 0x22 = 0x0072
dev_vpc323FPWrite(VPC_LLC_CLOCKH_FP_REG,0x002a); // FP 0x69 = 0x2a
dev_vpc323FPWrite(VPC_LLC_CLOCKL_FP_REG,0x0aab); // FP 0x6A = 0xaab
dev_vpc323FPWrite(VPC_LLC_CLKC_FP_REG,0x0005); // FP 0x6d = 0x05
dev_vpc323FPWrite(VPC_FFLIM_FP_REG,0x02d0); // FP 0x42 = 0x02d0
dev_vpc323FPWrite(VPC_SCINC1_FP_REG,0x0600); // FP 0x43 = 0x0600
//dev_vpc323FPWrite(VidDecId,VPC_SCBRI_FP_REG,0x0132);
//dev_vpc323FPWrite(VidDecId,VPC_SCCT_FP_REG,0x0030);
dev_vpc323FPWrite(VPC_SCMODE_FP_REG,0x0000); // **FP 0x40 = 0x800 ** 0x00
dev_vpc323_ByteWrite(VPC_PIPOPER_TWC_REG,0xff); // **0x83 = 0x7f ** 0xff
dev_vpc323FPWrite(VPC_SCMODE_FP_REG,0x0000); // FP 0x40 = 0x800 ** 0x00
// dev_vpc323FPWrite(VidDecId,VPC_LDLY_FP_REG,0x0f40); // rc15
dev_vpc323FPWrite(VPC_LDLY_FP_REG,0x0f80); // FineTuned Values FP 0x23 = 0x0f80
dev_vpc323FPWrite(VPC_COMB_UC_FP_REG,0x00e7); // FP 0x28 = 0xe7
// dev_vpc323FPWrite(VidDecId,VPC_INSEL_FP_REG,0x0775); // rc15
dev_vpc323FPWrite(VPC_INSEL_FP_REG,0x0766); // FineTuned Values ** FP 0x21 = 0xf66 ** 0x766
dev_vpc323FPWrite(VPC_SDT_FP_REG,0x0021); //** FP 0x20 = 0x841 ** 0x41
dev_vpc323FPWrite(VPC_BAMPL_FP_REG,0x0001); // FP 0x36 = 0x01
dev_vpc323FPWrite(0x006e,0x000b); // 0x0b
dev_vpc323FPWrite(0x00aa,0x001c); // 0x1c
dev_vpc323FPWrite(0x00ab,0x0298); // 0x298
dev_vpc323FPWrite(0x00ac,0x05d1); // 0x5d1
dev_vpc323FPWrite(VPC_ASR_ENABLE_FP_REG,0x7f); // FP 0x148 = 0x7f
dev_vpc323_ByteWrite(VPC_CIPMIX1_TWC_REG,0xF0); // 0x94 = 0xf0
// dev_vpc323_ByteWrite(VidDecId,0x95,0xDF); // softmixer control
dev_vpc323_ByteWrite(VPC_CIPMIX2_TWC_REG,0x1F); //** 0x95 = 0xdf ** 0xdf
dev_vpc323_WordWrite(VPC_CIPSAT_TWC_REG,(40 <<6) | 40); // saturation 0x90 = 0xa28
dev_vpc323_ByteWrite(VPC_CIPCNTL_TWC_REG,0x40); // 0x96 = 0x40
// bit7 yuv, not rgb
// bit2 port2
//
// dev_vpc323_ByteWrite(VidDecId,VPC_CIPCNTL_TWC_REG,0xc4);
dev_vpc323_WordWrite(VPC_PIN_CTRL_TWC_REG,0x0e40); // 0x1f = 0x0e40 ** 0x00
break;
case VDD_MODE_NTSC:
// NO. of pixels/line in NTSC - 1 = 857
dev_vpc323_WordWrite(VPC_LINE_LEN_TWC_REG,0x0359);
dev_vpc323_WordWrite(VPC_AVO_STOP_TWC_REG,0x0358);
dev_vpc323FPWrite(VPC_COMB_UC_FP_REG,0x00e7);
break;
case VDD_MODE_PAL:
//No. pixels per line in PAL - 1 = 863
dev_vpc323_WordWrite(VPC_LINE_LEN_TWC_REG,0x035f);
dev_vpc323_WordWrite(VPC_AVO_STOP_TWC_REG,0x0330);
// Comb Filter Initialisation for PAL
dev_vpc323FPWrite(VPC_COMB_UC_FP_REG,0x00e7);
break;
case VDD_MODE_SECAM:
// PRINT(("SECAM INIT\n"));
//No. pixels per line in SECAM - 1 = 863
dev_vpc323_WordWrite(VPC_LINE_LEN_TWC_REG,0x035f);
dev_vpc323_WordWrite(VPC_AVO_STOP_TWC_REG,0x0330);
// Comb Filter Initialisation for secam
dev_vpc323FPWrite(VPC_COMB_UC_FP_REG,0x00e7);
break;
default:
msg_vdd("DEFAULT",0);
break;
} // end switch - mode
}
//******************************************************************************
//
// FUNCTION : void dev_vpc323VideoMixerControl(BYTE VidDecId,BYTE OnOff)
// USAGE : Turn on/off video mixer control
// INPUT : VidDecId - video decoder device ID (SAA7115, vpc323)
// : OnOff - D_MIXER_ON, D_MIXER_OFF
// OUTPUT : None
// GLOBALS : None
// USED_REGS : None
//
//******************************************************************************
/*void dev_vpc323VideoMixerControl(BYTE VidDecId,BYTE OnOff)
{
BYTE temp;
temp = dev_vpc323_ByteRead(VidDecId,VPC_CIPMIX2_TWC_REG);
temp = temp & 0x3F;
if(OnOff == D_MIXER_ON)
{
temp = temp | 0x40;
}
else
{
temp = temp | 0xC0;
}
dev_vpc323_ByteWrite(VidDecId,VPC_CIPMIX2_TWC_REG,temp);
}
*/
//******************************************************************************
//
// FUNCTION : void dev_vpc323SetVideoBrightness(BYTE VidDecId,BYTE bval)
// USAGE : Set the brightness for video decoder device
// INPUT : VidDecId - video decoder device ID (SAA7115, vpc323)
// : bval - brightness value
// OUTPUT : None
// GLOBALS : None
// USED_REGS : None
//
//******************************************************************************
static void __near dev_vpc323SetVideoBrightness(BYTE bval)
{
WORD temp, temp1;
// GVideoDecoder[VidDecId].Brightness = bval;
temp1 = (((WORD)bval*0xFF)/100);
temp1 = temp1 & 0x00FF;
if(temp1 > 0x7f)
temp1 = temp1 - 0x80;
else
temp1 = temp1 + 0x80;
temp = dev_vpc323FPRead(VPC_SCBRI_FP_REG);
temp = temp & 0xFF00;
temp = temp | temp1;
dev_vpc323FPWrite(VPC_SCBRI_FP_REG,temp | 0x0100);
temp = dev_vpc323FPRead(VPC_SCMODE_FP_REG);
temp &= 0x7ff;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -