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
    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
    sudo mkdir /lib/firmware/edid
    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
    ...
    GRUB_CMDLINE_LINUX="video=HDMI-A-1:1920x1080@50D drm.edid_firmware=HDMI-A-1:edid/edid.bin"
    ..

    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
    sudo update-initramfs -u
    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.


    => Anleitung für SuSE von 447377 - Klick: Zusammenfassung Intel VAAPI & edid.bin

    => Anleitung für ArchLinux von M-Reimer - Klick: Zusammenfassung Intel VAAPI & edid.bin


    Regards

    fnu

    Dateien

    HowTo: APT pinning

    10 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.5 mit vdr 2.6 - 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.5 mit vdr 2.4 - Raspberry Pi 3 - rpihddevice
    MLD 5.5 mit Squeeze Play - Raspberry Pi 2 - 32GB SD - 7" Touch TFT

  • 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

    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

  • Wegen Ton: Wenn ich ohne HDMI starte, scheinen die entsprechenden Soundkarten gar nicht angelegt zu werden. Gibts hier noch einen Mechanismus, der das erledigt und ggf. auch pulseaudio beibringt auf ein HDMI-Profil zu wechseln?


    Gruß

  • fnu: kannst du vielleicht noch etwas dazu schreiben, wie du auf die Namen der Modes in der xorg.conf ("1920x1080@50p" "1920x1080@59.94p" "1920x1080@23.97" "1920x1080@24p" "1920x1080@60p") gekommen bist?

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • seahawk1986


    Hmm, das fragst Du nun nach so langer Zeit ... :huh:


    Die Namen hatte ich schon länger und die, so aus meiner der Erinnerung, müssen so aus der edid.bin kommen, da die technischen Werte der Modelines auch daraus kommen. Dementsprechend müssten die Namen Intel, AMD, Nvidia übergreifend dann auch gleich sein. Im Prinzip auch für Monitore/TV, da die Modeline Werte ja in der Regel bei den Herstellern der Standardisierung nach "Electronic Industries Alliance (EIA-861B)" folgend definiert werden. Wird aber sicher den ein oder anderen kleinen Unterschied geben, zwischen den Herstellern und evtl. auch Modellen ...


    Wenn man seine eigenen Modelines in der xorg.conf verwendet, kann man ja dann auch eigene Namen vergeben.


    Aber mit dem VDR habe ich neben dem 50Hz nur noch den 60Hz Mode getestet, die anderen Modi wären ja m.E. nur für Kodi oder so interessant.


    Gruß

    Frank

    HowTo: APT pinning

    Einmal editiert, zuletzt von fnu ()

  • Erstellung einer xorg.conf / 20-intel.conf für Intel-Grafikeinheiten


    Ergänzend zum Eingangsbeitrag von fnu hier noch eine Anleitung,

    wie man selber eine xorg.conf / 20-intel.conf für Intel-Grafikeinheiten

    und dem eigenen Monitor / Fernseher erstellen kann.


    Hier die Anleitung:


    Um zu wissen welche Auflösungen und Bildschirmwiederholfrequenzen der Monitor unterstützt,

    können diese auf der Konsole ermittelt werden.


    Auf der Konsole zuerst das Display exportieren (je nachdem wo der Monitor angeschlossen ist):

    export DISPLAY=:0


    Ermittelung der unterstützenden Auflösungen des Display:

    xrandr -q


    Ermittelung der Modeline für z.B. 1920x1080 50 Hz:

    cvt 1920 1080 50


    Ergebnis der Ausgabe:

    Modeline "1920x1080_50.00" 141.50 1920 2032 2232 2544 1080 1083 1088 1114 -hsync +vsync


    Die ermittelten Modelline können dann in der Section "Monitor" in der xorg.conf / 20-intel.conf eingetragen werden.

    (Siehe Abschnitt weiter unten)


    Aufbau der xorg.conf / 20-intel.conf


    Die xorg.conf / 20-intel.conf hat bei einem Display 3 Abschnitte (Device, Screen und Monitor).


    Im Abschnitt Device wird die Grafikeinheit mit den entsprechenden Optionen beschrieben.

    Wenn gewünscht, kann bei BoardName auch die eigene Grafikeinheit eingetragen werden.

    Die restlichen Werte brauchen nicht verändert werden.

    Meine Konfiguration hat auch die Option mit der CustomEDID.


    Im Abschnitt Screen wird festgelegt, wo der Monitor angeschlossen ist.

    In der SubSection werden die Auflösungen und Bildschirmwiederholfrequenzen des Monitor festgelegt.


    Im Abschnitt Monitor werden dann die ermittelten Modeline eingetragen.


    Bitte beachtet das cvt die Modeline mit einem "_" ausgibt, in der Anleitung von fnu ist ein "@".

    Die Angaben müssen in der xorg.conf / 20-intel.conf und /etc/default/grub dann gleich sein.


    Beispiel-xorg.conf / 20-intel.conf:

    Als Grundgerüst kann diese Konfiguration übernommen werden und auf die eigene Bedürfnisse angepasst werden.


    Wer sich in diesem Thema weiter vertiefen möchte, findet in den manpages auch Hilfe:

    https://manpages.ubuntu.com/ma…/bionic/man4/intel.4.html

    https://manpages.ubuntu.com/ma…nic/man5/xorg.conf.5.html


    Schöne Grüße


    Christian

  • Ergänzend zum Eingangsbeitrag von fnu hier noch eine Anleitung,

    Das ist keine Ergänzung zu meinem Beitrag, eher das Gegenteil, da dieser genau darauf abzielt Modelines in xorg.conf zu vermeiden:

    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 ...

    Diese Modelines lassen sich auch nicht im Boot-Prozess nutzen, da muss man entweder eine VESA kompatible Auflösung setzen oder eben eine binäre Datei (edid.bin) mit den Display Modes des verwendeten Monitors hinterlegen.


    Ich denke alle Intel-Nutzer haben bis zu diesem Post feste Modelines für Intel verwendet bzw. tun es immer noch ...


    Regards

    fnu

    HowTo: APT pinning

  • Wenn man seine eigenen Modelines in der xorg.conf verwendet, kann man ja dann auch eigene Namen vergeben.

    Ja, das hatte ich im Sommer so gemacht, weil ich nicht ganz durchschaut hatte, wie man an die Bezeichnungen der Modes in den EDID-Daten kommt - natürlich kann ich mir die Modelines aus der EDID holen und mit einem sprechenden Namen in die xorg.conf schreiben, aber ich hatte gehofft, dass es da noch einen (gut automatisierbaren) Kniff gibt, wie man das eleganter lösen kann.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Sorry, dass hatte ich leider überlesen das man laut deiner Anleitung keine Modelines verwenden sollte.


    Zum Versuch habe ich mal meine Konfiguration gemäß deiner Anleitung angepasst und habe u.a. die Modelines auskommentiert.

    Leider hat es bei mir nicht funktioniert, dass Bild wird mit 60 Hz statt 50 Hz angezeigt.


    Bei der Angabe der festen Modelines wird während des booten und des yaVDR-Splashscreen laut Fernseher 60 Hz angezeigt,

    ab dem Moment wo das Fernsehbild kommt wird auf 50 Hz umgeschalten.


    Vielleicht ist je nach Setup der Geräte möglich keine Modelines oder im anderen Fall erforderlich feste Modelines zu verwenden?

    Das muss man wohl ausprobieren. Die Anleitung würde ich jetzt aber mal so stehen lassen, sie wird sicherlich eine Konfigurationshilfe sein.


    Hättest du sonst noch eine andere Idee?


    Schöne Grüße


    Christian

  • ...

    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
    sudo mkdir /lib/firmware/edid
    sudo cp /sys/class/drm/card0-HDMI-A-1/edid /lib/firmware/edid/edid.bin

    Danke für die gute Aufarbeitung zu dem Thema.


    Möchte das auf Ubuntu 18.04.2 LTS (mit yavdr ansible) umsetzen.

    Im Pfad (/sys/class/drm/card0-HDMI-A-1/) ist eine edid mit 0 bytes - finde den Hinweis nicht wie ich eine neue erstelle :(


    Bitte helft mir auf die Sprünge, wo ist die Stelle im o.a. Post zu finden?


    Ich Blindfisch

  • Möchte das auf Ubuntu 18.04.2 LTS (mit yavdr ansible) umsetzen.

    Du kannst auch die vom X-Server über xrandr ausgelesene EDID-Datei nehmen, die in /etc/X11/ vom yavdr-ansible Playbook für jeden erkannten Monitor abgelegt wird (als /etc/X11/edid.ANSCHLUSS.bin) - zeig mal bitte die /etc/ansible/facts.d/drm.fact, da müssten alle nötigen Infos drin stehen, die man zum laden der EDID über die Kernel-Argumente benötigt.

    Im Pfad (/sys/class/drm/card0-HDMI-A-1/) ist eine edid mit 0 bytes

    Bist du sicher, dass du den richtigen Anschluss erwischt hast? Die Datei ist üblicherweise dann leer, wenn da kein Monitor mit auslesbarer EDID dran hängt.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Ok, ich lerne was dazu :)


    Meine Hardware (NUC7i3BNH) hat nur einen HDMI Ausgang. Habe HDMI sogar im Bios auf primary gesetzt.

    In /etc/ansible/facts.d/drm.fact steht:

    Also DP-1


    In /etc/ansible/facts.d/xorg.fact steht noch der bei Installation verwendete Monitor drin. Wie datet man die Geschichte up?

    Sehe gerade das /etc/X11/edid.DP-1.bin auch noch den Installations Monitor enthält.


    In /sys/class/drm/card0-DP-1/ ist auch eine 0 bytes edid Datei.


    Anfängerfehler von mir, hätte gleich am großen Monitor installieren müssen.

  • Wie datet man die Geschichte up?

    Solange du noch keine EDID statisch laden lässt, kannst du die Rolle für die Bildschirmerkennung noch einmal laufen lassen - dazu im yavdr-ansible Verzeichnis folgenden Befehl ausführen (idealerweise den Clon mit git pull vorher noch auf den aktuellen Stand bringen):

    sudo -H ansible-playbook yavdr07.yml -b -i 'localhost_inventory' --connection=local --tags="yavdr-xorg"

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • So habe ich es umgesetzt.


    Bei der xorg config Erstellung will er nicht richtig. Da kommt diese Fehlermeldung:

    Code
    TASK [yavdr-xorg : detect xorg configuration] ***********************************************************************************************************************************************************************
    fatal: [localhost]: FAILED! => {"changed": false, "module_stderr": "Checksum Correct\n\nTraceback (most recent call last):\n  File \"/root/.ansible/tmp/ansible-tmp-1554648575.97-195535689023183/AnsiballZ_xrandr_facts.py\", line 113, in <module>\n    _ansiballz_main()\n  File \"/root/.ansible/tmp/ansible-tmp-1554648575.97-195535689023183/AnsiballZ_xrandr_facts.py\", line 105, in _ansiballz_main\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\n  File \"/root/.ansible/tmp/ansible-tmp-1554648575.97-195535689023183/AnsiballZ_xrandr_facts.py\", line 48, in invoke_module\n    imp.load_module('__main__', mod, module, MOD_DESC)\n  File \"/tmp/ansible_xrandr_facts_payload_5hkzE2/__main__.py\", line 393, in <module>\n  File \"/tmp/ansible_xrandr_facts_payload_5hkzE2/__main__.py\", line 363, in output_data\n  File \"/tmp/ansible_xrandr_facts_payload_5hkzE2/__main__.py\", line 214, in parse_edid_data\nValueError: need more than 0 values to unpack\n", "module_stdout": "Modeline \t\"Mode 14\" 74.25 1280 1390 1430 1650 720 725 730 750 +hsync +vsync\n74.25 1280 1390 1430 1650 720 725 730 750 +hsync +vsync\nModeline \t\"Mode 0\" 74.25 1920 2008 2052 2200 540 542 547 562 +hsync +vsync interlace\n74.25 1920 2008 2052 2200 540 542 547 562 +hsync +vsync interlace\nModeline \t\"Mode 1\" 74.25 1920 2448 2492 2640 540 542 547 562 +hsync +vsync interlace\n74.25 1920 2448 2492 2640 540 542 547 562 +hsync +vsync interlace\nModeline \t\"Mode 2\" 74.250 1920 2008 2052 2200 1080 1082 1087 1125 +hsync +vsync interlace\n74.250 1920 2008 2052 2200 1080 1082 1087 1125 +hsync +vsync interlace\nModeline \t\"Mode 3\" 74.250 1920 2448 2492 2640 1080 1082 1089 1125 +hsync +vsync interlace\n74.250 1920 2448 2492 2640 1080 1082 1089 1125 +hsync +vsync interlace\nModeline \t\"Mode 4\" 74.250 1280 1390 1420 1650 720 725 730 750 +hsync +vsync\n74.250 1280 1390 1420 1650 720 725 730 750 +hsync +vsync\nModeline \t\"Mode 5\" 74.250 1280 1720 1760 1980 720 725 730 750 +hsync +vsync\n74.250 1280 1720 1760 1980 720 725 730 750 +hsync +vsync\nModeline \t\"Mode 6\" 27.027 720 736 798 858 480 489 495 525 -hsync -vsync\n27.027 720 736 798 858 480 489 495 525 -hsync -vsync\nModeline \t\"Mode 7\" 27.000 720 732 796 864 576 581 586 625 -hsync -vsync\n27.000 720 732 796 864 576 581 586 625 -hsync -vsync\nModeline \t\"Mode 8\" 148.500 1920 2008 2052 2200 1080 1084 1089 1125 +hsync +vsync\n148.500 1920 2008 2052 2200 1080 1084 1089 1125 +hsync +vsync\nModeline \t\"Mode 9\" 148.500 1920 2448 2492 2640 1080 1084 1089 1125 +hsync +vsync\n148.500 1920 2448 2492 2640 1080 1084 1089 1125 +hsync +vsync\nModeline \t\"Mode 10\" 74.250 1920 2558 2602 2750 1080 1084 1089 1125 +hsync +vsync\n74.250 1920 2558 2602 2750 1080 1084 1089 1125 +hsync +vsync\nModeline \t\"Mode 11\" 74.250 1920 2448 2492 2640 1080 1084 1089 1125 +hsync +vsync\n74.250 1920 2448 2492 2640 1080 1084 1089 1125 +hsync +vsync\nModeline \t\"Mode 12\" 74.250 1920 2008 2052 2200 1080 1084 1089 1125 +hsync +vsync\n74.250 1920 2008 2052 2200 1080 1084 1089 1125 +hsync +vsync\nModeline \t\"Mode 13\"\n", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}
  • Kannst du mir bitte mal zeigen, wie bei laufendem X-Server die Ausgabe von xrandr -d :0 --verbose aussieht?

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Ja, so:

Jetzt mitmachen!

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