Hi,
Die Version 1.1.2 kann automatisch Timer anlegen, z.B. falls eine Sendung in SD aufgenommen wurde und nun in HD gesendet wird, oder fehlerhaft ist.
Details hier: https://github.com/MarkusEh/vd…hance-Existing-Recordings
~ Markus
Hi,
Die Version 1.1.2 kann automatisch Timer anlegen, z.B. falls eine Sendung in SD aufgenommen wurde und nun in HD gesendet wird, oder fehlerhaft ist.
Details hier: https://github.com/MarkusEh/vd…hance-Existing-Recordings
~ Markus
Hallo,
gibt es denn einen Patch, dass tvscraper 1.1.1 und 1.1.2 auch mit vdr-2.4.7 kompilieren ?
Hallo Martin,
Teste bitte mal den neuesten git.
~Markus
Hallo Martin,
Teste bitte mal den neuesten git.
~Markus
leider haut es noch nicht ganz hin:
hier mal das logfile
Hallo Martin,
Im git ist ein kleines Update. Damit sollte die Warnung weg sein.
Schwieriger ist der Fehler in searchEventOrRec.c:237. Da steht:
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:
#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:
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
Hallo Markus,
danke für deine Mühe, so wie es aussieht muss ich doch auf eine neuere vdr-Version updaten.
Nochmals vielen Dank.
Hi,
Ich denke, ich habe doch noch eine Lösung gefunden.
Teste mal das aktuelle git.
~ Markus
Display MoreHi,
Ich denke, ich habe doch noch eine Lösung gefunden.
Teste mal das aktuelle git.
~ Markus
Wow, damit klappt es, ich bin begeistert, vielen Dank.
Martin
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
Hi.
Es gibt jetzt 1.1.3.
~ Markus
Hallo.
Mit git Stand vom 16.08. habe ich ein segfault bei Aktivierung des Autotimer:
Thread 28 "tvscraper" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffeca7b640 (LWP 4984)]
0x00005555556bdd24 in cHashBase::Get(unsigned int) const ()
(gdb) bt
#0 0x00005555556bdd24 in cHashBase::Get(unsigned int) const ()
#1 0x00007ffff5c0c80f in getEvent(unsigned int, tChannelID const&) (eventid=23411, channelid=...) at /usr/local/src/vdr-plugin-tvscraper/autoTimers.c:66
#2 0x00007ffff5c32d75 in getAllEvents(cTVScraperDB const&) (db=...) at /usr/local/src/vdr-plugin-tvscraper/autoTimers.c:235
#3 0x00007ffff5c389f3 in timersForEvents(cTVScraperDB const&) (db=...) at /usr/local/src/vdr-plugin-tvscraper/autoTimers.c:412
#4 0x00007ffff5c38d84 in cTVScraperWorker::Action() (this=0x555555b27760) at /usr/local/src/vdr-plugin-tvscraper/worker.c:340
#5 cTVScraperWorker::Action() (this=0x555555b27760) at /usr/local/src/vdr-plugin-tvscraper/worker.c:308
#6 0x00005555556af8f1 in cThread::StartThread(cThread*) ()
#7 0x00007ffff798884a in () at /lib64/libc.so.6
#8 0x00007ffff7a0bcec in () at /lib64/libc.so.6
Display More
Hi,
kannst Du einen bt full machen?
Und VDR mit Debugsymbolen verwenden?
Da wird schedule->GetEvent( eventid ); aufgerufen. Das ist von VDR implementiert.
~ Markus
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:
Thread 28 "tvscraper" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffeca7b640 (LWP 7313)]
0x00005555556bdd24 in cHashBase::Get (this=0xc0, Id=23413) at /var/tmp/portage/media-video/vdr-2.6.1/work/vdr-2.6.1/tools.h:908
908 unsigned int hashfn(unsigned int Id) const { return Id % size; }
(gdb) bt full
#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
list = <optimized out>
#1 0x00007ffff5c0c80f in getEvent(unsigned int, tChannelID const&) (eventid=23413, channelid=...) at /usr/local/src/vdr-plugin-tvscraper/autoTimers.c:66
schedule = <optimized out>
Schedules_Lock = {stateKey = {stateLock = 0x55555573c9c0 <cSchedules::schedules+32>, write = false, state = -1, timedOut = false}, list = 0x55555573c9a0 <cSchedules::schedules>}
Schedules = <optimized out>
#2 0x00007ffff5c32d75 in getAllEvents(cTVScraperDB const&) (db=...) at /usr/local/src/vdr-plugin-tvscraper/autoTimers.c:235
Python Exception <class 'gdb.error'>: value has been optimized out
found =
statement = 0x555555af3b60
result = std::set with 0 elements
now_m10 = 1660652350
sql_event = "select event_id, channel_id, valid_till, movie_tv_id, season_number, episode_number from event"
scraperEvent = {m_event = 0x0, m_hd = 0, m_movie_tv_id = 726887, m_season_number = -100, m_episode_number = 0}
l_event_id = 23413
l_channel_id = 0x555555afe1d0 "S19.2E-1-1051-28725"
l_validTill = 1660662900
#3 0x00007ffff5c389f3 in timersForEvents(cTVScraperDB const&) (db=...) at /usr/local/src/vdr-plugin-tvscraper/autoTimers.c:412
scraperEvent = <optimized out>
__for_range = <optimized out>
recordings =
std::set with 2550 elements = {[0] = {m_event_id = 30287, m_event_start_time = 1636506900, m_channel_id = "S19.2E-1-1079-28006", m_name = "videos~ Vienna Blood~%01 Die letzte Séance", m_movie_tv_id = -372031, m_season_number = 1, m_episode_number = 1, m_hd = 0, m_numberOfErrors = 0}, [1] = {m_event_id = 30552, m_event_start_time = 1637111400, m_channel_id = "S19.2E-1-1079-28006", m_name = "videos~ Vienna Blood~%02 Königin der Nacht", m_movie_tv_id = -372031, m_season_number = 1, m_episode_number = 2, m_hd = 0, m_numberOfErrors = 0}, [2] = {m_event_id = 30815, m_event_start_time = 1637715000, m_channel_id = "S19.2E-1-1079-28006", m_name = "videos~ Vienna Blood~%04 Der verlorene Sohn", m_movie_tv_id = -372031, m_season_number = 1, m_episode_number = 3, m_hd = 0, m_numberOfErrors = 0}, [3] = {m_event_id = 30749, m_event_start_time = 1637529300, m_channel_id = "S19.2E-1-1079-28006", m_name = "videos~ Vienna Blood~%03 Die traurige Gräfin", m_movie_tv_id = -372031, m_season_number = 2, m_episode_number = 1, m_hd = 0, m_numberOfErrors = 0}, [4] = {m_event_id = 30987, m_event_start_time = 1638134100, m_channel_id = "S19.2E-1-1079-28006", m_name = "videos~ Vienna Blood~%05 Die schwarze Feder", m_movie_tv_id = -372031, m_season_number = 2, m_episode_number = 2, m_hd = 0, m_numberOfErrors = 0}, [5] = {m_event_id = 31244, m_event_start_time = 1638738900, m_channel_id = "S19.2E-1-1079-28006", m_name = "videos~ Vienna Blood~%Vor der Dunkelheit", m_movie_tv_id = -372031, m_season_number = 2, m_episode_number = 3, m_hd = 0, m_numberOfErrors = 0}, [6] = {m_event_id = 3260, m_event_start_time = 1574716500, m_channel_id = "S19.2E-1-1011-11110", m_name = "videos~ West of Liberty~%02 West of Liberty", m_movie_tv_id = -364707, m_season_number = 1, m_episode_number = 1, m_hd = 1, m_numberOfErrors = 3}, [7] = {m_event_id = 37092, m_event_start_time = 1645231115, m_channel_id = "S19.2E-1-1089-12020", m_name = "videos~ SciFi~ Star Trek~ Star Trek: Picard~%01 - Gedenken", m_movie_tv_id = -364093, m_season_number = 1, m_episode_number = 1, m_hd = 0, m_numberOfErrors = 0}, [8] = {m_event_id = 37093, m_event_start_time = 1645234056, m_channel_id = "S19.2E-1-1089-12020", m_name = "videos~ SciFi~ Star Trek~ Star Trek: Picard~%02 - Karten und Legenden", m_movie_tv_id = -364093, m_season_number = 1, m_episode_number = 2, m_hd = 0, m_numberOfErrors = 0}, [9] = {m_event_id = 37094, m_event_start_time = 1645236642, m_channel_id = "S19.2E-1-1089-12020", m_name = "videos~ SciFi~ Star Trek~ Star Trek: Picard~%03 - Das Ende ist der Anfang", m_movie_tv_id = -364093, m_season_number = 1, m_episode_number = 3, m_hd = 0, m_numberOfErrors = 0}, [10] = {m_event_id = 37095, m_event_start_time = 1645238966, m_channel_id = "S19.2E-1-1089-12020", m_name = "videos~ SciFi~ Star Trek~ Star Trek: Picard~%04 - Unbedingte Offenheit", m_movie_tv_id = -364093, m_season_number = 1, m_episode_number = 4, m_hd = 0, m_numberOfErrors = 0}, [11] = {m_event_id = 37192, m_event_start_time = 16453156
...
m_tstart = 1660857900, m_needed = false}, [41] = {<cMovieOrTvAT> = {m_hd = 1, m_movie_tv_id = 377847, m_season_number = -100, m_episode_number = 0}, m_timerId = 38, m_tstart = 1661812500, m_needed = false}, [42] = {<cMovieOrTvAT> = {m_hd = 1, m_movie_tv_id = 423612, m_season_number = -100, m_episode_number = 0}, m_timerId = 24, m_tstart = 1661796000, m_needed = false}, [43] = {<cMovieOrTvAT> = {m_hd = 1, m_movie_tv_id = 436791, m_season_number = -100, m_episode_number = 0}, m_timerId = 1, m_tstart = 1660948200, m_needed = false}, [44] = {<cMovieOrTvAT> = {m_hd = 1, m_movie_tv_id = 470918, m_season_number = -100, m_episode_number = 0}, m_timerId = 48, m_tstart = 1661198100, m_needed = false}, [45] = {<cMovieOrTvAT> = {m_hd = 1, m_movie_tv_id = 479455, m_season_number = -100, m_episode_number = 0}, m_timerId = 39, m_tstart = 1660845600, m_needed = false}, [46] = {<cMovieOrTvAT> = {m_hd = 1, m_movie_tv_id = 498052, m_season_number = -100, m_episode_number = 0}, m_timerId = 2, m_tstart = 1661040000, m_needed = false}, [47] = {<cMovieOrTvAT> = {m_hd = 1, m_movie_tv_id = 716929, m_season_number = -100, m_episode_number = 0}, m_timerId = 16, m_tstart = 1660965000, m_needed = false}}
myTimers = std::set with 0 elements
#4 0x00007ffff5c38d84 in cTVScraperWorker::Action() (this=0x555555b27550) at /usr/local/src/vdr-plugin-tvscraper/worker.c:340
#5 cTVScraperWorker::Action() (this=0x555555b27550) at /usr/local/src/vdr-plugin-tvscraper/worker.c:308
#6 0x00005555556af8f1 in cThread::StartThread(cThread*) (Thread=0x555555b27550) at thread.c:293
#7 0x00007ffff798884a in () at /lib64/libc.so.6
#8 0x00007ffff7a0bcec in () at /lib64/libc.so.6
(gdb)
Display More
Hi
Sieht immer noch nach etwas Anderm aus.
In Deinen ersten bt stand:
Ich bräucht einen bt, in dem diese (oder analoge) Einträge stehen.
~ Markus
Display MoreHi
Sieht immer noch nach etwas Anderm aus.
In Deinen ersten bt stand:
- #0 0x00005555556bdd24 in cHashBase::Get(unsigned int) const ()
- #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
Die Einträge stehen doch oben drin Zeile 6 und Zeile 8.
Hier noch mal bt (no full) zwecks Übersichtlichkeit:
(gdb) bt
#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
#1 0x00007ffff5c0c80f in getEvent(unsigned int, tChannelID const&) (eventid=23413, channelid=...) at /usr/local/src/vdr-plugin-tvscraper/autoTimers.c:66
#2 0x00007ffff5c32d75 in getAllEvents(cTVScraperDB const&) (db=...) at /usr/local/src/vdr-plugin-tvscraper/autoTimers.c:235
#3 0x00007ffff5c389f3 in timersForEvents(cTVScraperDB const&) (db=...) at /usr/local/src/vdr-plugin-tvscraper/autoTimers.c:412
#4 0x00007ffff5c38d84 in cTVScraperWorker::Action() (this=0x555555b27550) at /usr/local/src/vdr-plugin-tvscraper/worker.c:340
#5 cTVScraperWorker::Action() (this=0x555555b27550) at /usr/local/src/vdr-plugin-tvscraper/worker.c:308
#6 0x00005555556af8f1 in cThread::StartThread(cThread*) (Thread=0x555555b27550) at thread.c:293
#7 0x00007ffff798884a in () at /lib64/libc.so.6
#8 0x00007ffff7a0bcec in () at /lib64/libc.so.6
Hier noch die tools.h, falls die von Deiner wegen irgend welcher Patche abweicht...
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
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:
vdr ~ # revdep-rebuild -i
* This is the new python coded version
* Please report any bugs found using it.
* The original revdep-rebuild script is installed as revdep-rebuild.sh
* Please file bugs at: https://bugs.gentoo.org/
* Collecting system binaries and libraries
* Checking dynamic linking consistency
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!
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
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...
Don’t have an account yet? Register yourself now and be a part of our community!