Wenn man sich die Zeit ausgeben lässt
bool cRecordingInfo::Read(FILE *f)
{
if (ownEvent) {
struct stat st;
if (fstat(fileno(f), &st))
return false;
+ if (modified)
+ isyslog("Read(FILE) mtime: %ld - %ld = %ld", st.st_mtime, modified, st.st_mtime - modified);
if (modified == st.st_mtime)
return true;
dann wird es klar warum framesPerSecond nicht aktualisiert wird:
2025-04-16T12:05:42.111518+02:00 vdr vdr: [10640] record /srv/vdr/video0/Tagesschau/2025-04-16.11.54.1-0.rec
2025-04-16T12:05:42.111563+02:00 vdr vdr: [10640] creating directory /srv/vdr/video0/Tagesschau
2025-04-16T12:05:42.111577+02:00 vdr vdr: [10640] creating directory /srv/vdr/video0/Tagesschau/2025-04-16.11.54.1-0.rec
2025-04-16T12:05:42.111603+02:00 vdr vdr: [10640] Write(FILE) F: 25,00
2025-04-16T12:05:42.119876+02:00 vdr vdr: [10640] Read(FILE) F: t='25' 25 -> 25,00
2025-04-16T12:05:42.125132+02:00 vdr vdr: [10640] recording to '/srv/vdr/video0/Tagesschau/2025-04-16.11.54.1-0.rec/00001.ts'
2025-04-16T12:05:42.125415+02:00 vdr vdr: [10640] writing timer id '2@VDR' to /srv/vdr/video0/Tagesschau/2025-04-16.11.54.1-0.rec/.timer
2025-04-16T12:05:42.125494+02:00 vdr vdr: [11112] recording thread started (pid=10640, tid=11112, prio=high)
2025-04-16T12:05:42.127199+02:00 vdr vdr: [10640] Read(FILE) F: t='25' 25 -> 25,00
2025-04-16T12:05:42.225837+02:00 vdr vdr: [11112] H.264: 1280 x 720p 50,00 fps 8 Bit 16:9
2025-04-16T12:05:42.225975+02:00 vdr vdr: [11112] Setting fps 25,00 -> 50,00
2025-04-16T12:05:42.226027+02:00 vdr vdr: [11112] Write(FILE) F: 50,00
2025-04-16T12:05:42.234789+02:00 vdr vdr: [11112] Read(FILE) mtime: 1744797942 - 1744797942 = 0 <<================
2025-04-16T12:05:42.234927+02:00 vdr vdr: [11112] ReadInfo() true 25,00 -> 25,00 Tagesschau
-----------------------------------------------------------------------------------------------
2025-04-16T12:04:57.725226+02:00 vdr vdr: [10640] creating directory /srv/vdr/video0/heute
2025-04-16T12:04:57.725306+02:00 vdr vdr: [10640] creating directory /srv/vdr/video0/heute/2025-04-16.11.54.2-0.rec
2025-04-16T12:04:57.725380+02:00 vdr vdr: [10640] Write(FILE) F: 25,00
2025-04-16T12:04:57.730925+02:00 vdr vdr: [10640] Read(FILE) F: t='25' 25 -> 25,00
2025-04-16T12:04:57.736125+02:00 vdr vdr: [10640] recording to '/srv/vdr/video0/heute/2025-04-16.11.54.2-0.rec/00001.ts'
2025-04-16T12:04:57.736379+02:00 vdr vdr: [10850] recording thread started (pid=10640, tid=10850, prio=high))
2025-04-16T12:04:57.736508+02:00 vdr vdr: [10640] writing timer id '1@VDR' to /srv/vdr/video0/heute/2025-04-16.11.54.2-0.rec/.timer
2025-04-16T12:04:57.737898+02:00 vdr vdr: [10640] Read(FILE) F: t='25' 25 -> 25,00
2025-04-16T12:04:58.350988+02:00 vdr vdr: [10850] H.264: 1280 x 720p 50,00 fps 8 Bit 16:9
2025-04-16T12:04:58.351134+02:00 vdr vdr: [10850] Setting fps 25,00 -> 50,00
2025-04-16T12:04:58.351214+02:00 vdr vdr: [10850] Write(FILE) F: 50,00
2025-04-16T12:04:58.359553+02:00 vdr vdr: [10850] Read(FILE) mtime: 1744797898 - 1744797897 = 1 <<====================
2025-04-16T12:04:58.359646+02:00 vdr vdr: [10850] Read(FILE) F: t='50 1280 720 p 16:9' 50 -> 50,00
2025-04-16T12:04:58.359690+02:00 vdr vdr: [10850] ReadInfo() true 25,00 -> 50,00 heute
Display More
Das time_t modified ist nur sekundengenau, so dass manchmal schon die nächste Sekunde angebrochen ist, aber oft auch nicht und dann die info-Datei nicht neu eingelesen wird.
st_mtime ist lt. man 3type stat nur ein Alias für die Sekunden: #define st_mtime st_mtim.tv_sec, man könnte auf struct timespec st_mtim umstellen, muss dann aber das struct timespec umständlich vergleichen.
Da ist der Patch mit Force die einfachere und sichere Alternative und mein nächster Test.