[ANNOUNCE] skinElchi HD 1.0.0 / 1.1.0 - 1.1.2

  • But now I have crash with Arithmetic Exception when start animation in osddemo plugin.

    MaxPixmapSize() return 21856 in GL_MAX_TEXTURE_SIZE.

    Here's the question, what is the right setings in the case of opengl???


    upd

    My bug, fixed.

  • FireFly wäre es möglich den Crash des VDR abzufangen, wenn das Anlegen einer Pixmap durch das gerade aktive Frontend nicht möglich ist (z.B. weil man vorübergehend auf das von dbus2vdr implementierte nulldevice umschaltet)?

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Ich rufe den VDR so auf:

    Code
    gdb --args vdr --record=/usr/lib/vdr/vdr-recordingaction --user=vdr --grab=/tmp --port=6419 --watchdog=0 \
            --shutdown=/usr/lib/vdr/vdr-shutdown.wrapper --dirnames=,,1 -l 3 --userdump --chartab=ISO-8859-9 \
            --lirc=/var/run/lirc/lircd --hide-first-recording-level --instance=0 --video=/srv/vdr/video \
            --plugin="dbus2vdr --shutdown-hooks=/usr/share/vdr/shutdown-hooks --shutdown-hooks-wrapper=/usr/share/vdr-plugin-dbus2vdr/shutdown-wrapper --nulldevice" \
            --plugin="skinelchihd -l /var/lib/vdr/channellogos" \
            --plugin="softhddevice -D -w alsa-driver-broken -w also-no-close-open -v cuvid"

    und bekomme ich diesen Backtrace, sobald ich den VDR mit "r" loslaufen lassen:

    Code
    Thread 1 "vdr" received signal SIGSEGV, Segmentation fault.
    0x00007ffff68471de in cSkinElchiHDDisplayChannel::DrawBackground (this=0x555555ad1550) at displaychannel.c:270
    270     displaychannel.c: Datei oder Verzeichnis nicht gefunden.
    (gdb) bt
    #0  0x00007ffff68471de in cSkinElchiHDDisplayChannel::DrawBackground() (this=0x555555ad1550) at displaychannel.c:270
    #1  0x00007ffff6849305 in cSkinElchiHDDisplayChannel::SetChannel(cChannel const*, int) (this=0x555555ad1550, Channel=0x5555559783e0, ChannelNumber=0) at displaychannel.c:427
    #2  0x00005555556584f3 in cDisplayChannel::DisplayChannel() (this=0x555555b16870) at menu.c:5062
    #3  0x000055555565a263 in cDisplayChannel::cDisplayChannel(int, bool) (this=0x555555b16870, Number=1, Switched=<optimized out>) at menu.c:5023
    #4  0x00005555555fc9e9 in main(int, char**) (argc=<optimized out>, argv=<optimized out>) at device.h:355

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Das sieht aus, als wäre OSDsize 0 x 0 Pixel. Das wird mit esyslog protokolliert und im Log müsste dazu etwas mit "skinelchiHD DisplayChannel: Creation of pixmap failed....." stehen. Bekommst Du das?

    Abfangen kann ich das nicht, nur wenn vor JEDEM Pixmap-Zugriff ein if stehen würde was das ganze nicht nur unleserlich sondern auch fehleranfällig macht. Allein in displaychannel.c sind 122 Pixmap-Zugriffe! Der Konstruktor kann auch kein "false" oder sowas zurück liefern um anzuzeigen, dass das Erstellen des OSD nicht funktioniert hat.

    Das Skin geht davon aus, dass es auch etwas darstellen soll wenn es aufgerufen wird - warum sonst sollte man es aufrufen? Wenn wirklich nichts dargestellt werden soll müsste es dafür einen Schalter im VDR geben, der das OSD disabled, also die Skins nicht aufruft.

    Als Workaround müsste das setzen einer OSD Größe im nulldevice helfen (GetOSDSize darf nicht 0 x 0 zurück liefern).

  • wäre es möglich den Crash des VDR abzufangen


    Probier doch mal, ob die Kanalanzeige auch crasht wenn Du folgende Zeile in displaychannel.c einfügst:

    Diff
    --- displaychannel.c    2022-02-12 11:37:06.279846485 +0100
    +++ displaychannel.c.orig    2022-02-26 15:24:32.805986767 +0100
    @@ -74,6 +74,7 @@
        DSYSLOG("skinelchiHD: OSDsize Channel %dx%d left=%d/%d top=%d/%d width=%d/%d heigth=%d/%d",
                OSDWidth, OSDHeight, OSDsize.left, Setup.OSDLeft, OSDsize.top, Setup.OSDTop, OSDsize.width, Setup.OSDWidth, OSDsize.height, Setup.OSDHeight);
     
    +   OSDHeight = OSDsize.height;
        if (OSDHeight >= 2160) {
           wLogo          = 320;
           hLogo          = 240;
  • Das macht es leider nicht besser:

    Das Problem scheint zu sein, dass da ein Nullpointer für die Pixmap zurückgegeben wird, weil das osd des nulldevice von dbus2vdr osd::CreatePixmap nicht implementiert und der VDR einen Nullpointer liefert, wenn keine True-Color OSD vorhanden ist: http://git.tvdr.de/?p=vdr.git;…06054bad2a2;hb=HEAD#l1914 ff.


    Ich versuche mal die cDummyPixmap und das cDummyOSD, die lnj in softhddevice eingebaut hat, für das nulldevice von dbus2vdr zu übernehmen.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Beim Start prüft skinElchiHD, ob ein TrueColor OSD zur Verfügung steht (https://github.com/FireFlyVDR/…d95941/skinelchihd.c#L216). Wenn sich das dann nachträglich ändert wird's schwierig ....

    Ähnlich Probleme gibt's wenn das Ausgabedevice detached ist wenn der VDR gestartet wird.

    Eigentlich wäre eine Funktion SuspendOsd() im VDR nötig um jegliche Skin-Aufrufe zu unterbinden, oder?

  • skinElchiHD V 1.1.0


    Es wurde mal wieder Zeit für etwas Produktpflege:

    - separate Farbe für Channel Logo Hintergrund

    - konfigurierbares Limit für das Fehler-Symbol (damit z.B. bei nur einem Fehler die Aufnahme nicht als fehlerhaft angezeigt wird)

    - Text wrapping für Events und Aufnahmen optimiert


    Homepage: https://github.com/FireFlyVDR/vdr-plugin-skinelchihd

    Wiki inkl. Screenshots: https://github.com/FireFlyVDR/vdr-plugin-skinelchihd/wiki


    Happy compiling

    FireFly

  • Hi,


    ich habe heute versucht auf meinem raspberry mit Debian 11.5 das zu kompilieren und er spuckt mir folgenden Fehler:


    Code
    CC image.o
    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/lib/modules/4.19.66-v7+/build -I/root/src/vdr.git/include -std=c++11 -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -c -DPLUGIN_NAME_I18N='"skinelchihd"'  -o image.o image.c
    image.c: In member function 'bool cOSDImage::LoadImage(bool)':
    image.c:84:24: error: 'TrueColorAlphaType' was not declared in this scope
       84 |          mgkImage.type(TrueColorAlphaType);
          |                        ^~~~~~~~~~~~~~~~~~
    image.c:133:31: error: 'MagickCore' has not been declared
      133 |          mgkImage.writePixels(MagickCore::BGRAQuantum, (unsigned char *) image->Data());
          |                               ^~~~~~~~~~
    make: *** [Makefile:85: image.o] Fehler 1

    Server: CPU J1900 | 1x CineS2 | Debian Bullseye headless| VDR 2.6.3
    Client: 2x Himbeere mit vdr

  • Du scheinst mit ImageMagick compilieren zu wollen, hast aber nicht die Version 7.x installiert.

    Entweder Libs und Header von ImageMagick 7.x installieren oder (wenn Du keine SVG channel Logos brauchst) GraphicsMagick installieren und mit make plugins IMAGELIB=graphicsmagick complieren.

    Siehe auch die entsprechenden Erläuterungen im README.

    Ok, danke für den Hinweis, jetzt tut es.

    Gibt es das script irgendwo: "use a script like vdr_copy_epimage.sh with VDR's '--record' parameter", hab es nirgends gefunden.

    Server: CPU J1900 | 1x CineS2 | Debian Bullseye headless| VDR 2.6.3
    Client: 2x Himbeere mit vdr

  • FireFly

    Hat den Titel des Themas von „[ANNOUNCE] skinElchi HD 1.0.0 / 1.1.0“ zu „[ANNOUNCE] skinElchi HD 1.0.0 / 1.1.0 / 1.1.1“ geändert.
  • Also,


    Erstmal: super Skin, und auch super schnell. Auch auf meinen RPI3 :) .


    Beim Kompilieren bekomme ich Warnungen wie:

    Code
    displaymenu.c: In member function ‘virtual void cSkinElchiHDDisplayMenu::SetTabs(int, int, int, int, int)’:
    displaymenu.c:328:33: warning: array subscript 6 is above array bounds of ‘int [6]’ [-Warray-bounds]
    328 |          /* 6 Name     */ tabs[6] = tabs[5] + (ElchiConfig.showRecHD ? elchiSymbols.Width(SYM_AR_HD) + symbolGap : 0);
        |                           ~~~~~~^
    In file included from displaymenu.c:15:
    displaymenu.h:64:8: note: while referencing ‘cSkinElchiHDDisplayMenu::tabs’
    64 |    int tabs[MaxTabs];
       |        ^~~~

    beunruhigt mich jetzt etwas. int tabs[6] bedeutet, dass das Array 6 Felder hat, also tabs[0] ... tabs[5]. Für tabs[6] ist kein Speicher reserviert, da wird etwas überschrieben :( .


    ~ Markus

    Client1: ASUS P5QC, Dual Core 3G, Cine S2, Ext. Board von TBE, Xubuntu 20.04, VDR 2.6x

    Client2: RPI3

    Server: RPI4, Sundtek SkyTV Dual 2x

  • FireFly

    Hat den Titel des Themas von „[ANNOUNCE] skinElchi HD 1.0.0 / 1.1.0 / 1.1.1“ zu „[ANNOUNCE] skinElchi HD 1.0.0 / 1.1.0 - 1.1.2“ geändert.
  • Hi,


    Mein Compiler meldet noch:

    vermutlich ist das in der Praxis kein Problem. Immerhin wird verhindert, dass Speicher überschrieben wird :) . Bei der Verwendung als c-string kann es aber Probleme geben, weil die NULL am Ende des c-strings fehlt.


    ~ Markus

    Client1: ASUS P5QC, Dual Core 3G, Cine S2, Ext. Board von TBE, Xubuntu 20.04, VDR 2.6x

    Client2: RPI3

    Server: RPI4, Sundtek SkyTV Dual 2x

Jetzt mitmachen!

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