📄 theatre.c
字号:
WriteRT_fld (fld_VERT_LOCKOUT_END, RT_NTSCJ_VERT_LOCKOUT_END); break; default: break; } break; case (DEC_PAL): /*PAL GROUP - 525 lines */ WriteRT_fld (fld_STANDARD_SEL, RT_PAL); WriteRT_fld (fld_SYNCTIP_REF0, RT_PAL_SYNCTIP_REF0); WriteRT_fld (fld_SYNCTIP_REF1, RT_PAL_SYNCTIP_REF1); WriteRT_fld (fld_CLAMP_REF, RT_PAL_CLAMP_REF); WriteRT_fld (fld_AGC_PEAKWHITE, RT_PAL_PEAKWHITE); WriteRT_fld (fld_VBI_PEAKWHITE, RT_PAL_VBI_PEAKWHITE); WriteRT_fld (fld_WPA_THRESHOLD, RT_PAL_WPA_THRESHOLD); WriteRT_fld (fld_WPA_TRIGGER_LO, RT_PAL_WPA_TRIGGER_LO); WriteRT_fld (fld_WPA_TRIGGER_HIGH, RT_PAL_WPA_TRIGGER_HIGH); WriteRT_fld (fld_LOCKOUT_START,RT_PAL_LP_LOCKOUT_START); WriteRT_fld (fld_LOCKOUT_END, RT_PAL_LP_LOCKOUT_END); WriteRT_fld (fld_CH_DTO_INC, RT_PAL_CH_DTO_INC); WriteRT_fld (fld_PLL_SGAIN, RT_PAL_CH_PLL_SGAIN); WriteRT_fld (fld_PLL_FGAIN, RT_PAL_CH_PLL_FGAIN); WriteRT_fld (fld_CR_BURST_GAIN, RT_PAL_CR_BURST_GAIN); WriteRT_fld (fld_CB_BURST_GAIN, RT_PAL_CB_BURST_GAIN); WriteRT_fld (fld_CRDR_ACTIVE_GAIN, RT_PAL_CRDR_ACTIVE_GAIN); WriteRT_fld (fld_CBDB_ACTIVE_GAIN, RT_PAL_CBDB_ACTIVE_GAIN); WriteRT_fld (fld_CH_HEIGHT, RT_PAL_CH_HEIGHT); WriteRT_fld (fld_CH_KILL_LEVEL, RT_PAL_CH_KILL_LEVEL); WriteRT_fld (fld_CH_AGC_ERROR_LIM, RT_PAL_CH_AGC_ERROR_LIM); WriteRT_fld (fld_CH_AGC_FILTER_EN, RT_PAL_CH_AGC_FILTER_EN); WriteRT_fld (fld_CH_AGC_LOOP_SPEED,RT_PAL_CH_AGC_LOOP_SPEED); WriteRT_fld (fld_VERT_LOCKOUT_START, RT_PAL_VERT_LOCKOUT_START); WriteRT_fld (fld_VERT_LOCKOUT_END, RT_PAL_VERT_LOCKOUT_END); WriteRT_fld (fld_VS_FIELD_BLANK_START, (CARD16)RT_PALSEM_VS_FIELD_BLANK_START); WriteRT_fld (fld_VS_FIELD_BLANK_END, RT_PAL_VS_FIELD_BLANK_END); WriteRT_fld (fld_H_ACTIVE_START, RT_PAL_H_ACTIVE_START); WriteRT_fld (fld_H_ACTIVE_END, RT_PAL_H_ACTIVE_END); WriteRT_fld (fld_V_ACTIVE_START, RT_PAL_V_ACTIVE_START); WriteRT_fld (fld_V_ACTIVE_END, RT_PAL_V_ACTIVE_END); WriteRT_fld (fld_H_VBI_WIND_START, RT_PAL_H_VBI_WIND_START); WriteRT_fld (fld_H_VBI_WIND_END, RT_PAL_H_VBI_WIND_END); WriteRT_fld (fld_V_VBI_WIND_START, RT_PAL_V_VBI_WIND_START); WriteRT_fld (fld_V_VBI_WIND_END, RT_PAL_V_VBI_WIND_END); /* Magic 0.10 is correct - according to Ivo. Also see SECAM code below *//* WriteRT_fld (fld_UV_INT_START, (CARD8)( (0.12 * dbLPeriod * dbFsamp / 2.0) + 0.5 - 32 )); */ WriteRT_fld (fld_UV_INT_START, (CARD8)( (0.10 * dbLPeriod * dbFsamp / 2.0) + 0.5 - 32 )); WriteRT_fld (fld_VSYNC_INT_TRIGGER , (CARD16) RT_PALSEM_VSYNC_INT_TRIGGER); WriteRT_fld (fld_VSYNC_INT_HOLD, (CARD16) RT_PALSEM_VSYNC_INT_HOLD); break; case (DEC_SECAM): /*PAL GROUP*/ WriteRT_fld (fld_STANDARD_SEL, RT_SECAM); WriteRT_fld (fld_SYNCTIP_REF0, RT_SECAM_SYNCTIP_REF0); WriteRT_fld (fld_SYNCTIP_REF1, RT_SECAM_SYNCTIP_REF1); WriteRT_fld (fld_CLAMP_REF, RT_SECAM_CLAMP_REF); WriteRT_fld (fld_AGC_PEAKWHITE, RT_SECAM_PEAKWHITE); WriteRT_fld (fld_VBI_PEAKWHITE, RT_SECAM_VBI_PEAKWHITE); WriteRT_fld (fld_WPA_THRESHOLD, RT_SECAM_WPA_THRESHOLD); WriteRT_fld (fld_WPA_TRIGGER_LO, RT_SECAM_WPA_TRIGGER_LO); WriteRT_fld (fld_WPA_TRIGGER_HIGH, RT_SECAM_WPA_TRIGGER_HIGH); WriteRT_fld (fld_LOCKOUT_START,RT_SECAM_LP_LOCKOUT_START); WriteRT_fld (fld_LOCKOUT_END, RT_SECAM_LP_LOCKOUT_END); WriteRT_fld (fld_CH_DTO_INC, RT_SECAM_CH_DTO_INC); WriteRT_fld (fld_PLL_SGAIN, RT_SECAM_CH_PLL_SGAIN); WriteRT_fld (fld_PLL_FGAIN, RT_SECAM_CH_PLL_FGAIN); WriteRT_fld (fld_CR_BURST_GAIN, RT_SECAM_CR_BURST_GAIN); WriteRT_fld (fld_CB_BURST_GAIN, RT_SECAM_CB_BURST_GAIN); WriteRT_fld (fld_CRDR_ACTIVE_GAIN, RT_SECAM_CRDR_ACTIVE_GAIN); WriteRT_fld (fld_CBDB_ACTIVE_GAIN, RT_SECAM_CBDB_ACTIVE_GAIN); WriteRT_fld (fld_CH_HEIGHT, RT_SECAM_CH_HEIGHT); WriteRT_fld (fld_CH_KILL_LEVEL, RT_SECAM_CH_KILL_LEVEL); WriteRT_fld (fld_CH_AGC_ERROR_LIM, RT_SECAM_CH_AGC_ERROR_LIM); WriteRT_fld (fld_CH_AGC_FILTER_EN, RT_SECAM_CH_AGC_FILTER_EN); WriteRT_fld (fld_CH_AGC_LOOP_SPEED,RT_SECAM_CH_AGC_LOOP_SPEED); WriteRT_fld (fld_VERT_LOCKOUT_START, RT_SECAM_VERT_LOCKOUT_START); /*Might not need */ WriteRT_fld (fld_VERT_LOCKOUT_END, RT_SECAM_VERT_LOCKOUT_END); /* Might not need */ WriteRT_fld (fld_VS_FIELD_BLANK_START, (CARD16)RT_PALSEM_VS_FIELD_BLANK_START); WriteRT_fld (fld_VS_FIELD_BLANK_END, RT_PAL_VS_FIELD_BLANK_END); WriteRT_fld (fld_H_ACTIVE_START, RT_PAL_H_ACTIVE_START); WriteRT_fld (fld_H_ACTIVE_END, RT_PAL_H_ACTIVE_END); WriteRT_fld (fld_V_ACTIVE_START, RT_PAL_V_ACTIVE_START); WriteRT_fld (fld_V_ACTIVE_END, RT_PAL_V_ACTIVE_END); WriteRT_fld (fld_H_VBI_WIND_START, RT_PAL_H_VBI_WIND_START); WriteRT_fld (fld_H_VBI_WIND_END, RT_PAL_H_VBI_WIND_END); WriteRT_fld (fld_V_VBI_WIND_START, RT_PAL_V_VBI_WIND_START); WriteRT_fld (fld_V_VBI_WIND_END, RT_PAL_V_VBI_WIND_END); WriteRT_fld (fld_VSYNC_INT_TRIGGER , (CARD16) RT_PALSEM_VSYNC_INT_TRIGGER); WriteRT_fld (fld_VSYNC_INT_HOLD, (CARD16) RT_PALSEM_VSYNC_INT_HOLD);/* WriteRT_fld (fld_UV_INT_START, (CARD8)( (0.12 * dbLPeriod * dbFsamp / 2.0) + 0.5 - 32 )); */ WriteRT_fld (fld_UV_INT_START, (CARD8)( (0.10 * dbLPeriod * dbFsamp / 2.0) + 0.5 - 32 )); break; default: break; } if (t->wConnector == DEC_SVIDEO) { RT_SetCombFilter (t, wStandard, RT_SVIDEO); } else { /* Set up extra (connector and std) registers. */ RT_SetCombFilter (t, wStandard, RT_COMPOSITE); } /* Set the following values according to the formulas */ WriteRT_fld (fld_HS_LINE_TOTAL, (CARD16)((dbLPeriod * dbFsamp / 2.0) +0.5)); /* According to Ivo PAL/SECAM needs different treatment */ switch(wStandard & 0x00FF) { case DEC_PAL: case DEC_SECAM: WriteRT_fld (fld_MIN_PULSE_WIDTH, (CARD8)(0.5 * dbSPPeriod * dbFsamp/2.0)); WriteRT_fld (fld_MAX_PULSE_WIDTH, (CARD8)(1.5 * dbSPPeriod * dbFsamp/2.0)); WriteRT_fld (fld_WIN_OPEN_LIMIT, (CARD16)(((dbLPeriod * dbFsamp / 4.0) + 0.5) - 16)); WriteRT_fld (fld_WIN_CLOSE_LIMIT, (CARD16)(2.39 * dbSPPeriod * dbFsamp / 2.0)); /* WriteRT_fld (fld_VS_FIELD_IDLOCATION, (CARD16)RT_PAL_FIELD_IDLOCATION); */ /* According to docs the following value will work right, though the resulting stream deviates slightly from CCIR..., in particular the value that was before will do nuts to VCRs in pause/rewind state. */ WriteRT_fld (fld_VS_FIELD_IDLOCATION, (CARD16)0x01); WriteRT_fld (fld_HS_PLL_SGAIN, 2); break; case DEC_NTSC: WriteRT_fld (fld_MIN_PULSE_WIDTH, (CARD8)(0.75 * dbSPPeriod * dbFsamp/2.0)); WriteRT_fld (fld_MAX_PULSE_WIDTH, (CARD8)(1.25 * dbSPPeriod * dbFsamp/2.0)); WriteRT_fld (fld_WIN_OPEN_LIMIT, (CARD16)(((dbLPeriod * dbFsamp / 4.0) + 0.5) - 16)); WriteRT_fld (fld_WIN_CLOSE_LIMIT, (CARD16)(1.15 * dbSPPeriod * dbFsamp / 2.0)); /* WriteRT_fld (fld_VS_FIELD_IDLOCATION, (CARD16)fld_VS_FIELD_IDLOCATION_def);*/ /* I think the default value was the same as the one here.. does not hurt to hardcode it */ WriteRT_fld (fld_VS_FIELD_IDLOCATION, (CARD16)0x01); } WriteRT_fld (fld_VS_FRAME_TOTAL, (CARD16)(wFrameTotal) + 10); WriteRT_fld (fld_BLACK_INT_START, (CARD8)((0.09 * dbLPeriod * dbFsamp / 2.0) - 32 )); WriteRT_fld (fld_SYNC_TIP_START, (CARD16)((dbLPeriod * dbFsamp / 2.0 + 0.5) - 28 )); return;} /* RT_SetStandard ()... *//**************************************************************************** * RT_SetCombFilter (CARD16 wStandard, CARD16 wConnector) * * Function: sets the input comb filter based on the standard and * * connector being used (composite vs. svideo) * * Inputs: CARD16 wStandard - input standard (NTSC, PAL, SECAM) * * CARD16 wConnector - COMPOSITE, SVIDEO * * Outputs: NONE * ****************************************************************************/void RT_SetCombFilter (TheatrePtr t, CARD16 wStandard, CARD16 wConnector){ CARD32 dwComb_Cntl0=0; CARD32 dwComb_Cntl1=0; CARD32 dwComb_Cntl2=0; CARD32 dwComb_Line_Length=0; switch (wConnector) { case RT_COMPOSITE: switch (wStandard & 0x00FF) { case (DEC_NTSC): switch (wStandard & 0xFF00) { case (extNONE): case (extNTSC): case (extNTSC_J): dwComb_Cntl0= RT_NTSCM_COMB_CNTL0_COMPOSITE; dwComb_Cntl1= RT_NTSCM_COMB_CNTL1_COMPOSITE; dwComb_Cntl2= RT_NTSCM_COMB_CNTL2_COMPOSITE; dwComb_Line_Length= RT_NTSCM_COMB_LENGTH_COMPOSITE; break; case (extPAL_M): dwComb_Cntl0= RT_PALM_COMB_CNTL0_COMPOSITE; dwComb_Cntl1= RT_PALM_COMB_CNTL1_COMPOSITE; dwComb_Cntl2= RT_PALM_COMB_CNTL2_COMPOSITE; dwComb_Line_Length= RT_PALM_COMB_LENGTH_COMPOSITE; break; default: return; } break; case (DEC_PAL): switch (wStandard & 0xFF00) { case (extNONE): case (extPAL): dwComb_Cntl0= RT_PAL_COMB_CNTL0_COMPOSITE; dwComb_Cntl1= RT_PAL_COMB_CNTL1_COMPOSITE; dwComb_Cntl2= RT_PAL_COMB_CNTL2_COMPOSITE; dwComb_Line_Length= RT_PAL_COMB_LENGTH_COMPOSITE; break; case (extPAL_N): dwComb_Cntl0= RT_PALN_COMB_CNTL0_COMPOSITE; dwComb_Cntl1= RT_PALN_COMB_CNTL1_COMPOSITE; dwComb_Cntl2= RT_PALN_COMB_CNTL2_COMPOSITE; dwComb_Line_Length= RT_PALN_COMB_LENGTH_COMPOSITE; break; default: return; } break; case (DEC_SECAM): dwComb_Cntl0= RT_SECAM_COMB_CNTL0_COMPOSITE; dwComb_Cntl1= RT_SECAM_COMB_CNTL1_COMPOSITE; dwComb_Cntl2= RT_SECAM_COMB_CNTL2_COMPOSITE; dwComb_Line_Length= RT_SECAM_COMB_LENGTH_COMPOSITE; break; default: return; } break; case RT_SVIDEO: switch (wStandard & 0x00FF) { case (DEC_NTSC): switch (wStandard & 0xFF00) { case (extNONE): case (extNTSC): dwComb_Cntl0= RT_NTSCM_COMB_CNTL0_SVIDEO; dwComb_Cntl1= RT_NTSCM_COMB_CNTL1_SVIDEO; dwComb_Cntl2= RT_NTSCM_COMB_CNTL2_SVIDEO; dwComb_Line_Length= RT_NTSCM_COMB_LENGTH_SVIDEO; break; case (extPAL_M): dwComb_Cntl0= RT_PALM_COMB_CNTL0_SVIDEO; dwComb_Cntl1= RT_PALM_COMB_CNTL1_SVIDEO; dwComb_Cntl2= RT_PALM_COMB_CNTL2_SVIDEO; dwComb_Line_Length= RT_PALM_COMB_LENGTH_SVIDEO; break; default: return; } break; case (DEC_PAL): switch (wStandard & 0xFF00) { case (extNONE): case (extPAL): dwComb_Cntl0= RT_PAL_COMB_CNTL0_SVIDEO; dwComb_Cntl1= RT_PAL_COMB_CNTL1_SVIDEO; dwComb_Cntl2= RT_PAL_COMB_CNTL2_SVIDEO; dwComb_Line_Length= RT_PAL_COMB_LENGTH_SVIDEO; break; case (extPAL_N): dwComb_Cntl0= RT_PALN_COMB_CNTL0_SVIDEO; dwComb_Cntl1= RT_PALN_COMB_CNTL1_SVIDEO; dwComb_Cntl2= RT_PALN_COMB_CNTL2_SVIDEO; dwComb_Line_Length= RT_PALN_COMB_LENGTH_SVIDEO; break; default: return; } break; case (DEC_SECAM): dwComb_Cntl0= RT_SECAM_COMB_CNTL0_SVIDEO; dwComb_Cntl1= RT_SECAM_COMB_CNTL1_SVIDEO; dwComb_Cntl2= RT_SECAM_COMB_CNTL2_SVIDEO; dwComb_Line_Length= RT_SECAM_COMB_LENGTH_SVIDEO; break; default: return; } break; default: return; } WriteRT_fld (fld_COMB_CNTL0, dwComb_Cntl0); WriteRT_fld (fld_COMB_CNTL1, dwComb_Cntl1); WriteRT_fld (fld_COMB_CNTL2, dwComb_Cntl2); WriteRT_f
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -