Video Treiber für Odroid-N2+ (softhdodroid)

  • Hallo,

    mir ist noch ein Crash des VDR mit dem Plugin aufgefallen, wenn man die GrabImage-Funktion benutzt.

    Da gibt die Funktion einen nicht initialisierten Pointer zurück, hier der Fix dazu:



    Bzgl. der Capture-Function habe ich noch was herausgefunden:

    Mit diesem Commit ist die Funktionalität schon 2019 in den Kernel von HardKernel gewandert:


    https://github.com/hardkernel/…cd373f250e9fb807615849524


    video_sink: add amvideocap module This will add the amvideocap module to kernel 4.9 

    If the frame rate is higher than 30 fps each second frame get captured


    und zwar in diese Zweige


    https://github.com/hardkernel/linux/compare/odroid-4.9

    https://github.com/hardkernel/linux/compare/odroidn2-4.9.y

    https://github.com/hardkernel/linux/compare/odroidn2-4.9.y-upstream


    Der verwendete Kernel im Ubuntu-Image ist jedoch odroidg12-4.9.y, da fehlt diese Erweiterung noch.


    Lothar

  • Ich habe zwischenzeitlich weiter an dem Grab gebastelt und die Funktionen repariert. Ich habe noch eine Idee wie ich an den Videospeicher komme ohne das amvideocap device. Wenn das nicht klappt dann werden wir wohl doch einen eigenen Kernel dafür brauchen mit dem device.


    PS: das ist noch nicht eingecheckt.

  • Ich habe zwischenzeitlich weiter an dem Grab gebastelt und die Funktionen repariert. Ich habe noch eine Idee wie ich an den Videospeicher komme ohne das amvideocap device. Wenn das nicht klappt dann werden wir wohl doch einen eigenen Kernel dafür brauchen mit dem device.


    PS: das ist noch nicht eingecheckt.

    Wäre klasse wenn das klappt.


    Was habe ich probiert:

    Ich habe mir die Kernel-Sourcen von Coreelec besorgt und den Kernel/Module übersetzt. Hat auch alles soweit geklappt.

    Allerdings will er diesen Kernel nicht booten.

    Ich vermute das liegt noch an Besonderheiten in der boot.ini.

    Vielleicht bekomme ich es noch hin.

  • Leider ist das nicht ganz so einfach. Wenn Du das config von CoreElec nimmst, läufst Du auf compile-Fehler bezüglich der Medientreiber, da diese als Module im Cross-Build dazu gemergt werden.


    Hier steht mehr dazu.

  • Ich habe mal den Ubuntu-Kernel gepatcht, um den ambilight commit von oben in den Ubuntu-Kernel zu bekommen.

    Das ist der patch: ambi.patch. Der patch ergibt 2 rejects, die ich händisch aufgelöst habe (das sind nur ein paar Zeilen in 2 Dateien).

    Das capture-Device habe ich aktiviert, so wie vorher beschrieben. Weiterhin muss man aus dem Kernel-Makefile -Werror auskommentieren. Der Kernel übersetzt dann und bootet auch.


    hyperion.ng erkennt den AML-Grabber. Allerdings gibt hyperion-aml folgenden Fehler aus:


    Code
    1. 2021-11-19T17:08:50.442  AMLOGICGRABBER        : <ERROR> Capture failed to grab entire image [bytesToRead(24883200) != bytesRead(24876720)]

    Die LEDs bleiben leider aus. Hat jemand eine Idee?


    LG

    beta

  • Wenn du jedesmal 24MB grabben willst dann wird das eh nix mit der performance. :)


    Aber schön das du mit hyperion weiter gekommen bist. ich bin eh am basteln für das PIP und habe heute zum ersten mal ein PIP am laufen gehabt.

    Das muss ich aber noch rund machen.


  • Hallo mittlerweile konnte ich auch den ubuntu Kernel mit dem Patch übersetzen.

    Das Device wird nun auch erzeugt.

    Was muss man im Plugin aktivieren um das Grabben zum Laufen zu bringen? Wie gesagt ich würde es nicht mit Hyperion versuchen sondern per boblight plugin.

  • Wenn ich das richtig sehe, sollte der AMLOGIC Grabber direkt das Bild zur Verfügung stellen. Das funktioniert bei mir aber nicht, sondern es kommt o.g. Fehlermeldung. Ich habe heute versucht, die kompletten Teile des CoreElec-Kernels in den Ubuntu-Kernel zu integrieren. Damit habe ich dann aber leider bei VDR kein Bild mehr. Es ist also leider nicht so einfach, wie ich dachte.

    Am sinnigsten wäre es wahrscheinlich immer noch, wenn man den CoreElec-Kernel unter Ubuntu booten könnte...

  • Das geht derzeit gar nicht. Das grabben über das device ist nicht eingebaut weil ich keinen Kernel mit dem Capture device habe. Und im Moment habe ich auch keine Zeit mir einen Kernel zu bauen.

    Hallo, wenn Du willst kannst Du Kernel und Module haben. Ich kann Dir die Sachen per Link zur Verfügung stellen.

  • Hallo, wenn Du willst kannst Du Kernel und Module haben. Ich kann Dir die Sachen per Link zur Verfügung stellen.

    Das nützt ihm ja nichts, solange das grab auf einen Fehler läuft. Da stimmt noch was im Kernel nicht...

    Wenn das im Kernel korrigiert ist, läuft das Ambilight mit Hyperion und AML Grabber von ganz alleine. jojo61 kann da nichts dran machen...

  • jojo61 : Ein Punkt ist mir noch aufgefallen. hyperion bietet ja auch einen framebuffer grabber. Der liefert aber mit Deinem Plugin ein schwarzes Bild zurück, wenn das Video läuft. Wenn kein Video oder TV läuft und das OSD an ist, dann liefert dieser grabber das OSD, allerdings um den Faktor 4 zu klein in der oberen linken Ecke des Bildes. Gibt es eine Möglichkeit, video und osd krrekt auf den Framebuffer zu mappen?

  • Bei UHD scaliere ich das OSD von 1920x1080 auf UHD Format. Das macht der GE2D Scaler. Im Framebuffer liegt es wohl immer noch mit 1920x1080. Deswegen bekommt es der Framegrabber von Hyperion so klein wie es ist. Wenn ich das OSD aber auf UHD Format verwende dann macht der skindesigner Probleme weil er von 1920x1080 ausgeht.

    Meine Versuche mit dem Framegrabber (GE2D Grabber) liefern auch kein Video und nur das OSD. Deswegen habe ich das erstmal aufgegeben.

    Ich werde sicher noch nach dem Grabbing schauen, habe im Moment andere Dinge in der Pipeline :-)

  • Ich nähere mich. Das Bild ist mit dem Amlogic-Grabber gemacht, den ich noch einmal ein wenig angepasst habe.



    Ich vermute, dass das Speichern des Bildes zu langsam ist für 4k. Mit einem Ubuntu-Kernel, in den ich alle CoreElec amlogic media-Treiber kopiert habe (das war ein Stunt!!!!), funktioniert hyperion in 4k mit meinem angepassten hyperion-aml. Allerdings habe ich mit diesem Kernel das Problem, dass VDR-Aufnahmen nicht mehr abgespielt werden können.

    Ich versuche nun einen Kernel mit minimalen Änderungen so zu gestalten, dass das mit meinem angepassten amlogic-grabber passt. Sobald das läuft, mache ich einen Kernel-Patch und ein kleines Howto...


    Die hyperiond CPU-Last liegt bei 20% mit 10 Bildern pro Sekunde in 4k :-)


    jojo61 : Ich will Deinen Thread nicht kapern. Ist das für Dich ok, oder soll ich einen neuen aufmachen?


    LG

    beta

  • Mein aktueller Status ist wie folgt:


    Ich habe Fehler beim AMLOGIC Grabber auskommentiert, damit ich zumindest einen Teil des Bilds sehe. Die Datei ist AmlogcGrabber.cpp (hyperion.ng), wo ich folgende Änderung gemacht habe:



    Ich habe 2 Kernel, die prinzipiell funktionieren. Einmal der Patch von weiter oben, den ich gepostet habe. Mit diesem minimal geänderten Kernel kann ich hyperiond starten und der Grabber funktioniert. Allerdings gibt es ein Problem, wenn ich 4K abspiele oder Aufnahmen, während hyperiond läuft. Das Bild flimmert dann grünlich und irgendwann gibtss einen Kernel ooops. Das passiert nicht, wenn ich hyperiond starten, nachdem das Video/Bild läuft.


    Dann habe ich einen 2. Kernel, bei dem ich media für AMLOGIC komplett mit den CoreElec-Treibern ersetzt habe. Hier sind die Aufnahmen schwarz und ich höre nur den Ton, Live-TV funktioniert, auch mit hyperiond. Ich glaube, jojo61 , wenn Du Zeit hast, müssen wir gemeinsam überlegen, wie man weiterkommen kann. Ich kann gerne den SourceCode beider Kernels zur Verfügung stellen, falls jemand mitschauen mag.


    LG

    beta

  • beta Ich denke man muss das Bild direkt beim grabben sinnvoll runterscalieren. Ansonsten wird das wohl zu langsam werden. Evtl. kann man das gleich mit einem Texturebuffer und opengl machen wenn man mal den Framebuffer hat. Oder es es könnte dann auch mit den ge2d scalern gehen.


    Die beiden Kernel würden mich interessieren. Ich schicke dir noch einen Link per PM da kannst du sie ablegen. Ich habe PIP nun soweit fertig das ich mich mit dem grabben beschäftigen kann :_)

  • jojo61 Ja, der AML grabber kann skalieren mit hyperion-aml --screenshot -s30, aber auch das Bild ist kaputt. Im live-Mode funktioniert es super. Ich habe mir mal CoreElec angeschaut. Die nutzen bei hyperion auch den aml grabber, der schaltet aber auf framebuffer um und nutzt nicht die VPU, wenn ich ich das richtig sehe.


    Die Kernel sollten da sein. Wenn Du Fragen dazu hast, melde Dich. Ich freue mich auf PIP. Danke dafür.

  • So habe gerade das Plugin mit Grab eingecheckt. Man braucht dazu einen Kernel mit dem Device amvideocap0.


    Dabei ist nun auch PIP. Ist aber noch experimentell und benötigt in beiden Streams h264 damit es klappt.

    Das muss im Makefile aktiviert werden wenn man es testen will.


    Feedback zum grab ist willkommen.


    PS: OSD ist derzeit nicht im grab enthalten.