softhddevice - Software VDPAU/VA-API/CPU Decoder und Ausgabe Plugin

  • Nachdem VA-API nun von der Treiberseite besser funktioniert. Habe ich mein altes Projekt wieder reaktiviert.
    Nachdem in diesem Thread http://www.vdr-portal.de/board…-plugin-vs-ausgabe-client meiner Meinung nach mehr ein Plugin gewünscht wurde, wird es erstmal ein Plugin.


    Inzwischen habe ich auch auf http://projects.vdr-developer.org/ ein Projekt registriert:


    http://projects.vdr-developer.org/projects/plg-softhddevice


    Folgendes funktioniert mit Hilfe von FFMpeg und X11

    • Videoausgabe per VA-API/VA-API
    • Videoausgabe per VDPAU/VDPAU
    • Audioausgabe über FFMpeg/Alsa/Analog
    • Audioausgabe über FFMpeg/Alsa/Digital
    • Audioausgabe über FFMpeg/OSS/Analog
    • Audioausgabe über HDMI/SPDIF Pass-through
    • Autocrop Support
    • Yaepghd Videofenster Support
    • Screenshot Support
    • Software Deinterlacer

    weiter geplant ist:

    • Videoausgabe per VA-API/Opengl
    • Videoausgabe per VDPAU/Opengl
    • Videoausgabe per CPU/Xv
    • Videoausgabe per CPU/Opengl
    • Videoausgabe per XvBA/XvBA
    • VDPAU Software Deinterlacer

    Hilfe wäre mindestens bei Folgenden erwünscht:

    • VDR-Integration, ob alle Funktionen richtig verwendet werden ...
    • VDR menus für setup
    • Atmolight Support
    • Auch mit Opengl bin ich nicht so fit
    • z.b. wäre der Einbau und Support von XvBA
    • und da es ganz gut geht Testen + Testen

    Ich habe erstmal mit dem Ton angefangen, da die Videoausgabe beim Testclient schon fertig war.


    Die Version ist inzwischen fast komplett und sehr stabil.
    Es wird empfohlen vdr <1.7.23 mit PES Patch (honour_boundaries.diff [gelöst] VDR coredump und Speicherverletzungen beim Umschalten (patch für <1.7.23 enthalten)) oder >=vdr 1.7.23


    Edit: Testen z.b. so:


    Aktuelle vdr Version entpacken oder entpackt haben.
    Dann dort ins Plugin Verzeichnis gehen.
    softhddevice hier entpacken.
    In das softhddevice Verzeichnis gehen
    Übersetzen und installieren.


    Code
    1. tar vxf vdr-1.7.25.tar.bz2
    2. cd vdr-1.7.25/PLUGINS/src
    3. tar vxf vdr-softhddevice-0.4.9.tgz
    4. cd softhddevice-0.4.9
    5. make && sudo make install
    6. vdr --log=3 --plugin="streamdev-client" --plugin="softhddevice -g 1920x1080+0+0"


    Den Text natürlich mit aktuellen Version und richtigen Pfad ersetzen.
    Das --plugin="streamdev-client" ist nur ein Beispiel, wenn man noch andere Plugins zum Empfang braucht.


    Oder "vdr -h" aufrufen um alle Kommandozeilenparameter angezeigt zubekommen.


    Benutzung der GIT Version

    Code
    1. git clone git://projects.vdr-developer.org/vdr-plugin-softhddevice.git
    2. cd vdr-plugin-softhddevice
    3. make VDRDIR=<path-to-your-vdr-files> LIBDIR=.
    4. sudo make VDRDIR=<path-to-your-vdr-files> LIBDIR=. install
    5. vdr --log=3 --plugin="streamdev-client" --plugin="softhddevice -g 1920x1080+0+0"


    X automatisch starten

    Code
    1. vdr --log=3 --plugin="softhddevice -g 1920x1080+0+0 -x"


    Wenn das Startfenster (=Terminal) den Fokus hat, kann man es über die Tasten die in /etc/vdr/remote.conf als KBD definert hat kontrollieren.
    Wenn das Videofenster den Fokus hat, kann man über die Tasten mit XKeySym steuern.
    Bekannte Fehler:


    • VA-API mit Intel Backend hat Problem mit Deinterlace und stürzt mit Deinterlace häufig ab.

    • VA-API Branch VAAPI-EXT läuft nur rund, wenn der erste Kanal ein 1080i Kanal ist, z.b. Servus TV HD

    • lib-av-0.7.x stürzt beim 5.1 -> Stereo Downmix ab, Alsa Software Downmix (51to20) aus FAQ nehmen.

    Johns


    Edit: Komplettes Changelog gibt es hier: http://projects.vdr-developer.…device.git/tree/ChangeLog


    Eigener Audio TS (Transport Stream) Parser.
    Audio Drift Korrektur (als Default ausgeschaltet, Benutzung auf eigene Gefahr)
    Video Hintergrundfarbe konfigurierbar (für Plasmas)
    Und vieles mehr.


    Download: http://projects.vdr-developer.…ts/plg-softhddevice/files (aktuelle Version auswählen)

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

    Dieser Beitrag wurde bereits 40 Mal editiert, zuletzt von johns ()

  • Hi


    Klingt ja sehr interresant. Sobald ich Zeit hab werde ich das mal testen.


    Leider kann ich nur Testen und sonst keine unterstützung für dein Projekt geben.


    mfg

  • Dazu kommt, dass nicht jede Distribution überhaupt sudo mitbringt. Ich weiß zumindest 100% sicher, dass auf meinem VDR kein "sudo" installiert ist.


    Von der Kleinigkeit abgesehen erstmal Danke für die Arbeit!


    Was LIRC angeht: Ja, das macht VDR.


    Was X11-Input-Support angeht habe ich auch schon oft überlegt, wie sowas denkbar wäre. Man kommt hier wohl letztlich nicht darum herum ein Terminal zu simulieren um dieses dem VDR unterschieben zu können. Normalerweise liest der VDR nämlich seine Tasten von einen "TTY". Da auf deinem "aktiven TTY" aber X läuft kann VDR hier nichts lesen.


    Nur wenn der VDR seine Tasten über den vorgesehenen Weg (TTY) bekommt wird auch Texteingabe in Textfeldern unterstützt.

  • Das mit dem "sudo" ist klar, deshalb ja der Hinweiss. Wobei das Makefile von den VDR Plugins ist und dies hat von Haus aus kein install.


    Um LIRC muss ich mich also nicht kümmern, ist schon mal eine Aufgabe weniger. Die X11 Eingabe kann ich einfach weitergeben.


    Das OSD funktioniert nur mit der sttng Skin, die enigmang Skin scheint kein Truecolor zu unterstützen.
    Kann ich True Color erzwingen? Oder muss ich noch einen zweiten Modus unterstützen?


    Leider kann ich den Opengl Code vergessen, weil der funktioniert mit der VDR Thread Hölle nicht. Opengl will nur in einem Thread arbeiten.


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

  • Wobei das Makefile von den VDR Plugins ist und dies hat von Haus aus kein install.


    Stimmt auch wieder. Ziehe meinen Einwand zurück.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • So die Video Ausgabe geht nun auch. Erstmal geht nur VA-API, aber es gibt dafür ja auch ein VDPAU Backend.
    Bzw. bis jetzt habe ich nur dieses bisher getestet, im Programmierrechner steckt nur eine GT 210.
    Der erste Post enthält die letzte Version.


    Ein großes Problem war, das cDevice:PlayVideo keine kompletten H264 Packete schickt. Mein Transportstream Demuxer aus meinen Testcode schickte komplette Packete.


    Ist dies nun ein Bug in VDR oder ein Feature?


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

  • Leider kann ich den Opengl Code vergessen, weil der funktioniert mit der VDR Thread Hölle nicht. Opengl will nur in einem Thread arbeiten.


    Wäre das nicht ein guter Grund Plugin und Frontend voneinander unabhängiger zu machen?

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Zitat von »johns«



    Leider kann ich den Opengl Code vergessen, weil der funktioniert mit der VDR Thread Hölle nicht. Opengl will nur in einem Thread arbeiten.


    Wäre das nicht ein guter Grund Plugin und Frontend voneinander unabhängiger zu machen?


    Musst du das Messer nun auch noch in der Wunde drehen? ;)


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Musst du das Messer nun auch noch in der Wunde drehen?


    Nein, aber als potentieller zukünftiger Nutzer stelle ich gerne Fragen die in die konzeptionelle Tiefe gehen ;)

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Naja, so schlimm ist es auch wieder nicht, nur habe ich ein paar Stunden versucht, einen GLXContext zwischen mehreren Threads zu sharen, was leider nicht geklappt hat.
    Damit ist Opengl ja nicht unmöglich. Man muß nur alle Opengl Funktionen in einen eigenen Thread packen und die Aufgaben, dann an diesen übergeben.
    Freiwillige die dies schreiben sind immer willkommen, ich mache es selber erst viel später. Jetzt muss erstmal alles besser zumspielen und im normalen Betrieb benutzbar werden.


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

  • johns


    Bitte behalte den Plugin Charakter, wie erdacht als einheitliches Ausgabeplugin analog zu softdevice(SD), bei, so was fehlt und wäre einzigartig für den VDR.


    Abgetrennte Ausgaben gibt es ja schon mehrere, xine@xine-ui, xineliboutput@sxfe, vnsi/xvdr@xbmc, brauchts da wirklich ein weiteres? Kann niemand was dafür das dort Features fehlen oder offene Probleme nicht gelöst sind ...


    Regards
    fnu

    HowTo: APT pinning

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von fnu ()

  • So bin fertig.


    Naja nicht richtig, aber es funktioniert alles was man zum Testen braucht. Jetzt geht die eigentliche Arbeit erst los. Fehler suchen und Plugin benutzbar machen.


    VA-API Ausgabe funktioniert, Getestet mit NVidia und Intel Backend.
    Gesteuert werden kann mit LIRC und X11.
    Alles Skins sollten funktionieren. Für nicht Truecolor Skins, mussten Bitmaps geholt werden und dann nach Truecolor konvertiert werden.
    Wöre nicht schlecht wenn das schon im VDR - Core als Fallback implementiert werden könne.


    Im Moment stört der asyncrone Ton am Meisten.


    Also fleissig testen,
    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

  • Ich bekomme beim kompilieren folgende Fehler:


    Code
    1. gcc: softhddevice.c: Datei oder Verzeichnis nicht gefunden
    2. g++ -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses -fPIC -c -o softhddevice.o softhddevice.cpp
    3. softhddevice.cpp:23:27: schwerwiegender Fehler: vdr/interface.h: Datei oder Verzeichnis nicht gefunden


    vdr-User-# 755 to_h264 chk_r

  • Aktuelle vdr entpacken oder entpackt haben.
    Dann dort ins Plugin Verzeichnis gehen.
    softhddevice hier entpacken.
    In das softhddevice Verzeichnis gehen
    Übersetzen und installieren.


    Code
    1. tar vxf vdr-1.7.21.tar.bz2
    2. cd vdr-1.7.21/PLUGINS/src
    3. tar vxf vdr-softhddevice-0.0.5.tgz
    4. cd softhddevice-0.0.5
    5. make && sudo make install


    Nun testen.


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

  • Wenn ich es so mache, vorher hatte ich wie üblich mit "make plugins" aus dem vdr-Verzeichnis herauskompiliert, entfällt die erste Fehlermeldung, doch 2. kommt nach wie vor :-(


    vdr-User-# 755 to_h264 chk_r


  • So gemacht. Gleicher Fehler wie weiter oben bei jsffm

    VDR1: vdr-latest, arch x86_64, Octopus net 2 x Duoflex C/C2/T2 , NUC7i3BNH, Crucial MX300 2TB, LG LM 669S
    VDR2: RasPI 2, MLD
    VDR-User #81

    Linux is the best OS I have ever seen -- Albert Einstein

  • Also bei mir klappt es so wie geschrieben. Wobei auch ein "make plugins" funktioniert.


    Was nicht passt ist die Ausgabe (und damit die CXXFLAGS):

    Code
    1. gcc: softhddevice.c: No such file or directory
    2. g++ -g -O3 -W -Wall -Wextra -Woverloaded-virtual -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"softhddevice"' -I../../../include -fPIC -c -o softhddevice.o softhddevice.cpp


    Die erste Zeile ist normal.


    Habt Ihr CFLAGS bzw. CXXFLAGS verändert? make CXXFLAGS="..." produziert einen solchen Fehler.


    Wobei ich das Makefile von einem anderen Plugin genommen habe und nur leicht verändert.


    Edit:

    Code
    1. ...
    2. override CXXFLAGS += $(DEFINES) $(INCLUDES)
    3. ...
    4. override CFLAGS+= $(DEFINES) $(INCLUDES) \
    5. ...
    6. override LDFLAGS+= -lrt $(shell pkg-config --libs alsa libavcodec libavformat) \
    7. ...


    "override" in den drei Zeilen davor machen könnte helfen.


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von johns ()

  • Das hat was gebracht, jetzt kommt:


    Code
    1. /usr/lib/gcc/x86_64-pc-linux-gnu/4.5.3/../../../../x86_64-pc-linux-gnu/bin/ld: softhddevice.o: relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
    2. softhddevice.o: could not read symbols: Bad value
    3. collect2: ld gab 1 als Ende-Status zurück
    4. make: *** [libvdr-softhddevice.so] Fehler 1


    vdr-User-# 755 to_h264 chk_r