?? tv_2in1.c
字號:
NVRam_WriteByte(nvrTVChanneSkipInfoAddr(chIdx), ucTemp);
#endif
}
void SaveChannelData( BYTE chIdx, StuChannelData* pChData )
{
//printf("nvrChanneAddr(chIdx)====%x", nvrChanneAddr(chIdx));
//printf("SIZE_TV_CHANNEL_INFO===%x", SIZE_TV_CHANNEL_INFO);
rmBurstWriteBytes( nvrChanneAddr(chIdx), (BYTE *)pChData, SIZE_TV_CHANNEL_INFO);
}
void ChannelScanInit(void)
{
devAudioWrite(0);
//msFPLLCtl( FPLL_TUNE_LINE_ONLY );
g_ucOsdCounter = 0;
g_bTVAutoScanChannelBreak = FALSE;
g_bTVManualScanChannelBreak= FALSE;
Set_AFCDisableFlag();
msWriteBit( BK0_57_OSCTRL1, 0, _BIT1 );
}
void InitVDBeforeSearchStart(void)
{
g_VdInfo.ucVideoSystem = SIG_NONE;
g_InOutCtl.bInterlace = 1;
if( IsVideoPortInUse())
{
// For TV snow
#if( TV_SYSTEM == TV_NTSC )
msVDSetupMode( VD_FSC_3579, SIG_NTSC );
#else
msVDSetupMode( VD_FSC_4433|VD_VSYNC_50HZ, SIG_PAL );
#endif
}
SetOutputTimingAndWindow( OUTPUT_SNOW );
msSetBlueScreen( _DISABLE, FR_BLACK);
}
WORD g_wTVAutoScan_LastVTotal;
void TV_ChannelAutoScanInit(void)
{
BYTE uctemp;
ChannelScanInit(); //for auto scan
//devSetSWF(TV_SOUND_I);
devSetSWF((chData.ucChannelMisc&SoundSysMask)%TV_SOUND_NUMS);
g_ucTVChannelAutoScanCount = 0; // select start channel
chData.wFreq = TN_FREQMIN;//TN_FREQMIN;
g_bTVAutoScanChannelEnable=TRUE;
uctemp=((chData.ucChannelMisc&SoundSysMask)%TV_SOUND_NUMS);
uctemp|=((((chData.ucChannelMisc&ColorSysMask)>>4)%CHROMA_NUMS)<<4);
//printf("uctemp===%d", uctemp);
//chData.ucChannelMisc=0;//default color sys auto
chData.ucChannelMisc =DoAFCFlag|uctemp;
g_bSaveChannel=FALSE;
#if (TV_SYSTEM==TV_NTSC)
g_ucTVChannelAutoScanCount=0;
chData.wFreq = CurrentChannelFreq( g_ucTVChannelAutoScanCount);
#endif
for(uctemp=0;uctemp<((TV_MAX_CHANNEL_NUM+1)/8)+2;uctemp++)
g_ucTVChannelSkipInfoBuff[uctemp]=0;
EraseTvSkipInfo();
DevTunerWrite(chData.wFreq);
InitVDBeforeSearchStart();
g_wTVAutoScan_LastVTotal = 0;
#if(ENABLE_CHECK_AUTO_H_TOTAL)
g_bEnableAutoHTotal = 0;
#endif
SystemDelay_translate_To_Dsp_Processor(5);
}
void TV_ChannelAutoScan(void)
{
if( g_bTVAutoScanChannelBreak )
{
// Reset the value of the channel without signal
#if(TV_SYSTEM==TV_NTSC)
g_ucMenuItemIndex=1;
g_TVChSetting.ucCurChannelNO=1;
TV_SelectChannel(SearchTVNoSkipChannel(1,1));
#else
g_ucMenuItemIndex=0;
TV_SelectChannel(0);
#endif
devAudioSetVolume(g_VideoSetting.volume);
g_bTVAutoScanChannelEnable=FALSE;
g_bTVAutoScanChannelBreak = FALSE;
#if(ENABLE_CHECK_AUTO_H_TOTAL)
g_bEnableAutoHTotal = 1;
#endif
//Set_InputTimingChangeFlag();
printMsg("auto stop");
ResetOsdTimer();// Reset OSD time
Clr_AFCDisableFlag();
g_ucMenuPageIndex=PresetMenu;
Set_ReDrawCurrentOSDFlag();
}
else // Continue doing auto scan ...
{
WORD wFreqResult;
WORD wVTotal;
DrawScanProgress(chData.wFreq);
wVTotal = msVDGetVTotal();
if(abs(wVTotal -g_wTVAutoScan_LastVTotal)>10)
{
ResetupMode();
g_wTVAutoScan_LastVTotal = wVTotal;
if( msVDGetVTotal() > 575 ) // 50Hz
{
g_VdInfo.ucVideoSystem = SIG_PAL;
g_ucSrcModeIndex = MD_720x576_50I;
msVDSetupMode( VD_VSYNC_50HZ|VD_FSC_4433, SIG_PAL );
}
else // 60Hz
{
g_VdInfo.ucVideoSystem = SIG_NTSC;
g_ucSrcModeIndex = MD_720x480_60I;
msVDSetupMode( VD_FSC_3579, SIG_NTSC );
}
g_InOutCtl.bInterlace = 1;
SetOutputTimingAndWindow( OUTPUT_SNOW );
}
msCheckBK0_57_Value(1);
if (!(msVDGetSyncStable(25, 30)))
{
chData.wFreq += TN_SCAN_STEP;//14;//
#if (TV_SYSTEM==TV_NTSC)
{
SaveChannelSkipInfo(g_ucTVChannelAutoScanCount,0);
wFreqResult=CurrentChannelFreq(g_ucTVChannelAutoScanCount);
g_bSaveChannel=TRUE;
}
#endif
DevTunerWrite(chData.wFreq);
}
else
{
msVDColorBurstHandler( VD_COLOR_BURST_HANDLER_RESET );
ResetupMode();
if(devTunerAutoTuneFreq(chData.wFreq , &wFreqResult) == TN_SCAN_ERR)
chData.wFreq += 6;
#if TV_SYSTEM==TV_NTSC
else
{
if(abs((WORD)(chData.wFreq)-CurrentChannelFreq(g_ucTVChannelAutoScanCount))>STEPS_1M)
{
wFreqResult=CurrentChannelFreq(g_ucTVChannelAutoScanCount);
}
else
{
SaveChannelSkipInfo(g_ucTVChannelAutoScanCount,1);
}
}
#endif
}
if(g_bSaveChannel)
{
g_wTVAutoScan_LastVTotal = 0;
chData.wFreq = wFreqResult;
#if TV_SYSTEM!=TV_NTSC
SaveChannelSkipInfo(g_ucTVChannelAutoScanCount,1);
#endif
SaveChannelData(g_ucTVChannelAutoScanCount, &chData);
#if TV_SYSTEM==TV_NTSC
ReDrawProgram(g_bProgramFlash);
if((g_TVChSetting.ucTVSource==NTSC_ATV&&g_ucTVChannelAutoScanCount == TV_MAX_CHANNEL_NUM-1)||
(g_TVChSetting.ucTVSource==NTSC_CTV&&g_ucTVChannelAutoScanCount == CATV_MAX_CHANNEL_NUM-1) )
#else
if (g_ucTVChannelAutoScanCount == TV_MAX_CHANNEL_NUM-1)
#endif
g_bTVAutoScanChannelBreak = TRUE;
else
g_ucTVChannelAutoScanCount++;
#if TV_SYSTEM==TV_NTSC
chData.wFreq=CurrentChannelFreq(g_ucTVChannelAutoScanCount);
#else
chData.wFreq += TN_SCAN_NEXT_CH; // set next channel
#endif
DevTunerWrite(chData.wFreq);
//Delay1ms(20);
SystemDelay_translate_To_Dsp_Processor(2);
g_bSaveChannel = FALSE;
}
if( chData.wFreq> TN_FREQMAX )
g_bTVAutoScanChannelBreak = TRUE;
}
}
#if TV_SYSTEM!=TV_NTSC
void TV_ChannelManualScanInit(void)
{
ChannelScanInit(); //for manual scan
if(g_bManualScanDirection)
chData.wFreq +=TN_SCAN_NEXT_CH;//STEP_200K; //
else
chData.wFreq -=TN_SCAN_NEXT_CH;//STEP_200K; //
g_bTVManualSearchEnable=TRUE;
#if(ENABLE_CHECK_AUTO_H_TOTAL)
g_bEnableAutoHTotal = 1;
#endif
}
void TV_ChannelManualScan(void)
{
WORD wFineTuneFreq;
BYTE Tmp;
if(chData.wFreq>TN_FREQMAX&&g_bManualScanDirection)
chData.wFreq=TN_FREQMIN;
else if(chData.wFreq<TN_FREQMIN&&!g_bManualScanDirection)
chData.wFreq=TN_FREQMAX; // check stop condition
if(g_bTVManualScanChannelBreak)
{
g_bTVManualStore = TRUE;
g_bSaveChannel = FALSE;
g_bTVManualSearchEnable = FALSE;
g_bTVManualScanChannelBreak = FALSE;
g_ucOsdCounter=g_VideoSetting.OsdTime; // Reset OSD time
DrawScanProgress(chData.wFreq);
#if(ENABLE_CHECK_AUTO_H_TOTAL)
g_bEnableAutoHTotal = 1;
#endif
Clr_AFCDisableFlag();
return;
}
DrawScanProgress(chData.wFreq);
DevTunerWrite( chData.wFreq );
if (!(msVDGetSyncStable(25, 30)))
{
if ( g_bManualScanDirection )
chData.wFreq += TN_SCAN_STEP; // next
else // if (cStep < 0)
chData.wFreq -= TN_SCAN_STEP; // next
DevTunerWrite(chData.wFreq);
}
else
{
Tmp = devTunerAutoTuneFreq(chData.wFreq , &wFineTuneFreq);
if(Tmp == TN_SCAN_ERR)
{
if ( g_bManualScanDirection )
chData.wFreq += 5; // next
else // if (cStep < 0)
chData.wFreq -= 5; // next
}
else
{
chData.wFreq = wFineTuneFreq;
g_bTVManualScanChannelBreak = TRUE;
DevTunerWrite(chData.wFreq);
Set_InputTimingChangeFlag();
}
}
}
#endif
WORD GetTVScale100Value(WORD value, WORD minValue, WORD maxValue)
{
maxValue=maxValue-minValue;
value=value-minValue;
if (value>650)
{
value/=2;
maxValue/=2;
}
value=((DWORD)value*100+maxValue/2)/maxValue;//modify word---->dword for tv search ,tzw
return value;
}
void DrawChannelFreqGuage( WORD wFreq ,BYTE foreColor)
{
BYTE *str;
WORD MinValue,MaxValue,TEMPVALUE;
TEMPVALUE=(WORD) wFreq;
if(TEMPVALUE < TN_LOWBAND_END)
{
MinValue=TN_FREQMIN;
MaxValue=TN_LOWBAND_END;
str="VHFL";
}
else if(TEMPVALUE < TN_MIDBAND_END)
{
MinValue=TN_LOWBAND_END;
MaxValue=TN_MIDBAND_END;
str="VHFH";
}
else
{
MinValue=TN_MIDBAND_END;
MaxValue=TN_FREQMAX;
str=" UHF";
}
Osd_SetTextColor(CP_WhiteColor,CP_GrayColor);
Osd_DrawStr(13,6, str);
Osd_SetTextColor(foreColor,CP_GrayColor);
Osd_DrawGuage(0, 9, 15, GetTVScale100Value(TEMPVALUE,MinValue,MaxValue));
}
void DrawScanProgress( WORD wFreq )
{
Osd_SetTextColor(CP_BlueColor,CP_TransparenceColor);
DrawNum(7, 0, 3, wFreq/STEPS_1M);
DrawNum(11, 0, 2, wFreq%STEPS_1M*5);
if(wFreq%STEPS_1M>1)
Osd_DrawChar(11,0,'.');
else
Osd_DrawStr(11,0, ".0");
DrawChannelFreqGuage( wFreq ,CP_RedColor);
}
void TV_ChannelInit(void)
{
g_TVChSetting.ucPreChannelNO=g_TVChSetting.ucCurChannelNO;
//g_TVChSearchStartData=TN_FREQMIN;
if (IsTVInUse())
Set_ChannelChangFlag();
Set_ShowSourceFlag();
}
void ChannelSwap(BYTE sourcechannel ,BYTE goalchannel)
{
StuChannelData chDatatemp;
ReadTVChannelInfo(sourcechannel,TRUE);
chDatatemp=chData;
ReadTVChannelInfo(goalchannel,TRUE);
SaveTVChannelInfo(sourcechannel, TRUE);
chData=chDatatemp;
SaveTVChannelInfo(goalchannel, TRUE);
DevTunerWrite(chData.wFreq);
Set_InputTimingChangeFlag();
}
void ReDrawProgram(BOOL flag)
{
if(flag)
{
Osd_SetTextColor(CP_GrayColor,CP_GrayColor);
Osd_DrawStr(2,7, strProgramText[g_VideoSetting.Language]);
Osd_DrawNum(13, 7, g_ucTVChannelAutoScanCount);
g_bProgramFlash=FALSE;
}
else
{
Osd_SetTextColor(CP_WhiteColor,CP_GrayColor);
Osd_DrawStr(2,7, strProgramText[g_VideoSetting.Language]);
Osd_DrawNum(13, 7, g_ucTVChannelAutoScanCount);
g_bProgramFlash=TRUE;
}
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -