Fix in git.

[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)?
-
Wo crasht er denn?
-
Ich rufe den VDR so auf:
Codegdb --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:
CodeThread 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
-
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).
-
This is the same thing for which softhddevice has dummy osd.
-
That explains why I did not stumble over that issue during development
-
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:
Code
Display MoreThread 1 "vdr" received signal SIGSEGV, Segmentation fault. 0x00007ffff6847b6e in cSkinElchiHDDisplayChannel::DrawBackground (this=0x555555ad1c90) at displaychannel.c:272 272 pmBG->Clear(); (gdb) bt #0 0x00007ffff6847b6e in cSkinElchiHDDisplayChannel::DrawBackground() (this=0x555555ad1c90) at displaychannel.c:272 #1 0x00007ffff6849c95 in cSkinElchiHDDisplayChannel::SetChannel(cChannel const*, int) (this=0x555555ad1c90, Channel=0x555555978440, ChannelNumber=0) at displaychannel.c:429 #2 0x00005555556584f3 in cDisplayChannel::DisplayChannel() (this=0x555555b21540) at menu.c:5062 #3 0x000055555565a263 in cDisplayChannel::cDisplayChannel(int, bool) (this=0x555555b21540, 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 (gdb) bt full #0 0x00007ffff6847b6e in cSkinElchiHDDisplayChannel::DrawBackground() (this=0x555555ad1c90) at displaychannel.c:272 PixmapMutexLock = {<cMutexLock> = {mutex = 0x55555575d900 <cPixmap::mutex>, locked = true}, <No data fields>} #1 0x00007ffff6849c95 in cSkinElchiHDDisplayChannel::SetChannel(cChannel const*, int) (this=0x555555ad1c90, Channel=0x555555978440, ChannelNumber=0) at displaychannel.c:429 PixmapMutexLock = {<cMutexLock> = {mutex = 0x2d000000001, locked = 48}, <No data fields>} #2 0x00005555556584f3 in cDisplayChannel::DisplayChannel() (this=0x555555b21540) at menu.c:5062 #3 0x000055555565a263 in cDisplayChannel::cDisplayChannel(int, bool) (this=0x555555b21540, Number=1, Switched=<optimized out>) at menu.c:5023 Channels_Lock = {stateKey = {stateLock = 0x5555557543c0 <cChannels::channels+32>, write = false, state = -1, timedOut = false}, list = 0x5555557543a0 <cChannels::channels>} Channels = <optimized out> #4 0x00005555555fc9e9 in main(int, char**) (argc=<optimized out>, argv=<optimized out>) at device.h:355 key = <optimized out> Interact = <optimized out> Control = <optimized out> Now = 1645896183 NeedsFastResponse = <optimized out> ControlMutexLock = {mutex = 0x0, locked = 240} NewPrimaryDVB = <optimized out> savedTm = {c_iflag = 1280, c_oflag = 5, c_cflag = 191, c_lflag = 35387, c_line = 0 '\000', c_cc = "\003\034\177\025\004\000\001\000\021\023\032\000\022\017\027\026", '\000' <wiederholt 15 Mal>, c_ispeed = 15, c_ ospeed = 15} HasStdin = <optimized out> StartedAsRoot = <optimized out> VdrUser = <optimized out> UserDump = <optimized out> SVDRPport = <optimized out> AudioCommand = <optimized out> VideoDirectory = <optimized out> ConfigDirectory = <optimized out>
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;a=b…2;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.
-
Beim Start prüft skinElchiHD, ob ein TrueColor OSD zur Verfügung steht (https://github.com/FireFlyVDR/vdr…nelchihd.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:
CodeCC 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
-
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.
-
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.
-
Ok, da fehlt das g in epgimage, aber gemeint war sowas wie bei yavdr: https://github.com/yavdr/yavdr-ba…60copy_epgimage
Das Skript kopiert die EPG-Bilder, die ein EPG-Plugin auf den Rechner geholt hat, in die Aufnahmen, lädt also die EPG-Bilder nicht selbst herunter.
-
neues Release v1.1.1
- unvollständiges Scrollen in der Kanalanzeige korrigiert, wenn das REC-Symbol angezeigt wird
-
FireFly
February 9, 2023 at 4:42 PM Changed the title of the thread from “[ANNOUNCE] skinElchi HD 1.0.0 / 1.1.0” to “[ANNOUNCE] skinElchi HD 1.0.0 / 1.1.0 / 1.1.1”. -
Also,
Erstmal: super Skin, und auch super schnell. Auch auf meinen RPI3
.
Beim Kompilieren bekomme ich Warnungen wie:
Codedisplaymenu.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
-
-
FireFly
May 29, 2023 at 12:07 PM Changed the title of the thread from “[ANNOUNCE] skinElchi HD 1.0.0 / 1.1.0 / 1.1.1” to “[ANNOUNCE] skinElchi HD 1.0.0 / 1.1.0 - 1.1.2”. -
Hi,
Mein Compiler meldet noch:
Code
Display Moredisplaymenu.c: In member function ‘virtual void cSkinElchiHDDisplayMenu::SetItem(const char*, int, bool, bool)’: displaymenu.c:675:26: warning: ‘char* strncpy(char*, const char*, size_t)’ output truncated before terminating nul copying as many bytes from a string as its length [-Wstringop-truncation] 675 | strncpy(buffer, s, min(sizeof(buffer), strlen(s))); // make a copy | ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ displaymenu.c:662:60: note: length computed here 662 | if (menuCategory == mcTimer && i == 0 && strlen(s) == 1 && strchr(" !#>", s[0])) { | ~~~~~~^~~ config.c: In member function ‘void cSkinElchiHDConfig::SetLogoBaseDir(const char*)’: config.c:55:14: warning: ‘char* strncpy(char*, const char*, size_t)’ specified bound 255 equals destination size [-Wstringop-truncation] 55 | strncpy(logoBaseDir, dir, sizeof(logoBaseDir)); | ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ config.c: In member function ‘void cSkinElchiHDConfig::SetEpgImageDir(const char*)’: config.c:64:14: warning: ‘char* strncpy(char*, const char*, size_t)’ specified bound 255 equals destination size [-Wstringop-truncation] 64 | strncpy(epgimageDir, dir, sizeof(epgimageDir)); | ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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
-
Participate now!
Don’t have an account yet? Register yourself now and be a part of our community!