diff --git a/HISTORY b/HISTORY index 377fd306..9bd9fb45 100644 --- a/HISTORY +++ b/HISTORY @@ -2546,3 +2546,7 @@ Video Disk Recorder Revision History Lauri Tischler for reporting this one). - Fixed a warning about character comparison in libsi/si.c (thanks to Lauri Tischler for reporting this one). +- The new parameter "Update channels" in the "Setup/DVB" menu can be used to + control if and how channels will be automatically updated (see MANUAL). + This has already been part of the 'autopid' patch by Andreas Schultz and has + now been adopted. diff --git a/MANUAL b/MANUAL index 8687e704..9b08914e 100644 --- a/MANUAL +++ b/MANUAL @@ -498,6 +498,11 @@ Version 1.2 Video format = 4:3 The video format (or aspect ratio) of the tv set in use (4:3 or 16:9). + Update channels = 3 Controls the automatic channel update function. '0' means + no update, '1' will only update channel names, '2' will + update channel names and PIDs, and '3' will perform all + updates and also add newly found channels. + LNB: SLOF = 11700 The switching frequency (in MHz) between low and diff --git a/config.c b/config.c index d3f2db7d..12172900 100644 --- a/config.c +++ b/config.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: config.c 1.117 2003/10/17 14:11:27 kls Exp $ + * $Id: config.c 1.118 2004/01/05 11:45:40 kls Exp $ */ #include "config.h" @@ -272,6 +272,7 @@ cSetup::cSetup(void) UseSubtitle = 1; RecordingDirs = 1; VideoFormat = 0; + UpdateChannels = 3; RecordDolbyDigital = 1; ChannelInfoPos = 0; OSDwidth = 52; @@ -424,6 +425,7 @@ bool cSetup::Parse(const char *Name, const char *Value) else if (!strcasecmp(Name, "UseSubtitle")) UseSubtitle = atoi(Value); else if (!strcasecmp(Name, "RecordingDirs")) RecordingDirs = atoi(Value); else if (!strcasecmp(Name, "VideoFormat")) VideoFormat = atoi(Value); + else if (!strcasecmp(Name, "UpdateChannels")) UpdateChannels = atoi(Value); else if (!strcasecmp(Name, "RecordDolbyDigital")) RecordDolbyDigital = atoi(Value); else if (!strcasecmp(Name, "ChannelInfoPos")) ChannelInfoPos = atoi(Value); else if (!strcasecmp(Name, "OSDwidth")) OSDwidth = atoi(Value); @@ -474,6 +476,7 @@ bool cSetup::Save(void) Store("UseSubtitle", UseSubtitle); Store("RecordingDirs", RecordingDirs); Store("VideoFormat", VideoFormat); + Store("UpdateChannels", UpdateChannels); Store("RecordDolbyDigital", RecordDolbyDigital); Store("ChannelInfoPos", ChannelInfoPos); Store("OSDwidth", OSDwidth); diff --git a/config.h b/config.h index 4d27349b..db4769cd 100644 --- a/config.h +++ b/config.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: config.h 1.180 2004/01/05 10:05:57 kls Exp $ + * $Id: config.h 1.181 2004/01/05 11:31:54 kls Exp $ */ #ifndef __CONFIG_H @@ -227,6 +227,7 @@ public: int UseSubtitle; int RecordingDirs; int VideoFormat; + int UpdateChannels; int RecordDolbyDigital; int ChannelInfoPos; int OSDwidth, OSDheight; diff --git a/i18n.c b/i18n.c index a2230217..3b6c0bcf 100644 --- a/i18n.c +++ b/i18n.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: i18n.c 1.137 2003/12/13 11:09:17 kls Exp $ + * $Id: i18n.c 1.138 2004/01/05 11:56:24 kls Exp $ * * Translations provided by: * @@ -2261,6 +2261,74 @@ const tI18nPhrase Phrases[] = { "Video formátum", "Format del vídeo", }, + { "Setup.DVB$Update channels", + "Kanäle aktualisieren", + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + }, + { "names only", + "nur Namen", + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + }, + { "names and PIDs", + "Namen und PIDs", + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + }, + { "add new channels", + "neue Kanäle hinzufügen", + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + }, { "Setup.LNB$SLOF (MHz)", "SLOF (MHz)", "Frekvenca preklopa (MHz)", diff --git a/menu.c b/menu.c index 5e628bbb..6e2c17be 100644 --- a/menu.c +++ b/menu.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.c 1.276 2004/01/04 11:12:43 kls Exp $ + * $Id: menu.c 1.277 2004/01/05 11:51:33 kls Exp $ */ #include "menu.h" @@ -2045,6 +2045,8 @@ cMenuSetupEPG::cMenuSetupEPG(void) // --- cMenuSetupDVB --------------------------------------------------------- class cMenuSetupDVB : public cMenuSetupBase { +private: + const char *updateChannelsTexts[4]; public: cMenuSetupDVB(void); virtual eOSState ProcessKey(eKeys Key); @@ -2052,9 +2054,15 @@ public: cMenuSetupDVB::cMenuSetupDVB(void) { + updateChannelsTexts[0] = tr("no"); + updateChannelsTexts[1] = tr("names only"); + updateChannelsTexts[2] = tr("names and PIDs"); + updateChannelsTexts[3] = tr("add new channels"); + SetSection(tr("DVB")); Add(new cMenuEditIntItem( tr("Setup.DVB$Primary DVB interface"), &data.PrimaryDVB, 1, cDevice::NumDevices())); Add(new cMenuEditBoolItem(tr("Setup.DVB$Video format"), &data.VideoFormat, "4:3", "16:9")); + Add(new cMenuEditStraItem(tr("Setup.DVB$Update channels"), &data.UpdateChannels, 4, updateChannelsTexts)); } eOSState cMenuSetupDVB::ProcessKey(eKeys Key) diff --git a/pat.c b/pat.c index 3fa6848c..312e2f15 100644 --- a/pat.c +++ b/pat.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: pat.c 1.3 2004/01/04 12:27:06 kls Exp $ + * $Id: pat.c 1.4 2004/01/05 11:42:30 kls Exp $ */ #include "pat.h" @@ -368,9 +368,11 @@ void cPatFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length delete d; } } - Channel->SetPids(Vpid, Ppid, Apids[0], Apids[1], Dpids[0], Dpids[1], Tpid); - Channel->SetCaIds(CaDescriptors->CaIds()); - Channel->SetCaDescriptors(CaDescriptorHandler.AddCaDescriptors(CaDescriptors)); + if (Setup.UpdateChannels >= 2) { + Channel->SetPids(Vpid, Ppid, Apids[0], Apids[1], Dpids[0], Dpids[1], Tpid); + Channel->SetCaIds(CaDescriptors->CaIds()); + Channel->SetCaDescriptors(CaDescriptorHandler.AddCaDescriptors(CaDescriptors)); + } } lastPmtScan = 0; // this triggers the next scan Channels.Unlock(); diff --git a/sdt.c b/sdt.c index a4e91b80..9ede48dd 100644 --- a/sdt.c +++ b/sdt.c @@ -4,11 +4,12 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: sdt.c 1.1 2004/01/04 11:54:42 kls Exp $ + * $Id: sdt.c 1.2 2004/01/05 11:40:24 kls Exp $ */ #include "sdt.h" #include "channels.h" +#include "config.h" #include "libsi/section.h" #include "libsi/descriptor.h" @@ -80,14 +81,15 @@ cSDT::cSDT(int Source, int Transponder, uchar &lastSdtVersion, cPatFilter *PatFi } if (Channel) { Channel->SetId(getOriginalNetworkId(), getTransportStreamId(), SiSdtService.getServiceId()); - Channel->SetName(pn); + if (Setup.UpdateChannels >= 1) + Channel->SetName(pn); // Using SiSdtService.getFreeCaMode() is no good, because some // tv stations set this flag even for non-encrypted channels :-( // The special value 0xFFFF was supposed to mean "unknown encryption" // and would have been overwritten with real CA values later: // Channel->SetCa(SiSdtService.getFreeCaMode() ? 0xFFFF : 0); } - else if (*pn) { + else if (*pn && Setup.UpdateChannels >= 3) { Channel = Channels.NewChannel(Source, Transponder, pn, getOriginalNetworkId(), getTransportStreamId(), SiSdtService.getServiceId()); PatFilter->Trigger(); }