[Announce] vdr-plugin-tvscraper 1.1.2

  • Hallo Martin,


    Im git ist ein kleines Update. Damit sollte die Warnung weg sein.

    Schwieriger ist der Fehler in searchEventOrRec.c:237. Da steht:

    Code
    1. std::sort(searchResults.begin(), searchResults.end() );

    Fehler: /usr/include/c++/11/bits/stl_algobase.h:182:11: error: call of overloaded 'swap(searchResultTvMovie&, searchResultTvMovie&)' is ambiguous .

    Da sehe ich jetzt folgende Möglichkeiten:

    a) Du patchst /usr/include/vdr/tools.h (s.u.)

    b) Du updatest VDR

    c) Jemand macht einen pull request für tvscraper, der vor ganz viele statements "std::" schreibt, und wir entfernen "using namespace std;". Ist eine Fleißarbeit.

    d) Jemand findet eine bessere Lösung.


    Patch für /usr/include/vdr/tools.h:

    Code
    1. #if __cplusplus >= 201103L // any gcc >= 4.8.1; we have swap, min, max #include <algorithm> // std::min, std::max, (c++98: also swap) #include <utility> // std::swap (since c++11) using std::min; using std::max; using std::swap; #else // no c++11 and old compiler, let's include our own templates template<class T> inline T min(T a, T b) { return a <= b ? a : b; } template<class T> inline T max(T a, T b) { return a >= b ? a : b; } template<class T> inline void swap(T &a, T &b) { T t = a; a = b; b = t; } #endif

    anstelle von dem alten Code, der vermutlich so aussieht:

    Code
    1. template<class T> inline T min(T a, T b) { return a <= b ? a : b; } template<class T> inline T max(T a, T b) { return a >= b ? a : b; } template<class T> inline void swap(T &a, T &b) { T t = a; a = b; b = t; }



    Hintergrund: Wenn ich selbst swap aufrufen würde, wäre das kein Problem: Da kann ich dann einfach ein std:: davorschreiben, dann ist das eindeutig.

    Da ich aber sort aufrufe, kann ich nur std::sort schreiben. Und sort ruft dann swap, und das ist nicht eindeutig ...


    Was mich aber wundert ist, dass der Fehler nur in Zeile 237 auftritt. In Zeilen 524 und 547 steht das gleiche std::sort, da sollte eigentlich der gleiche Fehler auftreten.


    ~ 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

  • Hallo Markus,


    danke für deine Mühe, so wie es aussieht muss ich doch auf eine neuere vdr-Version updaten.

    Nochmals vielen Dank.

    Gruß MartinKG

    Fedora36 x86_64 Gnome Desktop vdr 2.6.1 mit vdr-softhddevice plugin.

    ViewSonic VX3276 HDMI-1 <------------> HDMI NVidia Geforce-gt-1030

    ViewSonic VX3276 HDMI-2 <------------> HDMI Technotrend S2-6400

  • Hi,


    Ich denke, ich habe doch noch eine Lösung gefunden.

    Teste mal das aktuelle git.


    ~ 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

  • Wow, damit klappt es, ich bin begeistert, vielen Dank.

    Martin

    Gruß MartinKG

    Fedora36 x86_64 Gnome Desktop vdr 2.6.1 mit vdr-softhddevice plugin.

    ViewSonic VX3276 HDMI-1 <------------> HDMI NVidia Geforce-gt-1030

    ViewSonic VX3276 HDMI-2 <------------> HDMI Technotrend S2-6400

  • Wow, damit klappt es, ich bin begeistert, vielen Dank.

    Martin

    könntest du bitte einen neuen Release Tag 1.1.3 veröffentlichen, dann wäre ich wunschlos glücklich.

    Danke

    Martin

    Gruß MartinKG

    Fedora36 x86_64 Gnome Desktop vdr 2.6.1 mit vdr-softhddevice plugin.

    ViewSonic VX3276 HDMI-1 <------------> HDMI NVidia Geforce-gt-1030

    ViewSonic VX3276 HDMI-2 <------------> HDMI Technotrend S2-6400

  • Hallo.


    Mit git Stand vom 16.08. habe ich ein segfault bei Aktivierung des Autotimer:


    Gentoo Linux ~ VDR 2.6.1 ~ DD Octopus NET V2 S2 Max - SAT>IP ~ LENOVO ThinkServer TS200V ~ Intel(R) Core(TM) i5 CPU680@3.60GHz ~ 6GB RAM ~ NVIDIA T400

  • Hi,


    kannst Du einen bt full machen?

    Und VDR mit Debugsymbolen verwenden?


    Da wird schedule->GetEvent( eventid ); aufgerufen. Das ist von VDR implementiert.


    ~ 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

  • Ich habe jetzt vdr unter gentoo mit FEATURE="nostrip" compiliert.


    Sind jetzt im bt die gewünschten Informationen enthalten?


    Jetzt aber das richtige segfault etwas gekürzt:


    Gentoo Linux ~ VDR 2.6.1 ~ DD Octopus NET V2 S2 Max - SAT>IP ~ LENOVO ThinkServer TS200V ~ Intel(R) Core(TM) i5 CPU680@3.60GHz ~ 6GB RAM ~ NVIDIA T400

    The post was edited 1 time, last by heifisch ().

  • Hi


    Sieht immer noch nach etwas Anderm aus.

    In Deinen ersten bt stand:

    1. #0 0x00005555556bdd24 in cHashBase::Get(unsigned int) const ()
    2. #1 0x00007ffff5c0c80f in getEvent(unsigned int, tChannelID const&) (eventid=23411, channelid=...) at /usr/local/src/vdr-plugin-tvscraper/autoTimers.c:66


    Ich bräucht einen bt, in dem diese (oder analoge) Einträge stehen.


    ~ 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


  • Die Einträge stehen doch oben drin Zeile 6 und Zeile 8.


    Hier noch mal bt (no full) zwecks Übersichtlichkeit:


    Code
    1. (gdb) bt
    2. #0 0x00005555556bdd24 in cHashBase::Get(unsigned int) const (this=0xc0, Id=23413) at /var/tmp/portage/media-video/vdr-2.6.1/work/vdr-2.6.1/tools.h:908
    3. #1 0x00007ffff5c0c80f in getEvent(unsigned int, tChannelID const&) (eventid=23413, channelid=...) at /usr/local/src/vdr-plugin-tvscraper/autoTimers.c:66
    4. #2 0x00007ffff5c32d75 in getAllEvents(cTVScraperDB const&) (db=...) at /usr/local/src/vdr-plugin-tvscraper/autoTimers.c:235
    5. #3 0x00007ffff5c389f3 in timersForEvents(cTVScraperDB const&) (db=...) at /usr/local/src/vdr-plugin-tvscraper/autoTimers.c:412
    6. #4 0x00007ffff5c38d84 in cTVScraperWorker::Action() (this=0x555555b27550) at /usr/local/src/vdr-plugin-tvscraper/worker.c:340
    7. #5 cTVScraperWorker::Action() (this=0x555555b27550) at /usr/local/src/vdr-plugin-tvscraper/worker.c:308
    8. #6 0x00005555556af8f1 in cThread::StartThread(cThread*) (Thread=0x555555b27550) at thread.c:293
    9. #7 0x00007ffff798884a in () at /lib64/libc.so.6
    10. #8 0x00007ffff7a0bcec in () at /lib64/libc.so.6

    Gentoo Linux ~ VDR 2.6.1 ~ DD Octopus NET V2 S2 Max - SAT>IP ~ LENOVO ThinkServer TS200V ~ Intel(R) Core(TM) i5 CPU680@3.60GHz ~ 6GB RAM ~ NVIDIA T400

  • Hier noch die tools.h, falls die von Deiner wegen irgend welcher Patche abweicht...

    Files

    • tools.h.gz

      (11.39 kB, downloaded 20 times, last: )

    Gentoo Linux ~ VDR 2.6.1 ~ DD Octopus NET V2 S2 Max - SAT>IP ~ LENOVO ThinkServer TS200V ~ Intel(R) Core(TM) i5 CPU680@3.60GHz ~ 6GB RAM ~ NVIDIA T400

  • Also, in tools.h, Zeile 908:


    unsigned int hashfn(unsigned int Id) const { return Id % size; }


    Ist mir jetzt echt unklar, was da schief gehen kann.

    Falls es ein Fehler in tvscraper wäre, würde tvscraper "schedule->GetEvent( eventid );" mit einer "falschen" eventid aufrufen.

    Das dürfte aber nicht zu einem Segfault führen.

    Bug in VDR? Eher unwahrscheinlich, da dieser Code doch ständig verwendet wird.


    Ich vermute, Du hast irgendwelche Inkonsistenzen, z.B. eine "alte" *.so Datei wird verwendet, ...


    ~ 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

  • Ich vermute, Du hast irgendwelche Inkonsistenzen, z.B. eine "alte" *.so Datei wird verwendet, ...


    Naja, bei gentoo als Rolling-Release und wenn man immer mal was an Portage vorbei installiert könnte das schon sein.

    Ich habe allerdings noch nichts gefunden:


    Code
    1. vdr ~ # revdep-rebuild -i
    2. * This is the new python coded version
    3. * Please report any bugs found using it.
    4. * The original revdep-rebuild script is installed as revdep-rebuild.sh
    5. * Please file bugs at: https://bugs.gentoo.org/
    6. * Collecting system binaries and libraries
    7. * Checking dynamic linking consistency
    8. Your system is consistent


    Ich könnte das System auch noch einmal komplett neu bauen.


    Aber eins noch, vor dem gestrigen Git-Update hatten Autotimer funktioniert!


    Ich hatte schon ein wenig damit rumgespielt und finde die Funktion richtig gut, da ich gerade das manuell mache, also SD- und fehlerhafte Aufnahmen ersetzen.

    Allerdings hat es mir dann mit Autotimer neue Timer angelegt, die ich auch schon Manuell angelegt hatte. Da wäre vielleicht noch eine Prüfung sinnvoll, ob es für die betreffende Aufnahme schon einen Timer gibt.


    Also ich gucke mal ob ich im System noch was finde.


    Danke!

    Gentoo Linux ~ VDR 2.6.1 ~ DD Octopus NET V2 S2 Max - SAT>IP ~ LENOVO ThinkServer TS200V ~ Intel(R) Core(TM) i5 CPU680@3.60GHz ~ 6GB RAM ~ NVIDIA T400

  • Hi,


    Tatsächlich verhindert der neue git Stand dass neue Timer angelegt werden, wenn es zu der Sendung schon Timer gibt.

    Außerdem werden nun Timer upgedatet, wenn es EPG Änderungen gibt.


    Ich habe nun im git noch eine kleine Korrektur ergänzt. heifisch , möglicherweise ist damit der von Dir beobachtete Fehler behoben.


    ~ 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

  • Tatsächlich verhindert der neue git Stand dass neue Timer angelegt werden, wenn es zu der Sendung schon Timer gibt.

    Außerdem werden nun Timer upgedatet, wenn es EPG Änderungen gibt.


    Ich bekomme auch einige unpassende Timer wo der Titel überhaupt nicht passt.

    Auch wird manchmal ein Timer angelegt, obwohl keine Verbesserung (HD oder Fehler) stattfindet.

    Was in meinem Fall nicht so optimal ist, ist dass das Aufnahmeverzeichnis auf das Verzeichnis gesetzt wird, da wo die schon vorhandene Aufnahme ist.

    Das kommt mir nicht so gelegen, da ich eigentlich immer in ein definiertes Verzeichnis auf einer SSD aufzeichne wo ich dann noch schneide und in HEVC decodiere.

    Erst dann, sortiere ich die Aufnahme in das Verzeichnis auf einer HDD, wo es dann endgültig liegen soll.

    Aber interessant ist die neue Funktion auf jeden Fall... Muss mal schauen wie ich damit umgehe.


    Ich habe nun im git noch eine kleine Korrektur ergänzt. heifisch , möglicherweise ist damit der von Dir beobachtete Fehler behoben.


    Super Danke, keine Segfault mehr...

    Gentoo Linux ~ VDR 2.6.1 ~ DD Octopus NET V2 S2 Max - SAT>IP ~ LENOVO ThinkServer TS200V ~ Intel(R) Core(TM) i5 CPU680@3.60GHz ~ 6GB RAM ~ NVIDIA T400