web (HbbTV, VDR*ELEC), Milestone 1 erreicht

  • Wenn ich bei meiner TT6400 die OSD-Größe im Ausgabedevice (dvbhddevice) entsprechend fest einstelle, z.B. auf 1024x576, dann skaliert der skindesigner entsprechend

    Um so besser.

    Was ich aber gesehen habe ist das die Images nicht scaliert werden. D.h. die Icons bleiben unverändert und passen dann nicht immer

    in die vorgesehenen Plätze. Wenn ich skindesigner mit einem 3940x2160 OSD laufen lasse dann passt das nicht so recht.

    Letztlich ist es nur wichtig das die Oberflächen plugins wissen wie gross das OSD ist. Und der Ansatz von oben würde ihnen das kaputt machen wenn das web plugin das OSD verändert und nicht mehr zurück setzt.

  • Was ich aber gesehen habe ist das die Images nicht scaliert werden. D.h. die Icons bleiben unverändert und passen dann nicht immer

    in die vorgesehenen Plätze. Wenn ich skindesigner mit einem 3940x2160 OSD laufen lasse dann passt das nicht so recht.

    Normalerweise sollten die Icons auch alle skaliert werden, das sind alles *.svg Dateien.

    Möglicherweise gibt es da im skindesigner noch irgendwo eine Obergrenze, ich muss mir das mal ansehen.

    Ich kann das aber leider nicht selber testen, da ich noch keine 4K Ausgabe habe.


    Grüße

    kamel5

    VDR 2.6.6: ASUS Prime X470-PRO, Ryzen 7 5700X, 64GB, 6TB HD, GT1030, Fedora 39 Kernel 6.8 X86_64, Devicebonding 2 x 1 auf 2, TT6400, DVBSky S952 V3

    Git-Repo: gitlab.com/kamel5

  • Ich würde trotzdem sagen, dass ein DrawImageScaled() die sauberere Lösung wäre, falls kls da mitgeht. Ich poste später mal einen Patch, dann könnte man es mal testen...

  • Ungetestet: https://github.com/rellla/VDRS…e252443610c12acbc2ce7a61f


    Und die scaleAndPaint könnte etwa so aussehen:


    ... auch ungetestet.

  • Ich würde trotzdem sagen, dass ein DrawImageScaled() die sauberere Lösung wäre, falls kls da mitgeht. Ich poste später mal einen Patch, dann könnte man es mal testen...

    Das schöne am SVG ist ja gerade das man es verlustfrei in alle Auflösungen skalieren kann. Wenn du auf "Pixel Ebene" skalierst gibst du den Vorteil von immer scharfen Kanten wieder auf.

  • Da hast du natürlich recht, aber mit SVGs haben wir es doch bei einem cImage bzw. hier im speziellen mit den Daten die der cefbrowser aktuell liefert doch gar nicht zu tun, oder?

    OpenGL behandelt cImage praktisch als Texture und mit DrawImageScaled könnte man dem Draw einfach noch ein Zielrechteck mitgeben. Das gibt es ja so noch nicht.

  • Ich habe mich um die dirtyRecs im Browser gekümmert und es ist tatsächlich so, daß es einiges bringt.

    Es gibt zwar immer noch Situationen, in den das Vollbild übertragen werden muss, aber innerhalb einer Seite sind die OSD-Teile z.T. erheblich kleiner und der Speed nimmt zu.

    Und die scaleAndPaint könnte etwa so aussehen:

    So ähnlich habe ich es auch gemacht, allerdings kann ich noch nicht auf sws_scale verzichten.

    Da ich jetzt z.t. nur noch OSD-Parts habe, besteht das Problem, daß sowohl die Koordinaten 'recPoint', als auch die Breite und Höhe umgerechnet werden müssen.

    Das DrawImageScaled gefällt mir gut. Die echten Koordinaten (recPoint) kann ich berechnen, das Original-Image (unscaled) habe ich und die Faktoren können auch berechnet werden. Damit bleibt alles beim Ausgabedevice hängen und man sagt nur noch, was man genau will.

    Leider kann ich das so gar nicht testen, weil es das falsche Ausgabedevice ist.


    In VDR*ELEC könnte man entsprechende Patches zumindest für LE unterbringen.

  • Ich hoffe, das funktioniert auch so ;)

    Zabrimus Bei vdr-plugin-web müsstest du nochmal schauen, ob das mit dem (tColor *) cast auf das uint_8 image so richtig ist, da bin ich zu wenig C Profi.

    Und das x/y-Scaling fehlt natürlich auch noch.


    Gruß

    Andreas

  • Sooo.. Ich habe alle Patches zusammengesammelt. Für softhdodroid fehlte noch ein Patch für das cDummyPixmap.

    Das gesammelte Werk kann man hier finden (Branch scale_test).


    Und es funktioniert :) Das OSD hat noch Fehlfarben aufgrund des falschen Pixelformats (bgra, rgba), aber das ist lösbar. Den Browser habe ich der Einfachheit halber, auf einer anderen Maschine laufen.

    Ansonsten einwandfrei. Kein Skalieren mehr, sondern einfach nur der Aufruf von DrawImageScaled.


    Das ist nur ein Proof of Concept und funktioniert nur mit CoreELEC und softhdodroid.


    Aufgrund des VDR Patches sehe ich Probleme mit den anderen Ausgabedevices, da diese die neuen Funktionen nicht implementieren. Vielleicht wäre eine Default-Implementierung sinnvoll? Und dann ein konfigurierbares Plugin - sws_scale oder Skalierung über das Device?

  • Die Funktion DrawImageScaled ist neu und sollte niemand stören der sie nicht nutzt.

    Ja. aber die ist pure virtual und wenn die nicht implementiert wird, dann schlägt die Kompilierung fehl oder sehe ich da was falsch?


    Edit:

    Nee. Kompiliert nicht:

  • Ja. aber die ist pure virtual und wenn die nicht implementiert wird, dann schlägt die Kompilierung fehl oder sehe ich da was falsch

    Da bin ich überfragt ;)


    Aber ich hätte ein paar Patches für dich, die du dir ansehen kannst -> https://github.com/rellla/VDRSternELEC/commits/WIP/cef

    Ich bin auf ein paar Probleme gestossen:

    - das addon Verzeichnis liegt in ${DEVICE} nicht in ${PROJECT} (zumindest bei LE)

    - locale wird nicht gebaut, weil es in der addon.list nicht steht. Das automatische Bauen habe ich raus...

    - ich baue cefbrowser als .zip Datei und lasse es beim update kopieren. Das vdrsternelecupdate schlägt fehl, wenn Dateien schon vorhanden sind.

    - addons werden bisher nicht geupdated

    - mc aus den system-tools meckert die fehlende libssh2.so an. Keine Ahnung warum das jetzt so ist. Evtl. nur bei mir. Ansonsten wäre das ein bug in LE

    - der cefbrowser ist als Paket nun dabei. Dabei werden die binaries in root/cef/cef-*.tar.bz2 abgelegt und müssen manuell einmalig auf den client kopiert werden. Der Browser an sich wird beim update kopiert

    - die WIP/DO_NOT_MERGE Sachen betreffen ein paar Dinge bzgl. scaling und damit das Entwickeln einfacher ist

    - der graphicsmagick patch z.B. verhindert, dass abgebrochen wird, bevor ein coredump erstellt wird. Ansonsten fängt das der signal handler von graphicsmagick nämlich vorher ab


    Vielleicht kannst du die ersten Sachen mal testen und gebrauchen. Ich werde dann auch mal wieder vdr-plugin-web versuchen...


    Gruß

    Andreas

  • Und es funktioniert :) Das OSD hat noch Fehlfarben aufgrund des falschen Pixelformats (bgra, rgba), aber das ist lösbar.

    Welches Format liefert der Browser?

  • Zabrimus: Meinst du, die VDR*ELEC Boxen würden den Transcoder packen?

  • So, konnte es jetzt auch testen. Das sieht schon richtig gut aus. Flott, weniger bis kaum Abstürze (cefbrowser hats mal geschleudert...).

    Was mich ein bißchen aufgehalten hat, war, dass das OSD völlig zerwürfelt dargestellt wurde und ich habe dann auch herausgefunden, warum...


    Hast du was dagegen, als OSD Level nicht das Subtitle Level zu wählen? softhddevice-drm-gles (und evtl. auch andere) behandeln das etwas eigen. Z.B. werden hier teilweise X und Y ignoriert und das passt dann nicht mehr. Wenn ich da einen anderen Level wähle funktioniert alles wunderbar. Ich muss mal in VDR-Code schauen, wie das mit den Untertiteln generell gedacht ist.

    Mit den Farben habe ich übrigens kein Problem.


    Bei ZDF sehe ich noch kein Video, sondern höre es nur, aber das wird schon ;) Jetzt ist es auch viel besser zu testen, da sich kaum eine Komponente verabschiedet...


    Gruß

    Andreas

  • Welches Format liefert der Browser?

    Ich wandle im Browser das Format um, damit die übertragenen qoi die richtigen Farben haben (rgba) und im sws_scale wandle ich das wieder. Ich probiere mal aus, ob ich das aus dem Browser rausnehme und dann schauen, was im Plugin passiert. Dann haben zwar die Bilder Falschfarben, aber es geht ja nur um die Darstellung.

    Meinst du, die VDR*ELEC Boxen würden den Transcoder packen?

    Aktuell macht der Transcoder sowieso nur ein copy von audio/video, weil mir noch nichts anderes untergekommen ist. Ich denke, das sollte im VDR*ELEC funktionieren, sofern die ffmpeg-tools mit installiert werden.

    Sollte aber echtes Transcoding stattfinden müssen, bin ich mir da gar nicht mehr sicher. Ich meine irgendwo gelesen zu haben, daß Hardware-Transcoding funktioniert, aber nur wenn nicht parallel ein Decoder (Ausgabedevice) läuft. Vielleicht liege ich da auch falsch oder es betraf nur ältere Hardware. Beim Software-Encoding bin ich mir absolut unsicher, ob das schnell genug ist.

    Hast du was dagegen, als OSD Level nicht das Subtitle Level zu wählen?

    Überhaupt nicht. Den Level habe ich mehr oder minder zufällig gewählt. Welcher Wert soll es denn werden?

    Mit den Farben habe ich übrigens kein Problem.

    Okay. Jetzt wird es seltsam. RGB scheint es in allen Permutationen zu geben. Das wird aber lösbar sein und wenn es pro Ausgabedevice passieren muss oder konfigurierbar.


    Die Patches muss ich mir mal in Ruhe anschauen. Da ist ja eine Menge Holz.

  • cefbrowser hats mal geschleudert...

    Ich wollte gerade fragen, was denn im Stacktrace steht. Aber das wird ja nix, weil ich eine eigen-compilierte Version von cef habe und da die sanitizer eingeschaltet habe. gdb und valgrind funktionieren leider mit cef nicht.

    Wenn du das irgendwie reproduzieren kannst.... :)

  • Okay. Jetzt wird es seltsam. RGB scheint es in allen Permutationen zu geben. Das wird aber lösbar sein und wenn es pro Ausgabedevice passieren muss oder konfigurierbar.

    Ich habe in meinem Browser mal die Konvertierung rausgenommen und jetzt sind die Farben mit softhdodroid auch wieder richtig. Kannst du mal schauen, wie es in softhddevice-drm-gles aussieht? Falls notwendig, würde ich die Formatänderung vom Browser in das Plugin packen.


    uncomment_bgra_to_rgba.patch.txt

Jetzt mitmachen!

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