Zusammenfassung Intel VAAPI & edid.bin

  • Hallo VDR Fans,


    nachdem meine VDRs mit Intel Ausgabe nun lange problemlos mit einer festen Modeline funktionierten, kam es mit neueren Kernels (4.15.0) in den letzten Wochen immer wieder mal zu dem Phänomen der fehlenden Videoausgabe, wenn AVR & Plasma beim automatischen VDR Start nicht eingeschaltet waren (Ton war da!) und man die Geräte danach einschaltete. Ein sudo systemctl restart lightdm.service und anschliessendes svdrpsend plug softhddevice deta; svdrpsend plug softhddevice atta brachte dann wieder Bild.


    Manchmal war es auch kein Problem und funktionierte einfach, also unterm Strich unzuverlässig und jedesmal erst per SSH drauf um eine laufende Aufnahme nicht zu stören war auch doof. Das Problem hatten wir ja mit Nvidia nicht, da wurde generell eine edid.bin geladen.


    Ich erinnerte mich dran vor langer Zeit mal gelesen zu haben das sollte auch mit Intel gehen, war aber seinerzeit zu faul es zu eruieren ...


    Daher nun das Ziel: VDR soll beim Start denken, da ist ein TV dran, selbst wenn kein HDMI Kabel steckt.


    Ausgehend von den Space Posts ab hier: vdr-softhddevice mit ffmpeg 3.5 habe ich angefangen das mal aufzuarbeiten. Mit den Infos von Space funktionierte schon mal Xorg, die edid.bin wurde auch vom Kernel irgendwann geladen, aber nicht direkt beim Start, was das Problem nicht behob ...


    Bei weitere Recherche bin ich über diesen sehr guten Post vom Nutzer "redstorm" im Kodi Forum gestossen, der noch ein paar mehr Details enthielt, z.B. muss die edid.bin auf der initramfs enthalten sein und man sollte den verwendeten Ausgabeport vom Kernel in eine bestimmte Auflösung forcieren.


    - https://forum.kodi.tv/showthread.php?tid=231955&page=282


    Eine weitere Hilfe war dieser Post von seahawk1986 in einem anderen Forum: https://forum.ubuntuusers.de/post/8928642/


    Zusammenfassend habe ich es jetzt bei mir mit Ubuntu 16.04 und Kernel 4.15.0 wie unten beschrieben umgesetzt. Sollte sich sicher auch auf andere Distros adaptieren lassen, Ubuntu 18.04 sowieso ...


    Kernel muss mit CONFIG_DRM_LOAD_EDID_FIRMWARE=y gebaut sein.


    Prüfbar unter Debian/Ubuntu mit:

    Code
    1. grep "CONFIG_DRM_LOAD_EDID_FIRMWARE" "/boot/config-$(uname -r)"


    Wenn ihr schon eine edid.bin habt, könnt Ihr die verwenden oder wie im o.a. Post beschrieben auch recht einfach auslesen, wenn der VDR ohne edid.bin mit dem eingeschalteten TV gestartet wurde:

    Code
    1. sudo mkdir /lib/firmware/edid
    2. sudo cp /sys/class/drm/card0-HDMI-A-1/edid /lib/firmware/edid/edid.bin

    Ich geh mal von HDMI1 und Dateiname "edid.bin" aus, bitte entsprechend anpassen ...


    Anschliessend grub folgende Kernelschalter übergeben, bei Ubuntu/Debian /etc/default/grub:

    Code
    1. ...
    2. GRUB_CMDLINE_LINUX="video=HDMI-A-1:1920x1080@50D drm.edid_firmware=HDMI-A-1:edid/edid.bin"
    3. ..

    Ausgang HDMI1 wird auf 1920x1080@50p forciert, das D ist kein Typo, das gehört so für den digitalen Ausgang. Die Zeile ist so für Kernel >=4.15.0 gültig.


    Für Kernel <4.15.0 muss man video=HDMI-A-1:1920x1080@50D drm_kms_helper.edid_firmware=HDMI-A-1:edid/edid.bin verwenden.


    Dann muss die edid.bin in der initramfs zur Verfügung stehen, dazu übernehmen wir den Hook aus dem o.a. Kodi Post sudo vi /etc/initramfs-tools/hooks/include-edid-data

    Dran denken den Namen der edid anzupassen, sollte er nicht "edid.bin" sein ... sudo chmod +x /etc/initramfs-tools/hooks/include-edid-data ebenso nicht vergessen.


    Bei Debian/Ubuntu die Konfiguration nun so übernehmen:

    Code
    1. sudo update-initramfs -u
    2. sudo update-grub

    Und dann abschliessend noch die edid.bin für Xorg definieren:

    Etwaige Modelines könnt ihr nun entfernen bzw. auskommentieren.


    Nach dem sudo reboot und abgezogenem HDMI Kabel sollte sich dann entsprechendes zeigen:

    bzw. Xorg.0.log, siehe Anhang.


    Vielen Dank an Space , seahawk1986 und redstorm aus dem Kodi Forum.


    Regards

    fnu

    Dateien

    • xorg0.log.txt

      (11,68 kB, 29 Mal heruntergeladen, zuletzt: )

    HowTo: APT pinning

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

  • Vielen Dank für die ausführliche Zusammenfassung :tup


    Weißt du zufällig, wie sich das verhält, wenn man wie von dir beschrieben eine Konfiguration aufbaut und dann andere Bildschirme anschließt? Kann man da ohne Reboot (für den man dann das Laden der EDID ausbaut) die Bildschirme neu erkennen lassen und an die neue EDID kommen? Bei nvidia-GPUs genügt es ja eine xorg.conf ohne Angabe einer EDID zu laden - das wäre praktisch, wenn sich die X-Konfiguration mit Intel-Grafik für yavdr-ansible automatisieren ließe.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Wenn ich mich richtig erinnere ist das auch bei Intel Grafikkarten möglich. Es könnte aber sein, dass zusätzlich zu der geänderten xorg.conf auch noch ein "echo > /sys/module/drm_kms_helper/parameters/edid_firmware" nötig ist.

    MLD 5.1 mit vdr 2.2 - lirc yaUSBir - Octopus NET S2 - SCR - XFX GeForce 9300 mit Intel E3200 - 2GB RAM -
    WD Green 12TB HDD - SanDisk 64GB SSD - Lian Li PC-C37B - Samsung LE40A559
    MLD 5.4 mit vdr 2.4 - Raspberry Pi 3 - rpihddevice
    MLD 5.1 mit vdr 2.2 - Banana Pi - softhddevice
    MLD 5.0 mit Squeeze Play - Raspberry Pi 2 - 32GB SD - 7" Touch TFT
    MLD 2.0 mit vdr 1.6 - SMT-7020s - 80GB HDD

  • Weißt du zufällig, wie sich das verhält, wenn man wie von dir beschrieben eine Konfiguration aufbaut und dann andere Bildschirme anschließt?

    Also ich habe schon immer die edid.bin meines Panasonic TV auch mit anderen Monitoren verwendet, um die 50hz Ausgabe zu forcieren.


    Die im EDID enthaltenen Modelines sind nach "Electronic Industries Alliance (EIA-861B)" standardisiert und sollten von den allermeisten Displays unterstützt werden.


    Auch im Falle von Intel nutze ich nun die edid.bin meines Pansonic auf dem Test-VDR an einem hp FullHD Desktop Monitor. Dessen EDID beinhalten keine 50hz Modelines, aber zeigt sie dennoch an ...


    Es gibt natürlich keine Garantien, aber in 98% der Fälle sollte eine Standard edid.bin mit einer EIA Standardauflösung erstmal funktionieren.

    HowTo: APT pinning

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

  • Ich bekomme an meinem Haswell-Laptop nur dann auf einem über HDMI angeschlossenen Bildschirm ein Bild, wenn ich den internen Bildschirm in der Grub-Konfiguration abschalte, also sowas setze:

    GRUB_CMDLINE_LINUX="video=HDMI-A-2:1920x1080@50D drm.edid_firmware=HDMI-A-2:edid/edid.HDMI-2.bin video=eDP-1:d"


    Sonst bleiben beide Bildschirme schwarz (interessanterweise wird aber trotzdem der X-Server erfolgreich mit den Display-Daten aus der EDID gestartet). Hat jemand schon mal erfolgreich mehr als einen Monitor statisch konfigurieren können?


    Es gibt natürlich keine Garantien, aber in 98% der Fälle sollte eine Standard edid.bin mit einer EIA Standardauflösung erstmal funktionieren.

    In den EDID-Dateien kann ja auch noch eine Beschreibung der unterstützten Tonformate stecken, daher ist das vermutlich für AV-Receiver nicht ganz unwichtig, was da tatsächlich als unterstützt gelistet wird.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Bzgl. Tonformate, da hast Du vmtl. schon recht, kann mir aber nicht so recht erklären wie die o.a. EDID Konfiguration Einfluss auf die Ton Ausgabe nehmen sollte ... es wird DRM & Xorg bedient, aber weder alsa noch pulsaudio ...


    Ausserdem wäre in der Mehrheit der Fälle eher "EDID" Infos eines AVR hilfreich :P


    Wegen Deiner Grub Konfiguration, m.E.n. kann grub tatsächlich nur mit einem Display umgehen und das Zweite muss genauso abgeschaltet werden, wie Du es machst.



    HowTo: APT pinning