1
0
mirror of https://github.com/VDR4Arch/vdr.git synced 2023-10-10 13:36:52 +02:00

Fixed processing transponder data in the NIT

This commit is contained in:
Klaus Schmidinger 2019-03-12 13:05:33 +01:00
parent 71461c6082
commit df8f5f4800
3 changed files with 15 additions and 7 deletions

View File

@ -3572,6 +3572,7 @@ Helmut Binder <cco@aon.at>
a previously used CAM that is MCD capable a previously used CAM that is MCD capable
for fixing accessing the actual frontend on multi frontend devices for fixing accessing the actual frontend on multi frontend devices
for fixing processing the last entry in the scan list of the EIT scanner for fixing processing the last entry in the scan list of the EIT scanner
for fixing processing transponder data in the NIT
Ulrich Eckhardt <uli@uli-eckhardt.de> Ulrich Eckhardt <uli@uli-eckhardt.de>
for reporting a problem with shutdown after user inactivity in case a plugin is for reporting a problem with shutdown after user inactivity in case a plugin is

View File

@ -9378,3 +9378,4 @@ Video Disk Recorder Revision History
- Fixed handling PATs that contain no PMTs. - Fixed handling PATs that contain no PMTs.
- Fixed processing the last entry in the scan list of the EIT scanner (thanks to - Fixed processing the last entry in the scan list of the EIT scanner (thanks to
Helmut Binder). Helmut Binder).
- Fixed processing transponder data in the NIT (thanks to Helmut Binder).

20
nit.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: nit.c 4.5 2018/03/18 10:52:21 kls Exp $ * $Id: nit.c 4.6 2019/03/12 13:01:33 kls Exp $
*/ */
#include "nit.h" #include "nit.h"
@ -125,7 +125,6 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
dtp.SetStreamId(dtpc.StreamId()); dtp.SetStreamId(dtpc.StreamId());
// //
int transponder = Channel->Transponder(); int transponder = Channel->Transponder();
found = true;
if (!ISTRANSPONDER(cChannel::Transponder(Frequency, dtp.Polarization()), transponder)) { if (!ISTRANSPONDER(cChannel::Transponder(Frequency, dtp.Polarization()), transponder)) {
for (int n = 0; n < NumFrequencies; n++) { for (int n = 0; n < NumFrequencies; n++) {
if (ISTRANSPONDER(cChannel::Transponder(Frequencies[n], dtp.Polarization()), transponder)) { if (ISTRANSPONDER(cChannel::Transponder(Frequencies[n], dtp.Polarization()), transponder)) {
@ -134,7 +133,10 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
} }
} }
} }
if (ISTRANSPONDER(cChannel::Transponder(Frequency, dtp.Polarization()), Transponder())) // only modify channels if we're actually receiving this transponder if (!ISTRANSPONDER(cChannel::Transponder(Frequency, dtp.Polarization()), transponder))
continue; // a channel with obsolete/wrong/other(?) transponder
found = true;
if (ISTRANSPONDER(transponder, Transponder())) // only modify channels if we're actually receiving this transponder
ChannelsModified |= Channel->SetTransponderData(Source, Frequency, SymbolRate, dtp.ToString('S')); ChannelsModified |= Channel->SetTransponderData(Source, Frequency, SymbolRate, dtp.ToString('S'));
else if (Channel->Srate() != SymbolRate || strcmp(Channel->Parameters(), dtp.ToString('S'))) else if (Channel->Srate() != SymbolRate || strcmp(Channel->Parameters(), dtp.ToString('S')))
forceTransponderUpdate = true; // get us receiving this transponder forceTransponderUpdate = true; // get us receiving this transponder
@ -188,7 +190,6 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
for (cChannel *Channel = Channels->First(); Channel; Channel = Channels->Next(Channel)) { for (cChannel *Channel = Channels->First(); Channel; Channel = Channels->Next(Channel)) {
if (!Channel->GroupSep() && Channel->Source() == Source && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) { if (!Channel->GroupSep() && Channel->Source() == Source && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) {
int transponder = Channel->Transponder(); int transponder = Channel->Transponder();
found = true;
if (!ISTRANSPONDER(Frequency / 1000, transponder)) { if (!ISTRANSPONDER(Frequency / 1000, transponder)) {
for (int n = 0; n < NumFrequencies; n++) { for (int n = 0; n < NumFrequencies; n++) {
if (ISTRANSPONDER(Frequencies[n] / 1000, transponder)) { if (ISTRANSPONDER(Frequencies[n] / 1000, transponder)) {
@ -197,7 +198,10 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
} }
} }
} }
if (ISTRANSPONDER(Frequency / 1000, Transponder())) // only modify channels if we're actually receiving this transponder if (!ISTRANSPONDER(Frequency / 1000000, transponder))
continue; // a channel with obsolete/wrong/other(?) transponder
found = true;
if (ISTRANSPONDER(transponder, Transponder())) // only modify channels if we're actually receiving this transponder
ChannelsModified |= Channel->SetTransponderData(Source, Frequency, SymbolRate, dtp.ToString('C')); ChannelsModified |= Channel->SetTransponderData(Source, Frequency, SymbolRate, dtp.ToString('C'));
else if (Channel->Srate() != SymbolRate || strcmp(Channel->Parameters(), dtp.ToString('C'))) else if (Channel->Srate() != SymbolRate || strcmp(Channel->Parameters(), dtp.ToString('C')))
forceTransponderUpdate = true; // get us receiving this transponder forceTransponderUpdate = true; // get us receiving this transponder
@ -254,7 +258,6 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
dtp.SetTransmission(dtpc.Transmission()); dtp.SetTransmission(dtpc.Transmission());
// //
int transponder = Channel->Transponder(); int transponder = Channel->Transponder();
found = true;
if (!ISTRANSPONDER(Frequency / 1000000, transponder)) { if (!ISTRANSPONDER(Frequency / 1000000, transponder)) {
for (int n = 0; n < NumFrequencies; n++) { for (int n = 0; n < NumFrequencies; n++) {
if (ISTRANSPONDER(Frequencies[n] / 1000000, transponder)) { if (ISTRANSPONDER(Frequencies[n] / 1000000, transponder)) {
@ -263,7 +266,10 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
} }
} }
} }
if (ISTRANSPONDER(Frequency / 1000000, Transponder())) // only modify channels if we're actually receiving this transponder if (!ISTRANSPONDER(Frequency / 1000000, transponder))
continue; // a channel with obsolete/wrong/other(?) transponder
found = true;
if (ISTRANSPONDER(transponder, Transponder())) // only modify channels if we're actually receiving this transponder
ChannelsModified |= Channel->SetTransponderData(Source, Frequency, 0, dtp.ToString('T')); ChannelsModified |= Channel->SetTransponderData(Source, Frequency, 0, dtp.ToString('T'));
else if (strcmp(Channel->Parameters(), dtp.ToString('T'))) else if (strcmp(Channel->Parameters(), dtp.ToString('T')))
forceTransponderUpdate = true; // get us receiving this transponder forceTransponderUpdate = true; // get us receiving this transponder