X-Fenster: Displaywechsel ohne Neustart?

  • Hallo,


    Ich verwende den VDR unter X11 und habe einen TV und ein Mini-Display im Gehäuse (zwei Grakas, einmal X mit zwei Screens). Bis vor kurzen habe ich den VDR mit tvtime betrieben und konnte simpel tvtime jweils auf das andere Fenster bringen, indem ich es mit --display:0.1 oder --display:0.0 neu gestartet habe.


    Nun betreibe ich den VDR mit Softdevice und man kann das Display ja ganz normal per Umgebungsvariable umstellen. Jedoch muß man dafür den VDR ja ganz killen...
    Daher: kann man das Softdevice-Fenster (XV) während des Betriebs auf das andere Display platzieren? Ich will ja nicht immer sofort den VDR neu starten, da er ja ggf. gerade aufnimmt oder Burn läuft etc.
    Das Fenster kann man aus meiner Sicht entweder anhand der PID des VDR oder anhand der Beschriftung (vdr) erkennen.


    Danke für Eure Tipps!


    Gruß,
    Timo

    yaVDR 0.4-pre1 on ASUS 1015PN -> Big Screen and XBMC remote on Android.

  • Hallo Timo,


    du kannst das Softdevice mit der Option "-vo shm:" starten, dann öffnet es nicht gleich ein X11-Fenster, sondern wartet auf den ShmClient. Wenn du Fernsehen willst kannst du dann den ShmClient starten, der macht ein Fenster auf und stellt die Ausgabe vom Vdr dort da. Wenn du den ShmClient beendest wird nur die Wiedergabe gestoppt und nicht der ganze Vdr. So kannst du dann wie mit tvtime das Display wechseln.


    Grüße,


    Martin

  • Hallo Martin,


    da ich gerade gesehen habe, dass du aktiv am softdevice-Plugin beteiligt bist, erstmal ein großes Lob und RESPEKT!!!!


    Die Möglichkeit mit dem ShmClient kannte ich noch gar nicht (steht im Wiki nicht drin und habe wohl die README nicht genau genug gelesen *schaem*). Danke für den Hinweis, das ist vermutlich genau das, was ich suche :) Werde das, wenn ich morgen wieder am VDR bin, direkt ausprobieren (und das Wiki dann auch aktualisieren).


    Was mir noch bei softdevice (X11-Ausgabe) aufgefallen ist, ist dass der Bildschirmschoner nicht abgeschaltet wird. Gibt's dafür zufällig irgendeine Konfigoption, die ich nicht gefunden habe?


    Viele Grüße,
    Peter

  • Hallo Martin,


    STRIKE! Klappt! Wußte wie Peter auch nicht, daß Softdevice so entkoppelbar ist und seinem Namen da noch gerechter wird ;) Habe im README das Kapitel immer übersprungen, da ich dachte, es dreht sich um Onboard-Grakas ohne eigenen Speicher ;)
    Ergo: funktioniert prima und VIELEN DANK für diese Hilfe+Entwicklung!


    Danke+Gruß,
    Timo

    yaVDR 0.4-pre1 on ASUS 1015PN -> Big Screen and XBMC remote on Android.

  • Erstmal danke für die Blumen ;)
    Es freut mich wenn das Softdevice gut für euch funktioniert.


    Zitat

    Was mir noch bei softdevice (X11-Ausgabe) aufgefallen ist, ist dass der Bildschirmschoner nicht abgeschaltet wird. Gibt's dafür zufällig irgendeine Konfigoption, die ich nicht gefunden habe?


    Im Vollbildmodus sollte der Bildschirmschoner abgeschaltet werden, allerdings bin ich mir nicht sicher ob das mit allen klappt. Ich benutze den xscreensaver und da funktioniert es ohne Probleme. Es gibt auch noch eine Option von X11, "blank time" oder so ähnlich, nach dieser Zeit schaltet X11 den Bildschirm schwarz. Das kann das Softdevice im Moment nicht abschalten, deshalb muss man das in der XOrg Konfigurationsdatei ändern.


    Grüße,
    Martin

  • Hallo,
    ich wusste auch noch nichts von der Möglichkeit den vdr mit softdevice im Hintergrund zu betreiben :)


    Wenn es jetzt noch eine Möglichkeit gäbe den vdr auf meinen DesktopPC zu exportieren wären alle Vorzüge des xine Plugins für mich wett gemacht.. und softdevice läuft allgemein bei mir besser.
    Gibt es diese Möglichkeit vielleicht schon?


    mfg

    Server: Seagate Dockstar - Debian Squeeze

    Client: Apple TV 2 / Samsung LExxC650

    OldOne: Debian Etch - Matrox G450 & SkyStar2

  • Hallo,


    Mit dem Bildschirmschoner werde ich morgen wieder testen, dann auch mal mit ShmClient. Bei der direkten X11-Ausgabe über XV ist es bei mir so, dass ich den gnome-Bildschirmschoner über das "gnome-screensaver-preferences"-Tool von Hand abschalten muss (auch wenn softdevice im Vollbild läuft).


    Bei xine ist das dagegen nicht der Fall, hier wird der Bildschirmschoner automatisch deaktiviert. Vielleicht kann man ja irgendwie rauskriegen, wie xine das macht und das dann entsprechend nach softdevice portieren. Werde mir das mal im Source-Code anschauen (wobei ich alles andere als ein Experte in C/C++ bin!).


    ---
    Edit:
    Ich sehe gerade, dass im softdevice-Quellcode der Code zum Deaktivieren des Screensavers innerhalb eines "#ifdef LIBXDPMS_SUPPORT" steht. Werde morgen also als erstes mal checken, ob ich überhaupt das Devel-Packet für diese Library installiert habe. Evtl. ist das ja schon der Fehler.
    ---


    Ansonsten muss ich sagen, dass softdevice bei mir in Verbindung mit pvrinput (hab ne PVR150MCE) vieeel stabiler läuft als xinelibout (stürzt öfter mal bei Kanalwechsel ab). Und das xine-plugin hab ich erst gar nicht kompiliert bekommen. Die Qualität bei softdevice ist dank des ffmpeg-Postprocessing exzellent, soweit das analoge KabelDeutschland-Signal es halt zulässt :)

  • Zitat

    Original von uzer
    Wenn es jetzt noch eine Möglichkeit gäbe den vdr auf meinen DesktopPC zu exportieren wären alle Vorzüge des xine Plugins für mich wett gemacht.. und softdevice läuft allgemein bei mir besser.
    Gibt es diese Möglichkeit vielleicht schon?


    Man kann schon die X11 Ausgabe auf einen anderen Rechner umleiten (z.B. mit einem ssh-Tunnel), aber da geht der komplette dekodierte Videostream über das Netzwerk, und das ist normalerweise nicht das was man will. Auch den ShmClient kann man umleiten, das kann ganz praktisch sein, wenn man gerade mal remote auf das OSD zugreifen will um einen Timer zu editieren oder so... Aber um auf einem anderen Rechner fernzusehen ist das sicher nicht geeignet. So etwas wird auch für das Softdevice nicht kommen, ich glaube da gibt es bessere Ansätze, wie z.B. das Streamdev oder halt das Xine-Plugin mit Netzwerkerweiterung.


    Zitat


    Vielleicht kann man ja irgendwie rauskriegen, wie xine das macht und das dann entsprechend nach softdevice portieren. Werde mir das mal im Source-Code anschauen (wobei ich alles andere als ein Experte in C/C++ bin!).


    Mach das mal, man kann einen Haufen dabei lernen :) Du kannst auch mal in xscreensaver.c vom Softdevice schauen, da sollte eigentlich der Bildschirmschoner deaktiviert werden. In deiner System-Log Datei sollten auch Meldungen von [softdevice-xscreensaver] zu finden sein, die dir vielleicht helfen rauszufinden warum es bei dir nicht funktioniert.


    Grüße,
    Martin

  • Siehe mein Edit oben. Evtl. wird der Screensaver einfach nicht ausgeschaltet, weil die entsprechenden Libraries bzw. die nötigen Include-Dateien nicht vorhanden sind und der Programmteil gar nicht einkompiliert wurde :) Werde das morgen dann sehen...


    Hab aber eben trotzdem mal in den xine-ui-Quellcode reingeschaut. Dort wird alle x Sekunden ein "XTestFakeKeyEvent" gesendet, und zwar wird ein Druck auf die linke Shift-Taste gefaked. Kann morgen mal versuchen, dass in das softdevice-Plugin einzubauen (dazu müsste ich erstmal die Hauptschleife finden, aus der ich das dann aufrufen könnte... haste da nen guten Tipp?).


    Hätte zwar Lust, das alles jetzt direkt auszuprobieren, aber mein VDR 2 ist leider gerade ca. 100 km entfernt ;)

  • Zitat

    Hab aber eben trotzdem mal in den xine-ui-Quellcode reingeschaut. Dort wird alle x Sekunden ein "XTestFakeKeyEvent" gesendet, und zwar wird ein Druck auf die linke Shift-Taste gefaked. Kann morgen mal versuchen, dass in das softdevice-Plugin einzubauen (dazu müsste ich erstmal die Hauptschleife finden, aus der ich das dann aufrufen könnte... haste da nen guten Tipp?).


    Klar, so was kann in cXvVideoOut:: ProcessEvents(). Eigentlich keine schlechte Idee das so zu machen... hätte man fast selbst drauf kommen können. Poste mal einen Patch, wenn du das am laufen hast.


    Tschüss,
    Martin

  • Hallo,


    der ShmClient war wirklich genau, was ich suchte. Genial das Teil :)


    Allerdings ist mir ein Problem aufgefallen: Die Bedienung mit der Tastatur klappt darüber nicht. Mit direkter xv-Ausgabe über das softdevice geht es. Ideen?


    Zu der Sache mit dem Bildschirmschoner: Das Problem ist, dass ich kein xscreensaver, sondern den Screensaver von gnome verwende. Ich habe daher den Ansatz mit dem Fake-Tastendruck alle x Sekunden (wobei jetzt x=50 ist) implementiert und das funktioniert auch :) Patch ist angehängt. Ich weiß nicht, wo die linke Shift-Taste, die ich fake, genau ankommt. Kann sein, dass das Probleme macht, wenn die im X-Server oder im VDR belegt ist. Vielleicht kann ja jemand den patch noch etwas verbessern, ich bin nicht so der C++-Profi. Patch ist gegen softdevice-0.3.1.


    Viele Grüße,
    Peter

  • Hi Peter!


    Klasse, dass das mit den Fake-Events funktioniert, ich habe aber leider wahrscheinlich erst am Sonntag etwas Zeit um mir das genauer anzusehen. Auf den ersten Blick sieht der Patch aber gut aus.


    Wegen der Tastatur, da erinnere ich mich dunkel, dass da schonmal jemand gesagt hat das die Tastatur mit dem ShmClient und AMD64 Rechnern nicht klappen würde... Wenn du dir mal anschauen willst warum das nicht funktioniert, kann ich dir kurz beschreiben wie das funktionieren sollte:
    Die Tasten werden in cXvVideoOut:: ProcessEvents() als X Events empfangen und dann per xvRemote->PutKey() an die Put() Funktion vom Vdr weitergegeben. Wenn das über den ShmClient geht, dann ist die xvRemote durch die cShmRemote ersetzt (in ShmClient.c), die macht nichts anderes als den Keycode in den shared Memory Block zu schreiben (ctl->key) und ein Signal and cShmVideoOut zu schicken. cShmVideoOut hat auch eine Klasse Remote (in video-shm.c, die Idiotischerweise genauso heist wie die vom Client, aber was anderes tut... ich muss das glaube ich mal ändern), diese wartet auf Tastatursignale vom Client und wenn eins kommt, dann wird die Taste aus ctl->key ausgelesen und an die Put() Funktion vom Vdr weitergereicht.


    Eigentlich ziemlich einfach, und ich weiß im Moment nicht wo da was schiefgehen sollte... Aber mit ein paar printfs sollte man dem Problem auf die Spur kommen können.


    Schönes Wochenende!
    Martin

  • Super :)


    Das mit der Tastatur werde ich mir ab Montag (vorher bin ich nicht in der richtigen Wohnung...) mal anschauen. Dank deiner Beschreibung werde ich mich hoffentlich zurecht finden. Vom Prinzip hört sich's eigentlich wirklich einfach an. Vielleicht ist es nur ne Kleinigkeit.


    Viele Grüße,
    Peter

  • Hallo Martin,


    das Problem mit der Tastatur war leicht zu fixen. Einfach die ShmClient.c wie folgt ändern:


    Code
    44c44
    <                 virtual bool PutKey(uint64 Code, bool Repeat = false,
    ---
    >                 virtual bool PutKey(KeySym Code, bool Repeat = false,
    48c48
    < bool cShmRemote::PutKey(uint64 Code, bool Repeat,
    ---
    > bool cShmRemote::PutKey(KeySym Code, bool Repeat,


    Und siehe da, Bedienung per Tastatur funktioniert auch auf meine 64bit-Ubuntu :)


    Hab das ganze auch nochmal als Context-Diff angehängt.


    Viele Grüße,
    Peter


    PS: Freut mich, dass du meinen FakeKey-Patch verwenden kannst :)

  • Hallo Peter,


    klasse, dass du das Problem so schnell gefunden hast. Allerdings mag ich deine Lösung nicht besonders, damit wird ShmClient von den X-Bibliotheken abhängig. Eigentlich sollte der ShmClient mal auch mit den anderen Ausgabeklassen zusammenarbeiten, deshalb wäre mir eine andere Lösung lieber.
    Funktioniert es auch, wenn man eine Typenkonversion auf uint64 in video-xv.c PutKey() durchführt?


    Grüße,
    Martin

  • Hallo,


    das mit dem Typecast auf uint64 klappt nicht. Habe aber eine andere Lösung gefunden, die nicht von den X11-Libs abhängt:


    In ShmClient.c folgende kleine Änderung machen:

    Code
    44c44
    <                 virtual bool PutKey(uint64 Code, bool Repeat = false,
    ---
    >                 virtual bool PutKey(uint64_t Code, bool Repeat = false,
    48c48
    < bool cShmRemote::PutKey(uint64 Code, bool Repeat,
    ---
    > bool cShmRemote::PutKey(uint64_t Code, bool Repeat,


    Context-Diff zum direkten Einspielen wieder angehängt...


    Viele Grüße,
    Peter

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!