Skindesigner mit SVG-Rendering-Support

  • Ich habe mich mal mit dem Thema "Vektorgrafik in VDR-Skins" befasst. Nachdem es mit dem Skindesigner ja nun eine äußerst praktische Lösung zum Skin-Schreiben für den VDR gibt, bietet es sich natürlich geradezu an diese Funktion dort zu platzieren, damit möglichst viele Skin-Entwickler davon profitieren können. Man spart sich mit eingebautem SVG-Support nicht nur das manuelle Umwandeln (falls man seine Icons mit Inkscape erstellt) sondern man profitiert auch davon, dass das Bild passend zur gewählten Auflösung gerendert wird. Unschärfen durch Skalieren treten somit keine mehr auf.


    Wenn es um SVG im "Open-Source-Bereich" geht kommt man um Cairo in Kombination mit "librsvg" eigentlich nicht herum. Cairo selbst kann mit PNG als Rasterformat umgehen. JPEG für die Scraper-Bilder habe ich mit "libjpeg" zusätzlich nachgerüstet. Letztere ist eigentlich garkeine eigene Abhängigkeit, denn der VDR benötigt auch die libjpeg. Ich empfehle "libjpeg-turbo". Es sollte aber eigentlich jede gängige libjpeg gehen, denn spezielle Features der libjpeg-turbo nutze ich nicht.


    Unterstützte Bildformate sind damit: PNG, SVG und JPG.


    Die Abhängigkeit zu ImageMagick oder GraphicsMagick entfällt dabei komplett. Rastergrafik wird von Cairo skaliert, SVG wird über librsvg direkt über Cairo auf die gewünschte Zielgröße gerendert. Dabei wird auch Anti-Aliasing verwendet.


    Ich pflege die angepasste Version aktuell in einem eigenen GIT-Repository. Entwickelt habe ich das ganze in Absprache (via PM) mit Louis. Ziel ist es, die Repositories, nachdem die eventuell neu reingekommen Bugs raus sind, wieder zusammenzuführen.


    Bitte in diesem Thread nur Bug-Reports und Feature-Requests, die direkt mit dem Laden von Bildern (besonders SVG) zu tun haben. Ich werde nur Anpassungen und Fixes in diesem Bereich umsetzen. Alle anderen Änderungen pulle ich regelmäßig aus dem Repository von Louis.


    Link zum Repository: https://github.com/M-Reimer/vdr-plugin-skindesigner/

  • Moin,


    coole Sache...vielen Dank an M-Reimer für die Unterstützung! :tup


    Testet mal fleissig, damit ich das bald ins offizielle Git aufnehmen kann ;)


    Ciao Louis

  • Getestet und für gut befunden.


    Jetzt kannst du endlich deine geliebten SVGs einsetzen ;) Wann bekommt man eigentlich mal was Holo-technisches zu sehen? :D


    Ciao Louis

  • Hab's mal installiert. Funktioniert bislang so gut wie vorher.


    Sichtbarer Unterschied bei metrixHd: In displaychannel werden die nicht aktiven Symbole (z.B. HD, REC und das ganz außen rechts :) deutlich dunkler bzw. mit mehr Transparenz als beim Original angezeigt. Finde ich persönlich allerdings eher besser, vorher konnte ich den Unterschied zwischen aktiv und nicht aktiv schlecht erkennen.

    KODI, tvh, arch x86_64, Octopus net 2 x Duoflex C/C2/T2 , NUC7i3BNH, Crucial MX300 2TB, LG LM 669S

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

  • Stehe gerade aufm Schlauch. Bekomme folgende Fehlermeldung und weiß gerade nicht warum :(

    Code
    *** Plugin skindesigner:
    g++ -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -fPIC -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -I/usr/src/v4l-dvb/linux/include/uapi -c -DPLUGIN_NAME_I18N='"skindesigner"'  -I/usr/include/libxml2 -I/usr/local/src/vdr-git/include -I/usr/include/freetype2   -pthread -I/usr/include/librsvg-2.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/cairo -I/usr/include/libpng12 -I/usr/include/pixman-1 -I/usr/include/freetype2   -ljpeg -o libcore/imageloader.o libcore/imageloader.c
    libcore/imageloader.c: In member function ‘virtual void cImageImporterSVG::DrawToCairo(cairo_t*)’:
    libcore/imageloader.c:212:44: error: ‘rsvg_handle_render_cairo’ was not declared in this scope
    libcore/imageloader.c: In member function ‘virtual void cImageImporterJPG::DrawToCairo(cairo_t*)’:
    libcore/imageloader.c:318:37: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    make[1]: *** [libcore/imageloader.o] Error 1


    Gruß Patrick

    Gruß Patrick


    [size=8]* Meine NeverEndingProjects ;) *


    vectra --- glasslike ---

  • Ich bekomme das Plugin gegen die neuen Libraies nicht gebaut:

    Hat einer eine Idee was hier noch fehlt?

    Gruß
    Frodo

  • Ins blaue geraten das dev Paket von librsvg?

    - Client1: Thermaltake DH 102 mit 7" TouchTFT * Debian Stretch/vdr-2.4.0/graphtft/MainMenuHooks-Patch * Zotac H55-ITX WiFi * Core i3 540 * 4GB RAM ** Zotac GT630 * 1 TB System HDD * 4 GB RAM * Harmony 900 * satip-Plugin

    - Client2: Alfawise H96 Pro Plus * KODI
    - Server: Intel Pentium G3220 * DH87RL * 16GB RAM * 4x4TB 3.5" WD RED + 1x500GB 2.5" * satip-Plugin
    - SAT>IP: Inverto iLNB

  • Das ist installiert:

    Gruß Patrick


    [size=8]* Meine NeverEndingProjects ;) *


    vectra --- glasslike ---

  • Die Pakete sind vorhanden:


    Ich sehe gerade unter Ubuntu Trusty baut das Plugin.
    Das heißt mit Precise bzw. dem aktuellen YaVDR funktioniert es nicht, da dort die libcairo älter ist (precise: 1.10 bzw. trusty: 1.13) .

    Gruß
    Frodo

  • libcairo ist nicht schuld sondern librsvg. Dort hat es in der Zwischenzeit leider eine "Regeländerung" gegeben. Man hat jetzt die Wahl zwischen


    a) Doofer Warnung das man "rsvg-cairo.h" nicht direkt includen darf
    b) Fehlende Rückwärtskompatibilität oder
    c) Komischer Workaround der prüft ob ein "define" aus einem der von "rsvg.h" includeten Header-Files gesetzt ist.


    Ich habe mich für c) entschieden. Fix ist im GIT.


    Kann mir einer der YaVDR-Nutzer bitte seine librsvg-Version nennen?


    Was die Warnings angeht: Die müssen natürlich auch noch raus. Wenn da also jemand mit dem aktuellen GIT-Stand noch irgendwas aus der Ecke "imageloader.h" oder "imageloader.c" bekommen sollte, dann immer her damit.


  • Sichtbarer Unterschied bei metrixHd: In displaychannel werden die nicht aktiven Symbole (z.B. HD, REC und das ganz außen rechts :) deutlich dunkler bzw. mit mehr Transparenz als beim Original angezeigt. Finde ich persönlich allerdings eher besser, vorher konnte ich den Unterschied zwischen aktiv und nicht aktiv schlecht erkennen.


    Das "HD" und das "Wide" habe ich bereits neu gemacht (liegt als SVG im metrixHD-Skin). Das Original war nach dem Skalieren sichtbar verwaschen. Mit der SVG kann das nicht mehr passieren.


    Für die Skin-Entwickler: Wenn SVG und PNG parallel liegen, dann wird SVG bevorzugt verwendet.


    Und noch als allgemeine Info: Die gerenderten SVGs landen in dem Cache, den Louis schon für skalierte Rastergrafiken vorgesehen hatte. Es wird also nur einmal gerendert, was der Performance zu gute kommt.

  • Cool. Jetzt baut es durch. Danke Dir

    Gruß Patrick


    [size=8]* Meine NeverEndingProjects ;) *


    vectra --- glasslike ---

  • M-Reimer
    Bei YaVDR 0.5 bzw. Ubuntu Precise 12.04 hat die librsvg die Version 2.36.1 .


    Mit deinem letzten Fix baut es unter Precise noch immer nicht, ich habe jetzt die Cairo Version 1.13 von Trusty nach Precise portiert mal sehen ob es damit klappt.

    Gruß
    Frodo

  • Danke. Die Version, ab der die neuen Regeln gelten, ist 2.36.2. Somit ist YaVDR da knapp drunter.


    Welchen Fehler bekommst du denn? Der ausschlaggebende Fehler bei dir war genau der, den ich gerade versucht habe zu fixen. Hast du mal "make clean" versucht?

  • Danke für den Tipp, nach einem "make clean" bzw. "debclean" baut es auch mit Cairo 1.10 :)

    Gruß
    Frodo

  • Ich habe mal alle verbleibenden Compiler-Warnings gefixt und dafür gesorgt, dass Debug-Meldungen aus dem imageloader-Code nurnoch im Syslog landen wenn das auch im Setup so konfiguriert ist.


    Allerdings frage ich mich ob man da nicht ohnehin anders vorgehen sollte.


    Echte Fehler beim Bild-Laden sollten meiner Ansicht nach immer geloggt werden. Und zwar nicht mit "dsyslog" sondern korrekt mit "esyslog".

  • Mit dem Holo Theme crashed bei mir der VDR alle anderen Themes funktionieren. Ich habe meine Logs bereits hier abgelegt, weis aber nicht ob die hilfreich sind.

    Gruß
    Frodo

  • Für mich nicht. Das wäre jetzt der richtige Zeitpunkt dafür, dass hier mal jemand aufschlägt, der sich mit sowas auskennt...


    Mit c++filt kann man das zwar etwas lesbarer machen:


    Aber weiterhelfen tut mir das auch nicht. Keine Ahnung ob meine Änderungen hier überhaupt etwas mit dem Crash zu tun haben.

Jetzt mitmachen!

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