From a1663a36125cd7b73162104aecd619653c625cc5 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sat, 21 Jul 2007 15:05:20 +0200 Subject: [PATCH] Fixed detection of Premiere NVOD channel links --- HISTORY | 1 + channels.c | 13 ++++++++++++- channels.h | 3 ++- eit.c | 7 +++++-- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/HISTORY b/HISTORY index 6b933e80..a7139801 100644 --- a/HISTORY +++ b/HISTORY @@ -5293,3 +5293,4 @@ Video Disk Recorder Revision History - Made skipspace() an inline function (suggested by Tobias Bratfisch) and changed it to handle the most common case of 'no leading space' very fast, and avoid calling isspace(), which made the whole function a lot faster. +- Fixed detection of Premiere NVOD channel links (thanks to anonymous). diff --git a/channels.c b/channels.c index 67cf3c9d..d725ac76 100644 --- a/channels.c +++ b/channels.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: channels.c 1.53 2006/05/28 15:03:40 kls Exp $ + * $Id: channels.c 1.54 2007/07/21 14:55:01 kls Exp $ */ #include "channels.h" @@ -1007,6 +1007,17 @@ cChannel *cChannels::GetByChannelID(tChannelID ChannelID, bool TryWithoutRid, bo } return NULL; } +cChannel *cChannels::GetByTransponderID(tChannelID ChannelID) +{ + int source = ChannelID.Source(); + int nid = ChannelID.Nid(); + int tid = ChannelID.Tid(); + for (cChannel *channel = First(); channel; channel = Next(channel)) { + if (channel->Tid() == tid && channel->Nid() == nid && channel->Source() == source) + return channel; + } + return NULL; +} bool cChannels::HasUniqueChannelID(cChannel *NewChannel, cChannel *OldChannel) { diff --git a/channels.h b/channels.h index e34cb0ef..6381a201 100644 --- a/channels.h +++ b/channels.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: channels.h 1.43 2007/01/07 14:37:35 kls Exp $ + * $Id: channels.h 1.44 2007/07/21 14:58:36 kls Exp $ */ #ifndef __CHANNELS_H @@ -239,6 +239,7 @@ public: cChannel *GetByNumber(int Number, int SkipGap = 0); cChannel *GetByServiceID(int Source, int Transponder, unsigned short ServiceID); cChannel *GetByChannelID(tChannelID ChannelID, bool TryWithoutRid = false, bool TryWithoutPolarization = false); + cChannel *GetByTransponderID(tChannelID ChannelID); int BeingEdited(void) { return beingEdited; } void IncBeingEdited(void) { beingEdited++; } void DecBeingEdited(void) { beingEdited--; } diff --git a/eit.c b/eit.c index e1e47f48..cc2d0863 100644 --- a/eit.c +++ b/eit.c @@ -8,7 +8,7 @@ * Robert Schneider and Rolf Hakenes . * Adapted to 'libsi' for VDR 1.3.0 by Marcel Wiesweg . * - * $Id: eit.c 1.123 2007/06/10 12:51:05 kls Exp $ + * $Id: eit.c 1.124 2007/07/21 14:58:04 kls Exp $ */ #include "eit.h" @@ -197,7 +197,10 @@ cEIT::cEIT(cSchedules *Schedules, int Source, u_char Tid, const u_char *Data, bo link->SetName(linkName, "", ""); } else if (Setup.UpdateChannels >= 4) { - link = Channels.NewChannel(channel, linkName, "", "", ld->getOriginalNetworkId(), ld->getTransportStreamId(), ld->getServiceId()); + cChannel *transponder = channel; + if (channel->Tid() != ld->getTransportStreamId()) + channel = Channels.GetByTransponderID(linkID); + link = Channels.NewChannel(transponder, linkName, "", "", ld->getOriginalNetworkId(), ld->getTransportStreamId(), ld->getServiceId()); //XXX patFilter->Trigger(); } if (link) {