Hallo Forum,
ich bin bei meinem neuen vdr ein gutes Stück voran gekommen. Der vdr läuft jetzt stabil, ich kann stundenlang HD-Material anschauen ohne dass etwas quietscht oder hängt und das mit einem N3700 SOC ohne NVidia GPU. Ich betreibe die HW unter Ubuntu 16.04 und möchte das Frontend über Detach/Attach öffnen und schließen. Unabhängig davon soll der vdr selbständig hoch und runterfahren. Und dabei habe ich jetzt ein Problem: Der vdr macht keinen Shutdown (Suspend). Ich kann den vdr jederzeit manuell herunterfahren, aber eben nicht automatisch.
Ich hatte hier einen älteren Beitrag gefunden, in dem es um das selbe Thema ging. Damals war die Aussage, dass im Suspend ein Dummy-Player läuft der den vdr am Einschlafen hindert, was für das Detach aber nicht zutreffen sollte. Dies ist der Beitrag.
Leider konnte ich das nicht nachvollziehen und habe mich ans debuggen gemacht. Ich habe vom vdr-Code keine Ahnung, musste mich also ein bisschen quälen. Am Ende bin ich dann im softhddevice Code gelandet und zwar genau da, wo es um den Dummy-Player geht. Hier der Code zur Modeumschaltung aus softhddevice.cpp:
if (!strcasecmp(command, "SUSP")) {
if (cSoftHdControl::Player) { // already suspended
return "SoftHdDevice already suspended";
}
if (SuspendMode != NOT_SUSPENDED) {
return "SoftHdDevice already detached";
}
cControl::Launch(new cSoftHdControl);
cControl::Attach();
Suspend(ConfigSuspendClose, ConfigSuspendClose, ConfigSuspendX11);
SuspendMode = SUSPEND_NORMAL;
return "SoftHdDevice is suspended";
}
........
if (!strcasecmp(command, "DETA")) {
if (SuspendMode == SUSPEND_DETACHED) {
return "SoftHdDevice already detached";
}
if (cSoftHdControl::Player) { // already suspended
return "can't suspend SoftHdDevice already suspended";
}
cControl::Launch(new cSoftHdControl);
cControl::Attach();
Suspend(1, 1, 0);
SuspendMode = SUSPEND_DETACHED;
return "SoftHdDevice is detached";
}
Display More
Wie man hier sieht, wird in beiden Fällen über cControl::Launch(new cSoftHdControl) ein cSoftHdControl als replay control objekt registriert. Das verhindert dann in main() ein Abschalten, da ja ein Player aktiv ist. Das habe ich zumindest so verstanden. Hier der Code aus main:
Interact = Menu ? Menu : cControl::Control(); // might have been closed in the mean time
if (Interact) {
LastInteract = Now;
Dadurch, dass LastInteract = Now gesetzt wird, wird verhindert, dass in main der Shutdown-Block betreten wird.
Könnte mit jemand einen Tipp geben, ob ich diesen Teil entfernen kann, ob das so wie es aktuell drin ist ein Feature ist oder ob es doch eher in den Bereich Bug gehört. Vlt. lässt sich das im letzteren Fall dann auch in den Git-Repos beheben.... 
Ralph