softhddevice mit High Level OSD

  • Moin,


    ich habe dem softhddevice eine OpenGL beschleunigte OSD Ausgabe hinzugefügt. Das ganze funktioniert aktuell nur mit VDPAU Ausgabe auf NVidia Karten. Getestet habe ich das ganze nur mit dem NVidia Treiber 340.93, aber ich hoffe, dass es auch mit anderen Treiberversionen keine Probleme gibt. Ich habe hierfür einen Fork auf Github angelegt:


    https://github.com/louisbraun/softhddevice-openglosd


    Über den Schalter "OPENGLOSD" im Makefile kann die OpenGL OSD Unterstützung eingeschalten werden, in meinem Fork ist das natürlich schon aktiviert ;) Der Fork entspricht dem aktuellen softhddevice Git, wobei ich jedoch die Änderungen der Revision f47ee3a2 "Speedup queuing output surface, when decoder buffers are full" wieder herausnehmen musste, da ansonsten die initiale Ausgabe des OSD stark verzögert wurde. Vielleicht kann Johns da mal schauen, wo es klemmt...


    Für die Installation wird die "OpenGL Mathematics" Bibliothek glm benötigt, diese lib muss ggf. vor dem bauen installiert werden.


    Das High Level OSD habe ich nach dem Vorbild aus dem rpihddevice implementiert. Vielen Dank an Thomas an dieser Stelle für die schöne Vorlage ;) Den OpenGL Teil musste ich natürlich völlig neu implementieren. Das High Level OSD ist komplett modular ausgelegt, ich habe nur einige kleine Anpassungen an den Schnittstellen im softhddevice selbst vornehmen müssen. Die Ausgabe erfolgt über die OpenGL-VDPAU Interop Schnittstelle von NVidia, über die mit OpenGL gerenderte Texturen auf VDPAU Surfaces gelegt werden können. Prinzipiell würde das OpenGL OSD aus meiner Sicht auch mit VAAPI zusammen funktionieren, es müsste nur die Ausgabe über eine "VAAPI-OpenGL Interop" Schnittstelle erfolgen - falls es sowas gibt. Da ich solche Hardware nicht einsetze, habe ich mich darum nicht gekümmert ;)


    Das OpenGL OSD rendert jegliche Ausgabe direkt über OpenGL Befehle "in der GPU" und sollte mit allen verfügbaren Skins zusammenarbeiten. Bei Benutzung eines Skindesigner Skins werden Grafiken (entsprechend den Einstellungen im Skindesigner Setup) beim Starten des Skins bzw. beim ersten Laden der Grafik im GPU Speicher gecacht. Im Softhddevice gibt es eine Setup Option, wieviel GPU Speicher dafür maximal verwendet werden darf. Der Default Wert ist 128MB. Beim Shady kann das schon ein bisschen knapp werden ;) Den Wert sollte jeder seiner Grafikkarte entsprechend einstellen, aus Performancesicht optimal ist es natürlich, wenn die Skin Grafiken komplett in den GPU Speicher geladen werden können.


    Ich bin gespannt, wie sich die Erweiterung auf den verschiedenen Systemen verhält. Insbesondere Animationen sind bei mir sowohl auf meinem Dev System mit einer onboard 9300 als auch auf meinemProd System mit einer GT430 schon ein bisschen schicker ;) Aber auch die Ausgabe an sich ist insbesondere bei aufwändigeren Skins merkbar flüssiger.


    Jo...ich hoffe auf reges Feedback, viel Spass beim Testen!


    Ciao Louis

  • Erstmal Danke louis für diesen "Fork", langsam wird das mit dem SHD total unübersichtlich mit den X-Patchen wo an anderer Stelle dazu existieren und getestet werden sollen. Es wäre wirklich mal an der Zeit dort zu handeln und nicht nur darüber zu reden.


    Sorry für das OT louis

    Gruß utiltiy



    VDR Projekte EPGD EPG2VDR

  • Moin,


    naja, wie Lars in dem anderen Thread schon vorgeschlagen hat, sollte jrie einfach auch einen Fork auf Github anlegen und seine Änderungen da einpflegen. Dann ist das Testen doch einfach. Die beiden Themen überlagern sich ja nicht, sodass man das alles bei gegebener Zeit in das Git von Johns auf vdr-developer.org überführen kann. Das wird schon ;)


    Ciao Louis

  • Merci Louis, bei mir kompiliert es nicht (Yavdr 0.6)

    VDR: E-Q5I Gehäuse, Zotac Ion, mit YaUsbIR Einschalter, Easyvdr 3.0, TBS5990
    VDR2: Asrock Q1900-ITX, DD-Octopus, DD-Duoflex S2, Easyvdr 3.5

  • lmsadi: hm, bei mir baut es, scheint an unterschiedlichen gcc Versionen zu liegen. Der "C-Style" im softhddevice ist mir immer noch ein bisschen unheimlich ;) Der Fehler entsteht genau an den Schnittstellen, die ich neu eingebaut habe. Da fehlt wahrscheinlich nur ein passender Include, ich schau bei Zeit mal...


    Ciao Louis

  • Hallo Louis,
    vielen dank. Wie könnte man denn OpenGL/es ins Spiel bringen?
    Für die Allwinner SoCs könnte das einen leistungsschub beim skindesigner bedeuten. Ein entsprechendes libvdpau-sunxi backend mit GL interop gibt es bereits, da es für xbmc angepasst wurde.
    Das würde die Kisten noch attraktiver machen...
    Gruß andreas

  • Nochmal zu dem Fehler von lmsadi: seltsam, die angemeckerten Variablen werden in video.c selbst ab Zeile 5876 definiert?! Wahrscheinlich mache ich da irgendwas C-technisches falsch, habe aber aktuell keine Idee, was ;) Vielleicht könnte da jemand mal schauen, der sich besser mit pure C auskennt?


    Ciao Louis

  • Ich weiß, dass das eine etwas gemeine Frage ist, aber könnte man nicht einen sauberen Fork von softhddevice machen, der alle alten Commits beinhaltet und sich später leichter mergen lässt statt da einen bestimmten Git-Stand als Ausgangsbasis zu nehmen und alles andere Wegzuwerfen?
    Ich habe das hier mal zusammengeführt: https://github.com/seahawk1986/softhddevice-openglosd

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • rell : hm, keine Ahnung ehrlich gesagt...OpenGL ist in Gänze nicht so ganz einfach zu durchblicken ;) Ich habe "standard" OpenGL benutzt. Wenn das von den sunix Treibern unterstützt wird, sollte es eigentlich damit auch funktionieren. Ansonsten gilt wohl das gleiche wie für VAAPI, die OpenGL Interop müsste für sunix vorhanden sein.


    Ciao Louis

  • @seahawk: was genau hast du jetzt "zusammengeführt"? Mein Fork basiert ja auf dem aktuellen softhddevice Git bis auf die eine Ausnahme, die ich oben erwähnt hatte?


    Ciao Louis

  • @seahawk: was genau hast du jetzt "zusammengeführt"? Mein Fork basiert ja auf dem aktuellen softhddevice Git bis auf die eine Ausnahme, die ich oben erwähnt hatte?

    Schau dir mal die Anzahl der Commits an - bei meiner Variante sieht man die ganzen alten Commits von johns noch.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Ach so...ich hab das einfach neu gepusht. Wenn Johns das dann übernimmt isses ja dann eh wurscht ;)


    Ciao Louis

  • Bei mir baut es unter yaVDR 0.6


    Hm, dann macht lsmadi wohl beim bauen unter yavdr 0.6 was falsch?


    bekomme aber beim Starten


    Die Glut Initialisierung findet hierstatt. Vielleicht gibst du dem glutCreateWindow() testhalber einfach mal nen Namen mit?!


    Ciao Louis

  • Louis, danke für Deine unermüdliche Arbeit, das kommt hier oft zu kurz :-)
    Ich bekomme denselben Fehler wie Imsadi beim Kompilieren auf yavdr-0.6, keine Ahnung was chriszero da anders macht.


    root@htpc:/usr/local/src/vdr-2.2.0# gcc --version
    gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4

    Meine VDRs:
    >>>Mac mini 2010 mit 2x Sundtek SkyTV Ultimate III, Logitech Harmony 300i, yavdr-0.5a mit softhddevice<<< >>>ZOTAC D2550 ITX-WIFI Supreme mit DD Cine S2, Gehäuse OrigenAE M10, Logitech Harmony 300i, yavdr-0.5a mit softhddevice<<< >>>Raspberry Pi
     
    2 mit Sundtek SkyTV Ultimate IV, raspbian, rpihddevice-Plugin, Logitech Harmony 200<<<

  • Hm, dann kann es an der gcc Version nicht liegen:


    Code
    1. maschine ~ # gcc --version
    2. gcc (Gentoo 4.8.4 p1.4, pie-0.6.1) 4.8.4
    3. Copyright (C) 2013 Free Software Foundation, Inc.
    4. This is free software; see the source for copying conditions. There is NO
    5. warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


    Ciao Louis

  • Hm, was mir beim Output vom lsmadi auffällt: im Vergleich zu meiner Ausgabe fehlt "-DUSE_VDPAU -DUSE_VAAPI". Benutzt ihr genau das Makefile, so wie es mitgeliefert wird? Oder werden diese Parameter Distributionsspezifisch gesetzt?


    Ciao Louis

  • Ja, habe am Makefile nichts geändert.

    Meine VDRs:
    >>>Mac mini 2010 mit 2x Sundtek SkyTV Ultimate III, Logitech Harmony 300i, yavdr-0.5a mit softhddevice<<< >>>ZOTAC D2550 ITX-WIFI Supreme mit DD Cine S2, Gehäuse OrigenAE M10, Logitech Harmony 300i, yavdr-0.5a mit softhddevice<<< >>>Raspberry Pi
     
    2 mit Sundtek SkyTV Ultimate IV, raspbian, rpihddevice-Plugin, Logitech Harmony 200<<<

  • Ich habe nur die Builddeps installiert + 2 Pakete die fehlten

    Code
    1. apt-get install builddep vdr-plugin-softhddevice
    2. apt-get install freeglut3-dev libglm-dev


    Hab den glutCreateWindow() einen Namen gegeben, nun sieht es so aus:


    Code
    1. Jan 30 13:20:19 vdr01 vdr: [1302] [softhddev]CreateOsd: 0, 0, 0, using OpenGL OSD support
    2. Jan 30 13:20:19 vdr01 vdr: [2043] oglThread thread started (pid=1302, tid=2043, prio=high)
    3. Jan 30 13:20:19 vdr01 vdr: [2043] [softhddev]Starting OpenGL Thread
    4. Jan 30 13:20:19 vdr01 vdr: [2043] [softhddev]OpenGL Context initialized
    5. Jan 30 13:20:19 vdr01 vdr: [2043] [softhddev]Shaders initialized
    6. Jan 30 13:20:19 vdr01 vdr: [2043] [softhddev]: vdpau interop NOT initialized
    7. Jan 30 13:20:19 vdr01 vdr: [2043] oglThread thread ended (pid=1302, tid=2043)
  • Hm, das


    Code
    1. Jan 30 13:20:19 vdr01 vdr: [2043] [softhddev]: vdpau interop NOT initialized


    ist nicht gut...das NOT muss weg ;)


    Ich habe "media-libs/freeglut-2.8.1-r1" installiert...du ja anscheinend freeglut3. Kannst du mal auf die 2.8 zurück und den Namen für das Fenster wieder entfernen?


    Ciao Louis