From 3a2936a1408293361065d72c5f5cd491d9a7a60b Mon Sep 17 00:00:00 2001 From: Frank Schmirler Date: Tue, 1 Feb 2011 14:24:47 +0100 Subject: [PATCH] updated copy of GetClippedNumProvidedSystems to the version used since VDR 1.7.15 --- CONTRIBUTORS | 1 + HISTORY | 6 ++++-- server/connection.c | 4 ++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index a44d75c..5ff638f 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -152,6 +152,7 @@ Eric Valette carel for reporting "plugin doesn't honor APIVERSION" error in new Makefile for helping to find a way to cleanly shutdown externremux with mencoder + for reporting that GetClippedNumProvidedSystems is no longer up-to-date wolfi.m for reporting a typo in externremux quality parameter value diff --git a/HISTORY b/HISTORY index c3c0a84..81a2d6e 100644 --- a/HISTORY +++ b/HISTORY @@ -1,13 +1,15 @@ VDR Plugin 'streamdev' Revision History --------------------------------------- +- updated copy of GetClippedNumProvidedSystems to the version used since + VDR 1.7.15 (reported by carel@vdrportal) - fixed the code deciding if a device is in use for live TV or not. It did - not work as expected for FF cards (reported by wtor) + not work as expected for FF cards (reported by wtor@vdrportal) - increased client side timeout for TUNE command - more dsyslog messages to help troubleshouting channel switch issues - improved the channel switch code trying to move live TV to different card - make sure that a client doesn't interrupt replaying on server's FF card - (reported by wtor) + (reported by wtor@vdrportal) - switching away live TV failed even when "always suspended" (reported by Michal Novotny) - fixed regression: no receiver created for ES/PS/PES (reported by Gavin diff --git a/server/connection.c b/server/connection.c index 824ba97..78a023a 100644 --- a/server/connection.c +++ b/server/connection.c @@ -189,7 +189,7 @@ bool cServerConnection::Respond(const char *Message, bool Last, ...) #if APIVERSNUM >= 10700 static int GetClippedNumProvidedSystems(int AvailableBits, cDevice *Device) { - int MaxNumProvidedSystems = 1 << AvailableBits; + int MaxNumProvidedSystems = (1 << AvailableBits) - 1; int NumProvidedSystems = Device->NumProvidedSystems(); if (NumProvidedSystems > MaxNumProvidedSystems) { esyslog("ERROR: device %d supports %d modulation systems but cDevice::GetDevice() currently only supports %d delivery systems which should be fixed", Device->CardIndex() + 1, NumProvidedSystems, MaxNumProvidedSystems); @@ -261,7 +261,7 @@ cDevice* cServerConnection::CheckDevice(const cChannel *Channel, int Priority, b imp <<= 1; imp |= !device->Receiving() && (device != cTransferControl::ReceiverDevice() || device->IsPrimaryDevice()) || ndr; // use receiving devices if we don't need to detach existing receivers, but avoid primary device in local transfer mode imp <<= 1; imp |= device->Receiving(); // avoid devices that are receiving #if APIVERSNUM >= 10700 - imp <<= 2; imp |= GetClippedNumProvidedSystems(2, device) - 1; // avoid cards which support multiple delivery systems + imp <<= 4; imp |= GetClippedNumProvidedSystems(4, device) - 1; // avoid cards which support multiple delivery systems #endif imp <<= 1; imp |= device == cTransferControl::ReceiverDevice(); // avoid the Transfer Mode receiver device imp <<= 8; imp |= min(max(device->Priority() + MAXPRIORITY, 0), 0xFF); // use the device with the lowest priority (+MAXPRIORITY to assure that values -99..99 can be used)