In 1.7.25 gab es ja allerlei Änderungen unter der Überschrift "Revised priority handling to allow receivers with a priority that is lower than that of live viewing".
Sinn und Zweck war nach meiner Erinnerung u.a., ein Problem im Zusammenspiel mit osdteletext zu lösen, dass z.B. Udo Richter für FF-Karten untersucht hatte.
So wie es jetzt (getestet mit 2.1.2) ist, gibt es nun jedoch ein Problem bei Systemen ohne FF-Karte und im Zusammenspiel mit devices wie iptv oder pvrinput. Folgendes Szenario:
-osdteletext-Plugin läuft
-LiveView von einem iptv- oder pvrinput-Kanal, der Teletextdaten liefert
-Abspielen einer Aufzeichnung und danach Beenden der Wiedergabe mit Rückkehr zum letzten Kanal
Ergebnis: der zuletzt gesehene Kanal bleibt schwarz und stumm
Ich habe zahlreiche Debug-Meldungen im Code verstreut und das näher analysiert.
Die Funktion MaySwitchTransponder() liefert als return-Wert 0, weil Receiving() true zurückliefert. Dies führt dazu, dass GetDevice, SwitchChannel und SetChannel nie aufgerufen werden. Somit erfolgt auch nie die Information des osdteletext-Plugins mittels MsgChannelSwitch, dass es seinen receiver detachen soll.
Bei DVB-Kanälen tritt dieses Problem deshalb nicht auf, weil in GetDeviceForTransponder zuvor bereits die Bedingung ' if (d->IsTunedToTransponder(Channel))' zutrifft. Nun ist die Funktion IsTunedToTransponder m.E. aber DVB-spezifisch. Deshalb gibt es sie bei pvrinput und iptv nicht (weil es dort auch keine Transponder gibt).
Ich konnte das Problem dadurch lösen, dass ich in Receiving() solche Receiver, die wie osdteletext eine Priorität kleiner als Null haben, wieder unberücksichtigt lasse (ähnlich wie in 1.7.24):
bool cDevice::Receiving(bool Dummy) const
{
cMutexLock MutexLock(&mutexReceiver);
for (int i = 0; i < MAXRECEIVERS; i++) {
//if (receiver[i])
if (receiver[i] && receiver[i]->priority >= 0) // cReceiver with priority < 0 doesn't count
return true;
}
return false;
}
Damit ist dann auch wieder das gewährleistet, was in PLUGINS.html im Abschnitt zu Receivers steht:
QuoteThe above example sets up a receiver that wants to receive data from only one PID (for example the Teletext PID). In order to not interfere with other recording operations, it sets its priority to -1 (any negative value will allow a cReceiver to be detached from its cDevice at any time in favor of a timer recording or live viewing).
Ich habe die vorgeschlagene Änderung bereits Klaus vorgestellt. Er hat damit grundsätzlich kein Problem und würde sie auch in der nächsten Version sowie auch im nächsten 2.0.x Maintenance-Release übernehmen. Er bittet jedoch darum, dass ich das hier vorhe rmal zur Diskussion stelle. Was ich hiermit tue
Wäre schön, wenn das möglichst viele Leute auch im Hinblick auf unerwünschte Nebenwirkungen testen würden.