From e1acb774c63fbd22487b6b36eb558348774951c2 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Wed, 4 Feb 2015 09:18:30 +0100 Subject: [PATCH] Added "NORDIG" to the list of "DVB/Standard compliance" options and using it to restrict the LCN (Logical Channel Numbers) parsing to networks that actually use this non-standard feature --- HISTORY | 5 ++++- MANUAL | 1 + config.h | 3 ++- menu.c | 7 ++++--- nit.c | 60 +++++++++++++++++++++++++++++--------------------------- 5 files changed, 42 insertions(+), 34 deletions(-) diff --git a/HISTORY b/HISTORY index 7ce73ece..03373e67 100644 --- a/HISTORY +++ b/HISTORY @@ -8453,7 +8453,7 @@ Video Disk Recorder Revision History - Added support for LCN (Logical Channel Numbers), which plugins may use to sort channels (thanks to Rolf Ahrenberg). -2015-02-03: Version 2.1.9 +2015-02-04: Version 2.1.9 - Fixed a memory leak in case of broken Extended Event Descriptors (thanks to Lars Hanisch). @@ -8484,3 +8484,6 @@ Video Disk Recorder Revision History Schedule menus for different channels (reported by Matthias Senzel). - Fixed setting the Blue button in the Schedule/Now/Next menus, so that it only shows "Switch" if the selected event is on a different channel. +- Added "NORDIG" to the list of "DVB/Standard compliance" options and using it to + restrict the LCN (Logical Channel Numbers) parsing to networks that actually use + this non-standard feature (thanks to Rolf Ahrenberg). diff --git a/MANUAL b/MANUAL index ea4fd191..b2c0f1eb 100644 --- a/MANUAL +++ b/MANUAL @@ -743,6 +743,7 @@ Version 2.0 Defines the standard compliance mode: 0 = DVB 1 = ANSI/SCTE + 2 = NORDIG Video format = 4:3 The video format (or aspect ratio) of the tv set in use (4:3 or 16:9). Applies only to SD output devices. diff --git a/config.h b/config.h index 97a0088c..c6c45dcd 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 3.15 2015/02/02 12:21:13 kls Exp $ + * $Id: config.h 3.16 2015/02/04 09:13:54 kls Exp $ */ #ifndef __CONFIG_H @@ -65,6 +65,7 @@ #define STANDARD_DVB 0 #define STANDARD_ANSISCTE 1 +#define STANDARD_NORDIG 2 typedef uint32_t in_addr_t; //XXX from /usr/include/netinet/in.h (apparently this is not defined on systems with glibc < 2.2) diff --git a/menu.c b/menu.c index d01ce0c2..9c94152c 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 3.38 2015/02/03 11:51:29 kls Exp $ + * $Id: menu.c 3.39 2015/02/04 09:13:54 kls Exp $ */ #include "menu.h" @@ -3202,7 +3202,7 @@ private: void Setup(void); const char *videoDisplayFormatTexts[3]; const char *updateChannelsTexts[6]; - const char *standardComplianceTexts[2]; + const char *standardComplianceTexts[3]; public: cMenuSetupDVB(void); virtual eOSState ProcessKey(eKeys Key); @@ -3228,6 +3228,7 @@ cMenuSetupDVB::cMenuSetupDVB(void) updateChannelsTexts[5] = tr("add new transponders"); standardComplianceTexts[0] = "DVB"; standardComplianceTexts[1] = "ANSI/SCTE"; + standardComplianceTexts[2] = "NORDIG"; SetSection(tr("DVB")); SetHelp(NULL, tr("Button$Audio"), tr("Button$Subtitles"), NULL); @@ -3241,7 +3242,7 @@ void cMenuSetupDVB::Setup(void) Clear(); Add(new cMenuEditIntItem( tr("Setup.DVB$Primary DVB interface"), &data.PrimaryDVB, 1, cDevice::NumDevices())); - Add(new cMenuEditStraItem(tr("Setup.DVB$Standard compliance"), &data.StandardCompliance, 2, standardComplianceTexts)); + Add(new cMenuEditStraItem(tr("Setup.DVB$Standard compliance"), &data.StandardCompliance, 3, standardComplianceTexts)); Add(new cMenuEditBoolItem(tr("Setup.DVB$Video format"), &data.VideoFormat, "4:3", "16:9")); if (data.VideoFormat == 0) Add(new cMenuEditStraItem(tr("Setup.DVB$Video display format"), &data.VideoDisplayFormat, 3, videoDisplayFormatTexts)); diff --git a/nit.c b/nit.c index d9ec1f8f..13183755 100644 --- a/nit.c +++ b/nit.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: nit.c 3.4 2015/02/01 13:46:00 kls Exp $ + * $Id: nit.c 3.5 2015/02/04 09:13:54 kls Exp $ */ #include "nit.h" @@ -357,39 +357,41 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length } } break; - case SI::LogicalChannelDescriptorTag: { - SI::LogicalChannelDescriptor *lcd = (SI::LogicalChannelDescriptor *)d; - SI::LogicalChannelDescriptor::LogicalChannel LogicalChannel; - for (SI::Loop::Iterator it4; lcd->logicalChannelLoop.getNext(LogicalChannel, it4); ) { - int lcn = LogicalChannel.getLogicalChannelNumber(); - int sid = LogicalChannel.getServiceId(); - if (LogicalChannel.getVisibleServiceFlag()) { - for (cChannel *Channel = Channels.First(); Channel; Channel = Channels.Next(Channel)) { - if (!Channel->GroupSep() && Channel->Sid() == sid && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) { - Channel->SetLcn(lcn); - break; + case SI::LogicalChannelDescriptorTag: + if (Setup.StandardCompliance == STANDARD_NORDIG) { + SI::LogicalChannelDescriptor *lcd = (SI::LogicalChannelDescriptor *)d; + SI::LogicalChannelDescriptor::LogicalChannel LogicalChannel; + for (SI::Loop::Iterator it4; lcd->logicalChannelLoop.getNext(LogicalChannel, it4); ) { + int lcn = LogicalChannel.getLogicalChannelNumber(); + int sid = LogicalChannel.getServiceId(); + if (LogicalChannel.getVisibleServiceFlag()) { + for (cChannel *Channel = Channels.First(); Channel; Channel = Channels.Next(Channel)) { + if (!Channel->GroupSep() && Channel->Sid() == sid && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) { + Channel->SetLcn(lcn); + break; + } } - } + } } - } - } + } break; - case SI::HdSimulcastLogicalChannelDescriptorTag: { - SI::HdSimulcastLogicalChannelDescriptor *lcd = (SI::HdSimulcastLogicalChannelDescriptor *)d; - SI::HdSimulcastLogicalChannelDescriptor::HdSimulcastLogicalChannel HdSimulcastLogicalChannel; - for (SI::Loop::Iterator it4; lcd->hdSimulcastLogicalChannelLoop.getNext(HdSimulcastLogicalChannel, it4); ) { - int lcn = HdSimulcastLogicalChannel.getLogicalChannelNumber(); - int sid = HdSimulcastLogicalChannel.getServiceId(); - if (HdSimulcastLogicalChannel.getVisibleServiceFlag()) { - for (cChannel *Channel = Channels.First(); Channel; Channel = Channels.Next(Channel)) { - if (!Channel->GroupSep() && Channel->Sid() == sid && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) { - Channel->SetLcn(lcn); - break; + case SI::HdSimulcastLogicalChannelDescriptorTag: + if (Setup.StandardCompliance == STANDARD_NORDIG) { + SI::HdSimulcastLogicalChannelDescriptor *lcd = (SI::HdSimulcastLogicalChannelDescriptor *)d; + SI::HdSimulcastLogicalChannelDescriptor::HdSimulcastLogicalChannel HdSimulcastLogicalChannel; + for (SI::Loop::Iterator it4; lcd->hdSimulcastLogicalChannelLoop.getNext(HdSimulcastLogicalChannel, it4); ) { + int lcn = HdSimulcastLogicalChannel.getLogicalChannelNumber(); + int sid = HdSimulcastLogicalChannel.getServiceId(); + if (HdSimulcastLogicalChannel.getVisibleServiceFlag()) { + for (cChannel *Channel = Channels.First(); Channel; Channel = Channels.Next(Channel)) { + if (!Channel->GroupSep() && Channel->Sid() == sid && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) { + Channel->SetLcn(lcn); + break; + } } - } + } } - } - } + } break; default: ; }