📄 ms_func.c
字号:
{
#if DEMODULELATOR_MODE
mstWriteByte(BK3_65_REG_SAT, _INIT_VD_SATURATION);
#else
mstWriteByte(BK3_13_CBGAIN, _INIT_VD_SATURATION);
mstWriteByte(BK3_14_CRGAIN, _INIT_VD_SATURATION);
#endif // !DEMODULELATOR_MODE
}
if(wTemp < 0)
wTemp = 0;
mstWriteByte(GEN_00_REGBK, REGBANKSCALER); // select register bank scaler
msAdjustVideoSaturation((BYTE)wTemp);
}
#else
SINT wTemp;
wTemp = _COLOR_DEF_SATURATION+((SCHAR)(SatValue - DEF_SATURATION));
msAdjustVideoSaturation((BYTE)wTemp);
#endif
}
void mstSetGamma(BYTE GammaValue)
{
BYTE i;
BYTE count;
mstWriteByte(BK0_90_GAMMA_EN, (GammaValue&0x01));
if (GammaValue&0x01)
{
mstWriteByte(BK0_90_GAMMA_EN,0x03);
mstWriteByte(BK0_91_GAMMA_ADR_PORT,0x00);
for (i=0;i<3;i++)
{
for(count=0;count<33;count++)
{
mstWriteByte(BK0_92_GAMMA_DAT_PORT,tGammaTableNormal[i][count]);
}
}
}
}
#if USE_ALLMACEOSD
void mstSetSharpness(BYTE SharpValue)
{
BYTE ucTemp;
mstWriteByte(GEN_00_REGBK, REGBANKADC);
ucTemp = mstReadByte(BK1_78_PEAK_BAND1) & 0xC7;
ucTemp |= ((SharpValue&0x07)<<3);
mstWriteByte(BK1_78_PEAK_BAND1, ucTemp);
mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}
void mstSetDLTI(BYTE DLTIValue)
{
BYTE ucTemp;
mstWriteByte(GEN_00_REGBK, REGBANKADC);
ucTemp = mstReadByte(BK1_7A_LTI) & 0xC7;
ucTemp |= ((DLTIValue&0x07) << 3);
mstWriteByte(BK1_7A_LTI, ucTemp);
mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}
void mstSetDCTI(BYTE DCTIValue)
{
BYTE ucTemp;
mstWriteByte(GEN_00_REGBK, REGBANKADC);
ucTemp = mstReadByte(BK1_7D_CTI) & 0xE7;
ucTemp |= ((DCTIValue&0x03) << 3);
mstWriteByte(BK1_7D_CTI, ucTemp);
mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}
void mstSetBlackExtension(BYTE BEValue)
{
BYTE ucTemp;
mstWriteByte(GEN_00_REGBK, REGBANKADC);
ucTemp = mstReadByte(BK1_7E_VIP_Y_CTRL) & 0xFE;
ucTemp |= (BEValue&0x01) ;
mstWriteByte(BK1_7E_VIP_Y_CTRL, ucTemp);
mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}
void mstSetWhiteExtension(BYTE WEValue)
{
BYTE ucTemp;
mstWriteByte(GEN_00_REGBK, REGBANKADC);
ucTemp = mstReadByte(BK1_7E_VIP_Y_CTRL) & 0xFD;
ucTemp |= ((WEValue&0x01) << 1);
mstWriteByte(BK1_7E_VIP_Y_CTRL, ucTemp);
mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}
void mstSetFavorColor(BYTE FCValue)
{
mstWriteByte(GEN_00_REGBK, REGBANKADC);
if (FCValue != 0)
mstWriteByte(BK1_76_FCC_CTRL, 0xFF); //Forte 0x5B
else
mstWriteByte(BK1_76_FCC_CTRL, 0x00);
mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}
#endif //USE_ALLMACEOSD
void mstSetMACE(BYTE MACEValue)
{
mstWriteByte(GEN_00_REGBK, REGBANKADC);
if (MACEValue != 0)
{
mstWriteByte(BK1_76_FCC_CTRL, 0x89); //gan 0x4f to 0x89
mstWriteByte(BK1_77_APP_CTRL, 0x78);
//mstWriteByte(BK1_7E_VIP_Y_CTRL, 0x00);
}
else
{
mstWriteByte(BK1_76_FCC_CTRL, 0x00);
mstWriteByte(BK1_77_APP_CTRL, 0x00);
//mstWriteByte(BK1_7E_VIP_Y_CTRL, 0x00);
}
mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}
void mstSetScalingMode(BYTE ucScalingMode)
{
#if (PANEL_TYPE_SEL == PNL_HITACHI26_L)
BYTE ucTemp;
ucTemp = ucScalingMode;
return;
#else
#if 0 //Not Ready
DWORD ulV_Scaling_Factor;
WORD uwInput_V_Resol;
#endif
DWORD ulH_Scaling_Factor,ulNewHsize;
WORD uwInput_H_Resol,uwTemp,uwCutOffNum;
BYTE ucLace_status;
DWORD ulTemp;
BYTE ucTemp;
if (tOSDSourcSELSequence[Display.ucSourceSEL] == VGA) // If VGA input HZOOM by table
return;
mstWriteByte(GEN_00_REGBK, REGBANKSCALER); //Switch to Bank 0
if( g_ucSyncStatus & INTERLANCE_MODE_B)
ucLace_status = 2;//Interlace
else
ucLace_status = 1;//Progracive
//Cal H scaling factor
uwInput_H_Resol = mstReadWord(BK0_0C_SPRHDC_H);//Get Input H resolution
ulH_Scaling_Factor = (DWORD)PANEL_WIDTH <<20 ;// The max available panel H_resolution is 0xFFF(4095).
uwCutOffNum =(uwInput_H_Resol*SCAL_CUTOFF_H_PER)/SCAL_CUTOFF_RESOL;
mstWriteWord(BK0_08_SPRHST_H, g_uwHStar + uwCutOffNum/2);//Capture H Start //BK0_07_SPRHST_L,BK0_08_SPRHST_H
if(ucScalingMode == FULL) // 16:9
{
mstWriteByte(BK0_38_NLDTI, 0x00); // Disable Nonlinear scaling function
ulH_Scaling_Factor /= uwInput_H_Resol- uwCutOffNum;
//MsSetScalingHImage();
mstWriteWord(BK0_49_SIHST_H,PANEL_HSTART);// Start //BK0_48_SIHST_L, BK0_49_SIHST_H
mstWriteWord(BK0_4D_SIHEND_H,PANEL_HSTART+PANEL_WIDTH);// End //BK0_4C_SIHEND_L, BK0_4D_SIHEND_H
//1 robbie fixed the parameter only for the panasonic panel 2006-01-12
#if PANEL_TYPE_SEL==PNL_LTA07_AT
mstWriteWord(BK0_4D_SIHEND_H,0x02c6);// End //BK0_4C_SIHEND_L, BK0_4D_SIHEND_H
#endif//robbie added only for panasonic 2006-01-12
ulH_Scaling_Factor += 0xC00;//0xc00 get from fine tune
}
else if(ucScalingMode == LETTERBOX) // 4:3
{
mstWriteByte(BK0_38_NLDTI, 0x00); // Disable Nonlinear scaling function
// Get the new H image size
//ulNewHsize=(((PANEL_HEIGHT*Dot_H)/Dot_W*4)/3)/3;//X*4/3=>4:3,X/3=>3dot in 1 pixel
ulNewHsize=PANEL_DOT_HEIGHT;//X*4/3=>4:3,X/3=>3dot in 1 pixel
ulNewHsize=ulNewHsize*PANEL_HEIGHT;
ulNewHsize=ulNewHsize/PANEL_DOT_WIDTH;
ulNewHsize=(ulNewHsize*SCAL_RATIO_NUMERATOR)/(SCAL_RATIO_DENOMINATOR*3);
//New start point
uwTemp = PANEL_HSTART + (PANEL_WIDTH - ulNewHsize )/2;
mstWriteWord(BK0_49_SIHST_H,uwTemp);//new Start //BK0_48_SIHST_L, BK0_49_SIHST_H
// New end point
mstWriteWord(BK0_4D_SIHEND_H,uwTemp+ulNewHsize);//new End //BK0_4C_SIHEND_L, BK0_4D_SIHEND_H
// Get new scaling factor
ulH_Scaling_Factor = (DWORD)ulNewHsize <<20 ;
ulTemp = (DWORD)uwInput_H_Resol*(SCAL_CUTOFF_RESOL - SCAL_CUTOFF_H_PER);
ulH_Scaling_Factor /= (ulTemp/SCAL_CUTOFF_RESOL);
// Mask the front and back block
mstWriteWord(BK0_5D_FRAME_COLOR_2,0);//BK0_5C_FRAME_COLOR_1, BK0_5D_FRAME_COLOR_2
ulH_Scaling_Factor += 0xC00;//0xc00 get from fine tune
}
else if(ucScalingMode == PARANOMA) // Nonlinear 1 // Patten,Widerscreen Enhanced Circle Hatch 100 IRE
{
// New H. scaling factor
ulH_Scaling_Factor /= SCAL_NON_LINEAR_RESOL;
ulH_Scaling_Factor *= SCAL_NON_LINEAR_RATIO;
ulH_Scaling_Factor /= uwInput_H_Resol; //F0
ulH_Scaling_Factor += 0x1a00;
// Size of the count0,count1 and count2
uwTemp = uwInput_H_Resol /10 ;
ucTemp = (BYTE)uwTemp/2;
mstWriteByte(BK0_3B_NLDC0, ucTemp*2); // Counter0
mstWriteByte(BK0_3C_NLDC1, ucTemp*2); // Counter1
mstWriteByte(BK0_3D_NLDC2, (uwInput_H_Resol/4)-ucTemp*4 ); // Counter2
// Enable nonlinear scaling,C0:C1:C2=2:2:1
//Offset=5*(Pan_H/In_H)*((1/2)-(a/2b))
ulTemp=5*PANEL_WIDTH;
ulTemp *= (SCAL_NON_LINEAR_RESOL - SCAL_NON_LINEAR_RATIO)>>1;
ulTemp /= SCAL_NON_LINEAR_RESOL;
ulTemp = (ulTemp<<7) / uwInput_H_Resol;
mstWriteByte(BK0_38_NLDTI, 0x80 + (BYTE)ulTemp); //[7]Nonlinear enable/disable.[6:0]Offset Initial
// To get Delta
ulTemp = ulTemp<< 8;
ulTemp /= (4*2*ucTemp) ;
mstWriteByte(BK0_39_NLDT0, (BYTE)ulTemp); //Deltar0.[7]sign of the offset initial value,[6:0]Delta value
mstWriteByte(BK0_3A_NLDT1, (BYTE)ulTemp); //Delta1
// Set Display H image size End and Start
mstWriteWord(BK0_49_SIHST_H,PANEL_HSTART); //Start //BK0_48_SIHST_L, BK0_49_SIHST_H
mstWriteWord(BK0_4D_SIHEND_H,PANEL_HSTART+PANEL_WIDTH);//End //BK0_4C_SIHEND_L, BK0_4D_SIHEND_H
ulH_Scaling_Factor += 0x800;//0xc00 get from fine tune
}
if((uwInput_H_Resol-uwCutOffNum) > PANEL_WIDTH)
{
sysWriteString("H-Scaling Rate:");
sysWriteUartHex4((WORD)(ulH_Scaling_Factor>>16),0);
sysWriteUartHex4((WORD)(ulH_Scaling_Factor),0);
sysWriteString(tChangeLine);
#if 0 //(MARIA_TYPE_SEL == MARIA_2)
mstWriteWord(BK0_31_SRH_M,(unsigned int)(ulH_Scaling_Factor) );//BK0_30_SRH_L,BK0_31_SRH_M
mstWriteByte(BK0_32_SRH_H,(unsigned char)((ulH_Scaling_Factor&0x0F0000)>>16)+0xC0);
#else
mstWriteWord(BK0_31_SRH_M,(unsigned int)(ulH_Scaling_Factor&0xFFF000) );//BK0_30_SRH_L,BK0_31_SRH_M
mstWriteByte(BK0_32_SRH_H,(unsigned char)((ulH_Scaling_Factor&0x0F0000)>>16)+0xC0);
#endif
}
else
{
mstWriteWord(BK0_08_SPRHST_H, g_uwHStar);
mstWriteByte(BK0_32_SRH_H, 0x00);
}
#if 0 //Not Ready
//Cal V scaling factor
uwInput_V_Resol = mstReadWord(BK0_0A_SPRVDC_H)-SCAL_CUTOFF_V_NUM;//Get Input V resolution
if((uwInput_V_Resol / PANEL_HEIGHT)>1)
{
ulV_Scaling_Factor = (DWORD)uwInput_V_Resol <<20; // The max available panel H_resolution is 0xFFF(4095).
ulV_Scaling_Factor /= PANEL_HEIGHT*ucLace_status;//*2=>interlace
mstWriteWord(BK0_34_SRV_M,(unsigned int)ulV_Scaling_Factor);
*((BYTE pdata*) BK0_35_SRV_H) = (unsigned char)((ulV_Scaling_Factor&0x3F0000)>>16)+0x80;
}
else
*((BYTE pdata*) BK0_35_SRV_H) = 0x00;
#endif
//1 robbie fixed the parameter only for the panasonic panel 2006-01-12
#if PANEL_TYPE_SEL==PNL_LTA07_AT
if((g_ucSyncStatus & PAL_MODE_B) != 0)
{
mstWriteWord(BK0_31_SRH_M,0x6000);//
mstWriteByte(BK0_32_SRH_H,0xCB);
}//
#endif//robbie added only for panasonic 2006-01-12
#endif
}
/*void mstSetScalingHImage(void)
{
//mstWriteByte(BK0_48_SIHST_L, IMAGE_HSTAR); //Start
mstWriteByte(BK0_48_SIHST_L, PANEL_HSTART); // Start
mstWriteByte(BK0_49_SIHST_H, 0);
mstWriteByte(BK0_4C_SIHEND_L, PANEL_HSTART+PANEL_WIDTH); // End
mstWriteByte(BK0_4D_SIHEND_H, ((PANEL_HSTART+PANEL_WIDTH)&0xFF00)>>8);
}*/
#if USE_ROTATE_OSD
void mstSetDisplayRotate(BYTE ucStatus)
{
BYTE ucRotateStatus;
ucRotateStatus = SET_PTC_MODE2;
if(ucStatus != 0)
#if (PANEL_TYPE_SEL == PNL_LG07_AT)
ucRotateStatus ^= 0x0B;
#else
ucRotateStatus ^= 0x0F;
#endif
mstWriteByte(GEN_00_REGBK, REGBANKADC);
mstWriteByte(BK1_D1_PTC_MODE2, ucRotateStatus);
mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}
#endif // USE_ROTATE_OSD
void mstSetAdcRedGain(BYTE GainValue)
{
mstWriteByte(GEN_00_REGBK, REGBANKADC);
mstWriteByte(BK1_04_RGAIN_ADC, GainValue);
mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}
void mstSetAdcGreenGain(BYTE GainValue)
{
mstWriteByte(GEN_00_REGBK, REGBANKADC);
mstWriteByte(BK1_05_GGAIN_ADC, GainValue);
mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}
void mstSetAdcBlueGain(BYTE GainValue)
{
mstWriteByte(GEN_00_REGBK, REGBANKADC);
mstWriteByte(BK1_06_BGAIN_ADC, GainValue);
mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}
void mstSetAdcRedOffset(BYTE OffsetValue)
{
mstWriteByte(GEN_00_REGBK, REGBANKADC);
mstWriteByte(BK1_07_ROFFS_ADC, OffsetValue);
mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}
void mstSetAdcGreenOffset(BYTE OffsetValue)
{
mstWriteByte(GEN_00_REGBK, REGBANKADC);
mstWriteByte(BK1_08_GOFFS_ADC, OffsetValue);
mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}
void mstSetAdcBlueOffset(BYTE OffsetValue)
{
mstWriteByte(GEN_00_REGBK, REGBANKADC);
mstWriteByte(BK1_09_BOFFS_ADC, OffsetValue);
mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}
void mstSetVcomDC( BYTE DCValue)
{
mstWriteByte(GEN_00_REGBK, REGBANKADC);
mstWriteByte(BK1_43_BVOM_DC, DCValue);
mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}
void mstSetVcomAC( BYTE ACValue)
{
mstWriteByte(GEN_00_REGBK, REGBANKADC);
mstWriteByte(BK1_44_BVOM_OUT, ACValue);
mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
}
void mstSetSSCStep(BYTE StepValue)
{
mstWriteByte(BK0_28_OPL_STEP0, StepValue);
}
void mstSetSSCSpan(BYTE SpanValue)
{
mstWriteByte(BK0_2A_OPL_SPAN0, SpanValue);
}
void mstSetVGAGainOffset(void)
{
mstSetAdcRedGain(Display.ucVgaRedGain);
mstSetAdcGreenGain(Display.ucVgaGreenGain);
mstSetAdcBlueGain(Display.ucVgaBlueGain);
mstSetAdcRedOffset(Display.ucVgaRedOffset);
mstSetAdcGreenOffset(Display.ucVgaGreenOffset);
mstSetAdcBlueOffset(Display.ucVgaBlueOffset);
}
void mstSetYPbPrGainOffset(void)
{
mstSetAdcRedGain(Display.ucYPbPrPrGain);
mstSetAdcGreenGain(Display.ucYPbPrYGain);
mstSetAdcBlueGain(Display.ucYPbPrPbGain);
mstSetAdcRedOffset(Display.ucYPbPrPrOffset);
mstSetAdcGreenOffset(Display.ucYPbPrYOffset);
mstSetAdcBlueOffset(Display.ucYPbPrPbOffset);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -