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

📄 vpc3230.c

📁 GM5621原代码
💻 C
📖 第 1 页 / 共 3 页
字号:
//  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 + -