ich sollte wohl testing mal füttern mit vdr-1.7.17
in testing sind wohl ältere patches als in stable.
ausserdem ist da noch livebuffer....
[testing-vdr]: Timer-Konflikte trotz freier Karte ?
- Piet
- Geschlossen
-
-
Moin Hotzenplotz,
ich hatte gewechselt auf stable, dort habe ich selbiges Problem.
Ciao
Piet
-
Nabend,
hatte vorhin selbiges Problem - Überlappung zweier Aufnahmen auf einem Kanal, wurde bei Beginn einer dritten Aufnahme das Livedevice weggezogen und ein Timerkonflikt gemeldet.
Das Ganze im echten 3 Tunersystem. - Theoretisch wären genug Karten verfügbar gewesen.
yavdr stable, 24yavdr1, stand letztes WE, kein LNB Sharing aktiv, kein dynamite, kein VPS
Hab ich vorher nie bemerkt.
Christian
-
Hänge hier noch mal ein Log an mit aktiviertem LNB-Logging.
Programmiert wurden drei Timer auf Kanal 1, und danach einer auf Kanal 2.
Timer auf 2 startet erst, nachdem ein anderer gelöscht wird.
Ciao
Piet
P.S. die ganzen "Timer set to event"-Zeilen habe ich gelöscht, war sonst zu unübersichtlich.
-
Moin!
Was ist in deiner setup.conf als PrimaryLimit eingestellt?
Lars.
-
Moin,
PrimaryLimit=0
Ciao
Piet
-
Moin!
Tut mir leid, aber ich finde keinen Grund für das Verhalten.
Vielleicht hab ich am Wochenende noch mal Zeit zwischendurch, um noch mal mit klarem Kopf ranzugehen.Lars.
-
Hallo,
da das gleiche Problem bei mir auch auftritt (mit yavdr 0.3) habe ich mir den entsprechenden Quellcode mal angeschaut, und ich denke ich habe das Problem gefunden.
Die Ursache ist der Patch opt-64_lnb-sharing.dpatch.
Durch diesen Patch wird in cDevice::GetDevice() bei der Impact-Berechnung 8 zusätzliche Bits eingeführt.
Das führt nun dazu, das bei Berechnung von imp ingesamt 37 Bits "reingeschoben" werden, was nun, da imp nur ein 32bit-Variable ist, dazu führt, das die ersten 5 Bits verloren geht.
Dar naheiegende Fix ist nun die Variable auf 64 Bit zu erweitern.
Diff
Alles anzeigen--- vdr.orig/vdr-1.7.16/device.c 2011-04-22 18:40:07.845032000 +0200 +++ vdr/vdr-1.7.16/device.c 2011-04-22 18:35:47.189032000 +0200 @@ -283,7 +283,7 @@ cDevice *d = NULL; cCamSlot *s = NULL; - uint32_t Impact = 0xFFFFFFFF; // we're looking for a device with the least impact + uint64_t Impact = 0xFFFFFFFFFFFFFFFFULL; // we're looking for a device with the least impact for (int j = 0; j < NumCamSlots || !NumUsableSlots; j++) { if (NumUsableSlots && SlotPriority[j] > MAXPRIORITY) continue; // there is no CAM available in this slot @@ -306,7 +306,7 @@ // a numeric value). The sequence in which the conditions are listed corresponds // to their individual severity, where the one listed first will make the most // difference, because it results in the most significant bit of the result. - uint32_t imp = 0; + uint64_t imp = 0; imp <<= 1; imp |= LiveView ? !device[i]->IsPrimaryDevice() || ndr : 0; // prefer the primary device for live viewing if we don't need to detach existing receivers imp <<= 1; imp |= !device[i]->Receiving() && (device[i] != cTransferControl::ReceiverDevice() || device[i]->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[i]->Receiving(); // avoid devices that are receiving
Mit diesen Patch tritt der Fehler bei mir nicht mehr auf.
Gruß
Chucky
-
Moin!
Ohne es gegen zu prüfen, klingt es logisch und ich denke mal, dass du zählen kannst.
Darauf bin ich nicht gekommen...Danke!
Lars.
-
Hallo,
in vdr-1.7.16 wird imp um 29 bits geshiftet, im aktuellen LNB-sharing auch:
Code
Alles anzeigenuint32_t imp = 0; imp <<= 1; imp |= LiveView ? !device[i]->IsPrimaryDevice() || ndr : 0; // prefer the primary device for live viewing if we don't need to detach existing receivers imp <<= 1; imp |= !device[i]->Receiving() && (device[i] != cTransferControl::ReceiverDevice() || device[i]->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[i]->Receiving(); // avoid devices that are receiving imp <<= 4; imp |= GetClippedNumProvidedSystems(4, device[i]) - 1; // avoid cards which support multiple delivery systems imp <<= 1; imp |= device[i] == cTransferControl::ReceiverDevice(); // avoid the Transfer Mode receiver device // LNB - Sharing int badPriority = device[i]->GetMaxBadPriority(Channel); if (badPriority < 0 ) // a device receiving with lower priority would need to be stopped { imp <<= 8; imp |= min(max(device[i]->Priority() + MAXPRIORITY, 0), 0xFF); // use the device with the lowest priority (+MAXPRIORITY to assure that values -99..99 can be used) } else { imp <<= 8; imp |= min(max(max(device[i]->Priority(), badPriority) + MAXPRIORITY, 0), 0xFF); // use the device with the lowest priority (+MAXPRIORITY to assure that values -99..99 can be used) } // LNB - Sharing End imp <<= 8; imp |= min(max((NumUsableSlots ? SlotPriority[j] : 0) + MAXPRIORITY, 0), 0xFF); // use the CAM slot with the lowest priority (+MAXPRIORITY to assure that values -99..99 can be used) imp <<= 1; imp |= ndr; // avoid devices if we need to detach existing receivers imp <<= 1; imp |= device[i]->IsPrimaryDevice(); // avoid the primary device // LNB - Sharing imp |= (badPriority == -1); // avoid cards where the actual device needs to be switched // LNB - Sharing End imp <<= 1; imp |= NumUsableSlots ? 0 : device[i]->HasCi(); // avoid cards with Common Interface for FTA channels imp <<= 1; imp |= device[i]->HasDecoder(); // avoid full featured cards imp <<= 1; imp |= NumUsableSlots ? !ChannelCamRelations.CamDecrypt(Channel->GetChannelID(), j + 1) : 0; // prefer CAMs that are known to decrypt this channel if (imp < Impact) {
Oder habe ich mich verzählt? Ich vermute also mal, dass ein anderer Patch dazu führt, dass diese zusätzlichen Bits notwendig sind.
- Markus
-
Hallo,
seltsam, bei mir ist da noch eine zusätzliche Zeile drin.
Der entsprechende Code-Abschnitt sieht bei mir so aus:
Code
Alles anzeigenimp <<= 1; imp |= LiveView ? !device[i]->IsPrimaryDevice() || ndr : 0; // prefer the primary device for live viewing if we don't need to detach existing receivers imp <<= 1; imp |= !device[i]->Receiving() && (device[i] != cTransferControl::ReceiverDevice() || device[i]->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[i]->Receiving(); // avoid devices that are receiving imp <<= 4; imp |= GetClippedNumProvidedSystems(4, device[i]) - 1; // avoid cards which support multiple delivery systems imp <<= 1; imp |= device[i] == cTransferControl::ReceiverDevice(); // avoid the Transfer Mode receiver device imp <<= 8; imp |= min(max(device[i]->Priority() + MAXPRIORITY, 0), 0xFF); // use the device with the lowest priority (+MAXPRIORITY to assure that values -99..99 can be used) // LNB - Sharing int badPriority = device[i]->GetMaxBadPriority(Channel); if (badPriority < 0 ) // a device receiving with lower priority would need to be stopped { imp <<= 8; imp |= min(max(device[i]->Priority() + MAXPRIORITY, 0), 0xFF); // use the device with the lowest priority (+MAXPRIORITY to assure that values -99..99 can be used) } else { imp <<= 8; imp |= min(max(max(device[i]->Priority(), badPriority) + MAXPRIORITY, 0), 0xFF); // use the device with the lowest priority (+MAXPRIORITY to assure that values -99..99 can be used) } // LNB - Sharing End imp <<= 8; imp |= min(max(((NumUsableSlots && !device[i]->HasInternalCam()) ? SlotPriority[j] : 0) + MAXPRIORITY, 0), 0xFF); // use the CAM slot with the lowest priority (+MAXPRIORITY to assure that values -99..99 can be used) imp <<= 1; imp |= ndr; // avoid devices if we need to detach existing receivers imp <<= 1; imp |= device[i]->IsPrimaryDevice(); // avoid the primary device // LNB - Sharing imp |= (badPriority == -1); // avoid cards where the actual device needs to be switched // LNB - Sharing End imp <<= 1; imp |= (NumUsableSlots || InternalCamNeeded) ? 0 : device[i]->HasCi(); // avoid cards with Common Interface for FTA channels imp <<= 1; imp |= device[i]->HasDecoder(); // avoid full featured cards imp <<= 1; imp |= (NumUsableSlots && !device[i]->HasInternalCam()) ? !ChannelCamRelations.CamDecrypt(Channel->GetChannelID(), j + 1) : 0; // prefer CAMs that are known to decrypt this channel
Dies ist aus den stable-Zweig von yavdr mit folgenden repositories
Codedeb http://ppa.launchpad.net/yavdr/stable-vdr/ubuntu lucid main deb http://ppa.launchpad.net/yavdr/stable-xbmc/ubuntu lucid main deb http://ppa.launchpad.net/yavdr/stable-yavdr/ubuntu lucid main deb-src http://ppa.launchpad.net/yavdr/stable-vdr/ubuntu lucid main deb-src http://ppa.launchpad.net/yavdr/stable-xbmc/ubuntu lucid main deb-src http://ppa.launchpad.net/yavdr/stable-yavdr/ubuntu lucid main
Im Endeffekt scheint deine Version des Codes korrekt zu sein. die zusätzliche Zeile die bei mir noch drin ist (Zeile 6) ist ja eigentlich überflüssig. Da scheint irgendwie der LNB-Sharing Patch in yavdr nicht ganz korrekt zu sein.
Gruß
Chucky
-
und was machen wir jetzt, Zeile 6 raus und recompile?
Aktuell scheint hoplo ja den Focus voll auf yavdr 0.4 zu legen... ich würde das allerdings schon vorab fixen wollen.
Christian
-
und was machen wir jetzt, Zeile 6 raus und recompile?
Ich würde sagen ja. Soweit ich es sehe ist diese Zeile auf jeden Fall falsch und dadurch würde das Problem gelöst werden.
Chucky
-
es ist der "opt-21_internal-cam-devices.dpatch"
Diff
Alles anzeigen#! /bin/sh /usr/share/dpatch/dpatch-run ## opt-21_internal-cam-devices.dpatch by Tobias Grimm <tg@e-tobi.net> ## ## All lines beginning with `## DP:' are a description of the patch. ## DP: This patch allows tuning to encrypted channels which are ## DP: provided by a stremdev client device and therefore already are ## DP: decrypted on the streamdev server side. ## DP: See also: http://www.vdr-developer.org/mantisbt/view.php?id=429 @DPATCH@ diff -urNad vdr-1.6.0~/device.c vdr-1.6.0/device.c --- vdr-1.6.0~/device.c 2008-03-09 11:03:34.000000000 +0100 +++ vdr-1.6.0/device.c 2008-07-24 16:34:52.000000000 +0200 @@ -363,6 +363,7 @@ int NumCamSlots = CamSlots.Count(); int SlotPriority[NumCamSlots]; int NumUsableSlots = 0; + bool InternalCamNeeded = false; if (Channel->Ca() >= CA_ENCRYPTED_MIN) { for (cCamSlot *CamSlot = CamSlots.First(); CamSlot; CamSlot = CamSlots.Next(CamSlot)) { SlotPriority[CamSlot->Index()] = MAXPRIORITY + 1; // assumes it can't be used @@ -376,7 +377,7 @@ } } if (!NumUsableSlots) - return NULL; // no CAM is able to decrypt this channel + InternalCamNeeded = true; // no CAM is able to decrypt this channel } bool NeedsDetachReceivers = false; @@ -392,11 +393,13 @@ continue; // this device shall be temporarily avoided if (Channel->Ca() && Channel->Ca() <= CA_DVB_MAX && Channel->Ca() != device[i]->CardIndex() + 1) continue; // a specific card was requested, but not this one - if (NumUsableSlots && !CamSlots.Get(j)->Assign(device[i], true)) + if (InternalCamNeeded && !device[i]->HasInternalCam()) + continue; // no CAM is able to decrypt this channel and the device uses vdr handled CAMs + if (NumUsableSlots && !device[i]->HasInternalCam() && !CamSlots.Get(j)->Assign(device[i], true)) continue; // CAM slot can't be used with this device bool ndr; if (device[i]->ProvidesChannel(Channel, Priority, &ndr)) { // this device is basicly able to do the job - if (NumUsableSlots && device[i]->CamSlot() && device[i]->CamSlot() != CamSlots.Get(j)) + if (NumUsableSlots && !device[i]->HasInternalCam() && device[i]->CamSlot() && device[i]->CamSlot() != CamSlots.Get(j)) ndr = true; // using a different CAM slot requires detaching receivers // Put together an integer number that reflects the "impact" using // this device would have on the overall system. Each condition is represented @@ -410,18 +413,18 @@ imp <<= 1; imp |= device[i]->Receiving(); // avoid devices that are receiving imp <<= 1; imp |= device[i] == cTransferControl::ReceiverDevice(); // avoid the Transfer Mode receiver device imp <<= 8; imp |= min(max(device[i]->Priority() + MAXPRIORITY, 0), 0xFF); // use the device with the lowest priority (+MAXPRIORITY to assure that values -99..99 can be used) - imp <<= 8; imp |= min(max((NumUsableSlots ? SlotPriority[j] : 0) + MAXPRIORITY, 0), 0xFF); // use the CAM slot with the lowest priority (+MAXPRIORITY to assure that values -99..99 can be used) + imp <<= 8; imp |= min(max(((NumUsableSlots && !device[i]->HasInternalCam()) ? SlotPriority[j] : 0) + MAXPRIORITY, 0), 0xFF); // use the CAM slot with the lowest priority (+MAXPRIORITY to assure that values -99..99 can be used) imp <<= 1; imp |= ndr; // avoid devices if we need to detach existing receivers imp <<= 1; imp |= device[i]->IsPrimaryDevice(); // avoid the primary device - imp <<= 1; imp |= NumUsableSlots ? 0 : device[i]->HasCi(); // avoid cards with Common Interface for FTA channels + imp <<= 1; imp |= (NumUsableSlots || InternalCamNeeded) ? 0 : device[i]->HasCi(); // avoid cards with Common Interface for FTA channels imp <<= 1; imp |= device[i]->HasDecoder(); // avoid full featured cards - imp <<= 1; imp |= NumUsableSlots ? !ChannelCamRelations.CamDecrypt(Channel->GetChannelID(), j + 1) : 0; // prefer CAMs that are known to decrypt this channel + imp <<= 1; imp |= (NumUsableSlots && !device[i]->HasInternalCam()) ? !ChannelCamRelations.CamDecrypt(Channel->GetChannelID(), j + 1) : 0; // prefer CAMs that are known to decrypt this channel if (imp < Impact) { // This device has less impact than any previous one, so we take it. Impact = imp; d = device[i]; NeedsDetachReceivers = ndr; - if (NumUsableSlots) + if (NumUsableSlots && !device[i]->HasInternalCam()) s = CamSlots.Get(j); } } diff -urNad vdr-1.6.0~/device.h vdr-1.6.0/device.h --- vdr-1.6.0~/device.h 2008-02-23 14:13:04.000000000 +0100 +++ vdr-1.6.0/device.h 2008-07-24 16:36:12.000000000 +0200 @@ -335,6 +335,13 @@ public: virtual bool HasCi(void); ///< Returns true if this device has a Common Interface. +#define INTERNAL_CAM_DEVICES_PATCH 1 + virtual bool HasInternalCam(void) { return false; } + ///< Returns true if this device handles encrypted channels itself + ///< without VDR assistance. This can be e.g. when the device is a + ///< client that gets the stream from another VDR instance that has + ///< already decrypted the stream. In this case ProvidesChannel() + ///< shall check whether the channel can be decrypted. void SetCamSlot(cCamSlot *CamSlot); ///< Sets the given CamSlot to be used with this device. cCamSlot *CamSlot(void) const { return camSlot; }
jetzt ist nur die frage was ich damit mache ?
-
Moin!
Weil LNB-Sharing und Internal-CAM an der gleichen Stelle etwas hinzufügen, was sich überschneidet, muss für den Fall, dass beide Patches angewandt werden, sicherlich wieder eine Zeile entfernt werden.
Hab auf der ML gesehen, dass du dafür ja noch einen Patch bekommst...Lars.
-
-
Moin!
Ich schau später am Abend da mal rein, ist jetzt gerade schlecht...
Lars.
-
klar, nguten !
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!