From dc41eecffdbac79b1cfddadb335b7952caf8cecf Mon Sep 17 00:00:00 2001 From: Frank Schmirler Date: Wed, 16 Feb 2011 08:57:05 +0100 Subject: [PATCH] return value of streamdev-clients cDevice::NumProvidedSystems() now configurable in plugin setup (fixes #552) --- HISTORY | 3 +++ README | 34 +++++++++++++++++++++++++--------- client/device.c | 5 +++++ client/device.h | 2 +- client/po/de_DE.po | 4 +++- client/setup.c | 10 ++++++++++ client/setup.h | 3 +++ 7 files changed, 50 insertions(+), 11 deletions(-) diff --git a/HISTORY b/HISTORY index 99966e5..bdcad70 100644 --- a/HISTORY +++ b/HISTORY @@ -1,6 +1,9 @@ VDR Plugin 'streamdev' Revision History --------------------------------------- +- return value of streamdev-clients cDevice::NumProvidedSystems() now + configurable in plugin setup + 2011-02-11: Version 0.5.1 - updated copy of GetClippedNumProvidedSystems to the version used since diff --git a/README b/README index e1597f5..933e0d2 100644 --- a/README +++ b/README @@ -371,15 +371,31 @@ With "Filter Streaming" enabled, the client will receive meta information like EPG data and service information, just as if the client had its own DVB card. Link channels and even a client-side EPG scan have been reported to work. -Finally with the maximum and minimum priority, you can keep VDR from considering -streamdev in certain cases. If for instance you have a streamdev client with its -own DVB card, VDR would normally use streamdev for recording. If this is not -what you want, you could set the maximum priority to 0. As recordings usually -have a much higher priority (default 50), streamdev is now no longer used for -recordings. The two parameters define the inclusive range of priorities for -which streamdev will accept to tune. Setting the minimum priority to a higher -value than the maximum, you will get two ranges: "up to maximum" and "minimum -and above". +With maximum and minimum priority you can keep VDR from considering streamdev +in certain cases. If for instance you have a streamdev client with its own DVB +card, VDR might use streamdev for recording. If this is not what you want, you +could set the maximum priority to 0. As recordings usually have a much higher +priority (default 50), streamdev is now no longer used for recordings. The two +parameters define the inclusive range of priorities for which streamdev will +accept to tune. Setting the minimum priority to a higher value than the maximum, +you will get two ranges: "up to maximum" and "minimum and above". + +If you are running at least VDR 1.7.0, you can also configure the "Broadcast +Systems / Cost" of the streamdev-client device. On a pure streamdev-client only +system it doesn't matter what you configure here. But if your client is equipped +with a DVB card, you should read on. VDR always prefers the cheapest device +in terms of supported broadcast systems and modulations. A DVB-S2 card supports +two broadcast systems (DVB-S and DVB-S2). From VDR 1.7.15 on, the supported +modulations are counted as well (QPSK, QAM32/64/128/256, VSB8/16, TURBO_FEC). +So for a DVB-S2 card which does QPSK you'll get a total cost of three. A DVB-C +card (one broadcast system) which can do QAM32,QAM64,QAM128,QAM256 would give +you a total of five. Check your log for "frontend ... provides ... with ..." +messages to find out the cost of your DVB cards. Then pick a suitable value for +streamdev-client. With equal costs, VDR will usually prefer the DVB card and +take streamdev for recordings. If streamdev's costs are higher, live TV will +use your DVB card until a recordings kicks in. Then the recording will take the +DVB card and live TV will be shifted to streamdev (you'll notice a short +interruption of live TV). Note that streamdev-client acts similar to a DVB card. It is possible to receive multiple channels simultaneously, but only from the same transponder. Just add diff --git a/client/device.c b/client/device.c index fb80107..9e78f80 100644 --- a/client/device.c +++ b/client/device.c @@ -56,6 +56,11 @@ cStreamdevDevice::~cStreamdevDevice() { DELETENULL(m_TSBuffer); } +#if APIVERSNUM >= 10700 +int cStreamdevDevice::NumProvidedSystems(void) const +{ return StreamdevClientSetup.NumProvidedSystems; } +#endif + bool cStreamdevDevice::ProvidesSource(int Source) const { Dprintf("ProvidesSource, Source=%d\n", Source); return true; diff --git a/client/device.h b/client/device.h index b2eed70..5eb9e53 100644 --- a/client/device.h +++ b/client/device.h @@ -56,7 +56,7 @@ public: virtual bool ProvidesChannel(const cChannel *Channel, int Priority = -1, bool *NeedsDetachReceivers = NULL) const; #if APIVERSNUM >= 10700 - virtual int NumProvidedSystems(void) const { return 1; } + virtual int NumProvidedSystems(void) const; #endif virtual bool IsTunedToTransponder(const cChannel *Channel); diff --git a/client/po/de_DE.po b/client/po/de_DE.po index 1e481a2..d6db114 100644 --- a/client/po/de_DE.po +++ b/client/po/de_DE.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: streamdev 0.5.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-06-14 13:05+0200\n" +"POT-Creation-Date: 2011-02-16 08:49+0100\n" "PO-Revision-Date: 2008-03-30 02:11+0200\n" "Last-Translator: Frank Schmirler \n" "Language-Team: \n" @@ -48,3 +48,5 @@ msgstr "Minimale Priorit msgid "Maximum Priority" msgstr "Maximale Priorität" +msgid "Broadcast Systems / Cost" +msgstr "Empfangssysteme / Kosten" diff --git a/client/setup.c b/client/setup.c index dd337c8..907c294 100644 --- a/client/setup.c +++ b/client/setup.c @@ -16,6 +16,9 @@ cStreamdevClientSetup::cStreamdevClientSetup(void) { HideMenuEntry = false; MinPriority = -1; MaxPriority = MAXPRIORITY; +#if APIVERSNUM >= 10700 + NumProvidedSystems = 1; +#endif strcpy(RemoteIp, ""); } @@ -32,6 +35,7 @@ bool cStreamdevClientSetup::SetupParse(const char *Name, const char *Value) { else if (strcmp(Name, "HideMenuEntry") == 0) HideMenuEntry = atoi(Value); else if (strcmp(Name, "MinPriority") == 0) MinPriority = atoi(Value); else if (strcmp(Name, "MaxPriority") == 0) MaxPriority = atoi(Value); + else if (strcmp(Name, "NumProvidedSystems") == 0) NumProvidedSystems = atoi(Value); else return false; return true; } @@ -46,6 +50,11 @@ cStreamdevClientMenuSetupPage::cStreamdevClientMenuSetupPage(void) { Add(new cMenuEditBoolItem(tr("Filter Streaming"), &m_NewSetup.StreamFilters)); Add(new cMenuEditIntItem (tr("Minimum Priority"), &m_NewSetup.MinPriority, -1, MAXPRIORITY)); Add(new cMenuEditIntItem (tr("Maximum Priority"), &m_NewSetup.MaxPriority, -1, MAXPRIORITY)); +#if APIVERSNUM >= 10715 + Add(new cMenuEditIntItem (tr("Broadcast Systems / Cost"), &m_NewSetup.NumProvidedSystems, 1, 15)); +#elif APIVERSNUM >= 10700 + Add(new cMenuEditIntItem (tr("Broadcast Systems / Cost"), &m_NewSetup.NumProvidedSystems, 1, 4)); +#endif SetCurrent(Get(0)); } @@ -68,6 +77,7 @@ void cStreamdevClientMenuSetupPage::Store(void) { SetupStore("HideMenuEntry", m_NewSetup.HideMenuEntry); SetupStore("MinPriority", m_NewSetup.MinPriority); SetupStore("MaxPriority", m_NewSetup.MaxPriority); + SetupStore("NumProvidedSystems", m_NewSetup.NumProvidedSystems); StreamdevClientSetup = m_NewSetup; diff --git a/client/setup.h b/client/setup.h index 6049967..ba2b9d0 100644 --- a/client/setup.h +++ b/client/setup.h @@ -19,6 +19,9 @@ struct cStreamdevClientSetup { int HideMenuEntry; int MinPriority; int MaxPriority; +#if APIVERSNUM >= 10700 + int NumProvidedSystems; +#endif }; extern cStreamdevClientSetup StreamdevClientSetup;