📄 theatre.c
字号:
case (DEC_NTSC): if ((t->wStandard & 0xFF00) == extNTSC_J) { dbYgain = 219.0 / ( 100.0 * (double)(dbSynctipRef0) /40.0); } else { dbSetup = 7.5 * (double)(dbSynctipRef0) / 40.0; dbYgain = 219.0 / (92.5 * (double)(dbSynctipRef0) / 40.0); } break; case (DEC_PAL): case (DEC_SECAM): dbYgain = 219.0 / ( 100.0 * (double)(dbSynctipRef0) /43.0); break; default: break; } wBrightness = (CARD16) (16.0 * ((dbBrightness-dbSetup) + (16.0 / (dbContrast * dbYgain)))); WriteRT_fld (fld_LP_BRIGHTNESS, wBrightness); /*RT_SetSaturation (t->iSaturation); */ return;} /* RT_SetBrightness ()... *//**************************************************************************** * RT_SetSharpness (CARD16 wSharpness) * * Function: sets the sharpness level for the Rage Theatre video in * * Inputs: CARD16 wSharpness - the sharpness value to be set. * * Outputs: NONE * ****************************************************************************/void RT_SetSharpness (TheatrePtr t, CARD16 wSharpness){ switch (wSharpness) { case DEC_SMOOTH : WriteRT_fld (fld_H_SHARPNESS, RT_NORM_SHARPNESS); t->wSharpness = RT_NORM_SHARPNESS; break; case DEC_SHARP : WriteRT_fld (fld_H_SHARPNESS, RT_HIGH_SHARPNESS); t->wSharpness = RT_HIGH_SHARPNESS; break; default: break; } return;} /* RT_SetSharpness ()... *//**************************************************************************** * RT_SetContrast (int Contrast) * * Function: sets the contrast level for the Rage Theatre video in * * Inputs: int Contrast - the contrast value to be set. * * Outputs: NONE * ****************************************************************************/void RT_SetContrast (TheatrePtr t, int Contrast){ double dbSynctipRef0=0, dbContrast=0; double dbYgain=0; CARD8 bTempContrast=0; /* VALIDATE CONTRAST LEVEL */ if (Contrast < -1000) { Contrast = -1000; } else if (Contrast > 1000) { Contrast = 1000; } /* Save contrast value */ t->iContrast = Contrast; dbSynctipRef0 = ReadRT_fld (fld_SYNCTIP_REF0); dbContrast = (double) (Contrast+1000.0) / 1000.0; switch (t->wStandard & 0x00FF) { case (DEC_NTSC): if ((t->wStandard & 0xFF00) == (extNTSC_J)) { dbYgain = 219.0 / ( 100.0 * (double)(dbSynctipRef0) /40.0); } else { dbYgain = 219.0 / ( 92.5 * (double)(dbSynctipRef0) /40.0); } break; case (DEC_PAL): case (DEC_SECAM): dbYgain = 219.0 / ( 100.0 * (double)(dbSynctipRef0) /43.0); break; default: break; } bTempContrast = (CARD8) ((dbContrast * dbYgain * 64) + 0.5); WriteRT_fld (fld_LP_CONTRAST, (CARD32)bTempContrast); /* Save value for future modification */ t->dbContrast = dbContrast; return;} /* RT_SetContrast ()... *//**************************************************************************** * RT_SetInterlace (CARD8 bInterlace) * * Function: to set the interlacing pattern for the Rage Theatre video in * * Inputs: CARD8 bInterlace * * Outputs: NONE * ****************************************************************************/void RT_SetInterlace (TheatrePtr t, CARD8 bInterlace){ switch(bInterlace) { case (TRUE): /*DEC_INTERLACE */ WriteRT_fld (fld_V_DEINTERLACE_ON, 0x1); t->wInterlaced = (CARD16) RT_DECINTERLACED; break; case (FALSE): /*DEC_NONINTERLACE */ WriteRT_fld (fld_V_DEINTERLACE_ON, RT_DECNONINTERLACED); t->wInterlaced = (CARD16) RT_DECNONINTERLACED; break; default: break; } return;} /* RT_SetInterlace ()... *//**************************************************************************** * GetStandardConstants (double *LPeriod, double *FPeriod, * * double *Fsamp, CARD16 wStandard) * * Function: return timing values for a given standard * * Inputs: double *LPeriod - * double *FPeriod - * double *Fsamp - sampling frequency used for a given standard * * CARD16 wStandard - input standard (NTSC, PAL, SECAM) * * Outputs: NONE * ****************************************************************************/static void GetStandardConstants (double *LPeriod, double *FPeriod, double *Fsamp, CARD16 wStandard){ *LPeriod = 0.0; *FPeriod = 0.0; *Fsamp = 0.0; switch (wStandard & 0x00FF) { case (DEC_NTSC): /*NTSC GROUP - 480 lines*/ switch (wStandard & 0xFF00) { case (extNONE): case (extNTSC): case (extNTSC_J): *LPeriod = (double) 63.5555; *FPeriod = (double) 16.6833; *Fsamp = (double) 28.63636; break; case (extPAL_M): *LPeriod = (double) 63.492; *FPeriod = (double) 16.667; *Fsamp = (double) 28.63689192; break; default: return; } break; case (DEC_PAL): if( (wStandard & 0xFF00) == extPAL_N ) { *LPeriod = (double) 64.0; *FPeriod = (double) 20.0; *Fsamp = (double) 28.65645; } else { *LPeriod = (double) 64.0; *FPeriod = (double) 20.0; *Fsamp = (double) 35.46895; } break; case (DEC_SECAM): *LPeriod = (double) 64.0; *FPeriod = (double) 20.0; *Fsamp = (double) 35.46895; break; } return;} /* GetStandardConstants ()...*//**************************************************************************** * RT_SetStandard (CARD16 wStandard) * * Function: to set the input standard for the Rage Theatre video in * * Inputs: CARD16 wStandard - input standard (NTSC, PAL, SECAM) * * Outputs: NONE * ****************************************************************************/void RT_SetStandard (TheatrePtr t, CARD16 wStandard){ double dbFsamp=0, dbLPeriod=0, dbFPeriod=0; CARD16 wFrameTotal = 0; double dbSPPeriod = 4.70; xf86DrvMsg(t->VIP->scrnIndex,X_INFO,"Rage Theatre setting standard 0x%04x\n", wStandard); t->wStandard = wStandard; /* Get the constants for the given standard. */ GetStandardConstants (&dbLPeriod, &dbFPeriod, &dbFsamp, wStandard); wFrameTotal = (CARD16) (((2.0 * dbFPeriod) * 1000 / dbLPeriod) + 0.5); /* Procedures before setting the standards: */ WriteRT_fld (fld_VIN_CLK_SEL, RT_REF_CLK); WriteRT_fld (fld_VINRST, RT_VINRST_RESET); RT_SetVINClock (t, wStandard); WriteRT_fld (fld_VINRST, RT_VINRST_ACTIVE); WriteRT_fld (fld_VIN_CLK_SEL, RT_PLL_VIN_CLK); /* Program the new standards: */ switch (wStandard & 0x00FF) { case (DEC_NTSC): /*NTSC GROUP - 480 lines */ WriteRT_fld (fld_STANDARD_SEL, RT_NTSC); WriteRT_fld (fld_SYNCTIP_REF0, RT_NTSCM_SYNCTIP_REF0); WriteRT_fld (fld_SYNCTIP_REF1, RT_NTSCM_SYNCTIP_REF1); WriteRT_fld (fld_CLAMP_REF, RT_NTSCM_CLAMP_REF); WriteRT_fld (fld_AGC_PEAKWHITE, RT_NTSCM_PEAKWHITE); WriteRT_fld (fld_VBI_PEAKWHITE, RT_NTSCM_VBI_PEAKWHITE); WriteRT_fld (fld_WPA_THRESHOLD, RT_NTSCM_WPA_THRESHOLD); WriteRT_fld (fld_WPA_TRIGGER_LO, RT_NTSCM_WPA_TRIGGER_LO); WriteRT_fld (fld_WPA_TRIGGER_HIGH, RT_NTSCM_WPA_TRIGGER_HIGH); WriteRT_fld (fld_LOCKOUT_START, RT_NTSCM_LP_LOCKOUT_START); WriteRT_fld (fld_LOCKOUT_END, RT_NTSCM_LP_LOCKOUT_END); WriteRT_fld (fld_CH_DTO_INC, RT_NTSCM_CH_DTO_INC); WriteRT_fld (fld_PLL_SGAIN, RT_NTSCM_CH_PLL_SGAIN); WriteRT_fld (fld_PLL_FGAIN, RT_NTSCM_CH_PLL_FGAIN); WriteRT_fld (fld_CH_HEIGHT, RT_NTSCM_CH_HEIGHT); WriteRT_fld (fld_CH_KILL_LEVEL, RT_NTSCM_CH_KILL_LEVEL); WriteRT_fld (fld_CH_AGC_ERROR_LIM, RT_NTSCM_CH_AGC_ERROR_LIM); WriteRT_fld (fld_CH_AGC_FILTER_EN, RT_NTSCM_CH_AGC_FILTER_EN); WriteRT_fld (fld_CH_AGC_LOOP_SPEED,RT_NTSCM_CH_AGC_LOOP_SPEED); WriteRT_fld (fld_VS_FIELD_BLANK_START, RT_NTSCM_VS_FIELD_BLANK_START); WriteRT_fld (fld_VS_FIELD_BLANK_END, RT_NTSCM_VS_FIELD_BLANK_END); WriteRT_fld (fld_H_ACTIVE_START, RT_NTSCM_H_ACTIVE_START); WriteRT_fld (fld_H_ACTIVE_END, RT_NTSCM_H_ACTIVE_END); WriteRT_fld (fld_V_ACTIVE_START, RT_NTSCM_V_ACTIVE_START); WriteRT_fld (fld_V_ACTIVE_END, RT_NTSCM_V_ACTIVE_END); WriteRT_fld (fld_H_VBI_WIND_START, RT_NTSCM_H_VBI_WIND_START); WriteRT_fld (fld_H_VBI_WIND_END, RT_NTSCM_H_VBI_WIND_END); WriteRT_fld (fld_V_VBI_WIND_START, RT_NTSCM_V_VBI_WIND_START); WriteRT_fld (fld_V_VBI_WIND_END, RT_NTSCM_V_VBI_WIND_END); WriteRT_fld (fld_UV_INT_START, (CARD8)((0.10 * dbLPeriod * dbFsamp / 2.0) + 0.5 - 32)); WriteRT_fld (fld_VSYNC_INT_TRIGGER , (CARD16) RT_NTSCM_VSYNC_INT_TRIGGER); WriteRT_fld (fld_VSYNC_INT_HOLD, (CARD16) RT_NTSCM_VSYNC_INT_HOLD); switch (wStandard & 0xFF00) { case (extPAL_M): case (extNONE): case (extNTSC): WriteRT_fld (fld_CR_BURST_GAIN, RT_NTSCM_CR_BURST_GAIN); WriteRT_fld (fld_CB_BURST_GAIN, RT_NTSCM_CB_BURST_GAIN); WriteRT_fld (fld_CRDR_ACTIVE_GAIN, RT_NTSCM_CRDR_ACTIVE_GAIN); WriteRT_fld (fld_CBDB_ACTIVE_GAIN, RT_NTSCM_CBDB_ACTIVE_GAIN); WriteRT_fld (fld_VERT_LOCKOUT_START, RT_NTSCM_VERT_LOCKOUT_START); WriteRT_fld (fld_VERT_LOCKOUT_END, RT_NTSCM_VERT_LOCKOUT_END); break; case (extNTSC_J): WriteRT_fld (fld_CR_BURST_GAIN, RT_NTSCJ_CR_BURST_GAIN); WriteRT_fld (fld_CB_BURST_GAIN, RT_NTSCJ_CB_BURST_GAIN); WriteRT_fld (fld_CRDR_ACTIVE_GAIN, RT_NTSCJ_CRDR_ACTIVE_GAIN); WriteRT_fld (fld_CBDB_ACTIVE_GAIN, RT_NTSCJ_CBDB_ACTIVE_GAIN); WriteRT_fld (fld_CH_HEIGHT, RT_NTSCJ_CH_HEIGHT); WriteRT_fld (fld_CH_KILL_LEVEL, RT_NTSCJ_CH_KILL_LEVEL); WriteRT_fld (fld_CH_AGC_ERROR_LIM, RT_NTSCJ_CH_AGC_ERROR_LIM); WriteRT_fld (fld_CH_AGC_FILTER_EN, RT_NTSCJ_CH_AGC_FILTER_EN); WriteRT_fld (fld_CH_AGC_LOOP_SPEED, RT_NTSCJ_CH_AGC_LOOP_SPEED); WriteRT_fld (fld_VERT_LOCKOUT_START, RT_NTSCJ_VERT_LOCKOUT_START);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -