diff --git a/HISTORY b/HISTORY index b765553c..ad48f22a 100644 --- a/HISTORY +++ b/HISTORY @@ -9162,7 +9162,7 @@ Video Disk Recorder Revision History a subdirectory. - SVDRP peering can now be limited to the default SVDRP host (see MANUAL for details). -2018-03-17: Version 2.3.9 +2018-03-18: Version 2.3.9 - Updated the Italian OSD texts (thanks to Diego Pierotto). - Updated the Finnish OSD texts (thanks to Rolf Ahrenberg). @@ -9311,3 +9311,6 @@ Video Disk Recorder Revision History marks that are not generated by VDR itself, and thus may be a little off (suggested by Jörg Wendel). You can activate this line again for debugging if necessary. - Made the input buffer in cSVDRPClient dynamic. +- Fixed handling parameters in the S2SatelliteDeliverySystemDescriptor and + T2DeliverySystemDescriptor that were overwritten when parsing the + SatelliteDeliverySystemDescriptor or TerrestrialDeliverySystemDescriptor, respectively. diff --git a/nit.c b/nit.c index 874367f3..299a4066 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 4.4 2016/12/23 14:16:59 kls Exp $ + * $Id: nit.c 4.5 2018/03/18 10:52:21 kls Exp $ */ #include "nit.h" @@ -120,6 +120,10 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length bool forceTransponderUpdate = false; for (cChannel *Channel = Channels->First(); Channel; Channel = Channels->Next(Channel)) { if (!Channel->GroupSep() && Channel->Source() == Source && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) { + // Preserve parameters set separately in S2SatelliteDeliverySystemDescriptor: + cDvbTransponderParameters dtpc(Channel->Parameters()); + dtp.SetStreamId(dtpc.StreamId()); + // int transponder = Channel->Transponder(); found = true; if (!ISTRANSPONDER(cChannel::Transponder(Frequency, dtp.Polarization()), transponder)) { @@ -157,8 +161,8 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length if (!Channel->GroupSep() && cSource::IsSat(Channel->Source()) && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) { SI::S2SatelliteDeliverySystemDescriptor *sd = (SI::S2SatelliteDeliverySystemDescriptor *)d; cDvbTransponderParameters dtp(Channel->Parameters()); - dtp.SetSystem(DVB_SYSTEM_2); dtp.SetStreamId(sd->getInputStreamIdentifier()); + dbgnit(" stream id = %d\n", dtp.StreamId()); ChannelsModified |= Channel->SetTransponderData(Channel->Source(), Channel->Frequency(), Channel->Srate(), dtp.ToString('S')); break; } @@ -239,6 +243,16 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length bool forceTransponderUpdate = false; for (cChannel *Channel = Channels->First(); Channel; Channel = Channels->Next(Channel)) { if (!Channel->GroupSep() && Channel->Source() == Source && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) { + // Preserve parameters set separately in T2DeliverySystemDescripto: + cDvbTransponderParameters dtpc(Channel->Parameters()); + dtp.SetSystem(dtpc.System()); + dtp.SetStreamId(dtpc.StreamId()); + dtp.SetT2SystemId(dtp.T2SystemId()); + dtp.SetSisoMiso(dtpc.SisoMiso()); + dtp.SetBandwidth(dtpc.Bandwidth()); + dtp.SetGuard(dtpc.Guard()); + dtp.SetTransmission(dtpc.Transmission()); + // int transponder = Channel->Transponder(); found = true; if (!ISTRANSPONDER(Frequency / 1000000, transponder)) { @@ -295,6 +309,7 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length dtp.SetTransmission(T2TransmissionModes[td->getTransmissionMode()]); //TODO add parsing of frequencies } + dbgnit(" stream id = %d\n", dtp.StreamId()); ChannelsModified |= Channel->SetTransponderData(Source, Frequency, SymbolRate, dtp.ToString('T')); } }