summaryrefslogtreecommitdiff
path: root/nit.c
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2019-05-31 13:25:00 +0200
committerKlaus Schmidinger <vdr@tvdr.de>2019-05-31 13:25:00 +0200
commit2b39c192a6b8bb3ded040f2a3d17d4ebf7a0bf3f (patch)
tree94af3fa417d3e21c51769e262c2bf10e820d12f4 /nit.c
parent0873d146141bb86a24f2e9806b73362f49bc7d52 (diff)
downloadvdr-2b39c192a6b8bb3ded040f2a3d17d4ebf7a0bf3f.tar.gz
vdr-2b39c192a6b8bb3ded040f2a3d17d4ebf7a0bf3f.tar.bz2
Fixed handling the S2SatelliteDeliverySystemDescriptor for transponders broadcasting in "backwards compatibility mode" according to ETSI EN 300 468
Diffstat (limited to 'nit.c')
-rw-r--r--nit.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/nit.c b/nit.c
index 41d135a0..785aba52 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.8 2019/03/18 10:29:09 kls Exp $
+ * $Id: nit.c 4.9 2019/05/31 13:25:00 kls Exp $
*/
#include "nit.h"
@@ -97,6 +97,15 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
}
delete fld;
+ // Necessary for "backwards compatibility mode" according to ETSI EN 300 468:
+ bool ForceDVBS2 = false;
+ for (SI::Loop::Iterator it2; (d = ts.transportStreamDescriptors.getNext(it2)); ) {
+ if (d->getDescriptorTag() == SI::S2SatelliteDeliverySystemDescriptorTag) {
+ ForceDVBS2 = true;
+ break;
+ }
+ }
+
for (SI::Loop::Iterator it2; (d = ts.transportStreamDescriptors.getNext(it2)); ) {
switch (d->getDescriptorTag()) {
case SI::SatelliteDeliverySystemDescriptorTag: {
@@ -110,11 +119,12 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
dtp.SetCoderateH(CodeRates[sd->getFecInner()]);
static int Modulations[] = { QAM_AUTO, QPSK, PSK_8, QAM_16 };
dtp.SetModulation(Modulations[sd->getModulationType()]);
- dtp.SetSystem(sd->getModulationSystem() ? DVB_SYSTEM_2 : DVB_SYSTEM_1);
+ bool System = sd->getModulationSystem() || ForceDVBS2;
+ dtp.SetSystem(System ? DVB_SYSTEM_2 : DVB_SYSTEM_1);
static int RollOffs[] = { ROLLOFF_35, ROLLOFF_25, ROLLOFF_20, ROLLOFF_AUTO };
- dtp.SetRollOff(sd->getModulationSystem() ? RollOffs[sd->getRollOff()] : ROLLOFF_AUTO);
+ dtp.SetRollOff(System ? RollOffs[sd->getRollOff()] : ROLLOFF_AUTO);
int SymbolRate = BCD2INT(sd->getSymbolRate()) / 10;
- dbgnit(" %s %d %c %d %d\n", *cSource::ToString(Source), Frequency, dtp.Polarization(), SymbolRate, cChannel::Transponder(Frequency, dtp.Polarization()));
+ dbgnit(" %s %d %c %d %d DVB-S%d\n", *cSource::ToString(Source), Frequency, dtp.Polarization(), SymbolRate, cChannel::Transponder(Frequency, dtp.Polarization()), System ? 2 : 1);
if (Setup.UpdateChannels >= 5) {
bool found = false;
bool forceTransponderUpdate = false;