diff -Nurp vdr-2.4.6.orig/channels.c vdr-2.4.6/channels.c
--- vdr-2.4.6.orig/channels.c 2020-04-11 11:22:05.000000000 +0200
+++ vdr-2.4.6/channels.c 2021-01-01 12:35:10.946734352 +0100
@@ -1115,11 +1116,20 @@ cChannel *cChannels::NewChannel(const cC
#define CHANNELMARKOBSOLETE "OBSOLETE"
#define CHANNELTIMEOBSOLETE 3600 // seconds to wait before declaring a channel obsolete (in case it has actually been seen before)
-bool cChannels::MarkObsoleteChannels(int Source, int Nid, int Tid)
+bool cChannels::MarkObsoleteChannels(int Source, int Transponder, int StreamId, int Nid, int Tid)
{
bool ChannelsModified = false;
for (cChannel *Channel = First(); Channel; Channel = Next(Channel)) {
- if (time(NULL) - Channel->Seen() > CHANNELTIMEOBSOLETE && Channel->Source() == Source && Channel->Nid() == Nid && Channel->Tid() == Tid && Channel->Rid() == 0) {
+ if (Channel->Source() != Source)
+ continue;
+ bool obsolete = false;
+ if (Channel->Nid() == Nid && Channel->Tid() == Tid)
+ obsolete = time(NULL) - Channel->Seen() > CHANNELTIMEOBSOLETE && Channel->Rid() == 0; // obsolete Sid
+ else if (ISTRANSPONDER(Channel->Transponder(), Transponder)) {
+ cDvbTransponderParameters dtp(Channel->Parameters());
+ obsolete = dtp.StreamId() == StreamId; // obsolete Nid/Tid
+ }
+ if (obsolete) {
int OldShowChannelNamesWithSource = Setup.ShowChannelNamesWithSource;
Setup.ShowChannelNamesWithSource = 0;
if (!endswith(Channel->Name(), CHANNELMARKOBSOLETE))
diff -Nurp vdr-2.4.6.orig/channels.h vdr-2.4.6/channels.h
--- vdr-2.4.6.orig/channels.h 2020-06-10 16:00:36.000000000 +0200
+++ vdr-2.4.6/channels.h 2020-12-31 18:35:07.050191444 +0100
@@ -252,7 +252,7 @@ public:
///< and will be set to the current value of the list's internal state variable upon
///< return from this function.
cChannel *NewChannel(const cChannel *Transponder, const char *Name, const char *ShortName, const char *Provider, int Nid, int Tid, int Sid, int Rid = 0);
- bool MarkObsoleteChannels(int Source, int Nid, int Tid);
+ bool MarkObsoleteChannels(int Source, int Transponder, int Streamid, int Nid, int Tid);
};
// Provide lock controlled access to the list:
diff -Nurp vdr-2.4.6.orig/sdt.c vdr-2.4.6/sdt.c
--- vdr-2.4.6.orig/sdt.c 2020-06-16 16:50:07.000000000 +0200
+++ vdr-2.4.6/sdt.c 2020-12-31 18:40:31.853536210 +0100
@@ -12,6 +12,7 @@
#include "config.h"
#include "libsi/section.h"
#include "libsi/descriptor.h"
+#include "dvbdevice.h"
// Set to 'true' for debug output:
static bool DebugSdt = false;
@@ -205,9 +206,10 @@ void cSdtFilter::Process(u_short Pid, u_
}
if (sdt.getSectionNumber() == sdt.getLastSectionNumber()) {
if (Setup.UpdateChannels == 1 || Setup.UpdateChannels >= 3) {
- ChannelsModified |= Channels->MarkObsoleteChannels(source, sdt.getOriginalNetworkId(), sdt.getTransportStreamId());
+ cDvbTransponderParameters dtp(Channel()->Parameters());
+ ChannelsModified |= Channels->MarkObsoleteChannels(source, Transponder(), dtp.StreamId(), sdt.getOriginalNetworkId(), sdt.getTransportStreamId());
if (source != Source())
- ChannelsModified |= Channels->MarkObsoleteChannels(Source(), sdt.getOriginalNetworkId(), sdt.getTransportStreamId());
+ ChannelsModified |= Channels->MarkObsoleteChannels(Source(), Transponder(), dtp.StreamId(), sdt.getOriginalNetworkId(), sdt.getTransportStreamId());
}
}
StateKey.Remove(ChannelsModified);