diff options
author | Klaus Schmidinger <vdr@tvdr.de> | 2011-03-20 11:46:58 +0100 |
---|---|---|
committer | Klaus Schmidinger <vdr@tvdr.de> | 2011-03-20 11:46:58 +0100 |
commit | 31d4abab378d5b069ef02584617858c7c7f3bfe5 (patch) | |
tree | caf1d0c442df8befeac26630a2d2317fddada22d | |
parent | d1dd7df17ab9c24867491c7cbaa148ad83ec216f (diff) | |
download | vdr-31d4abab378d5b069ef02584617858c7c7f3bfe5.tar.gz vdr-31d4abab378d5b069ef02584617858c7c7f3bfe5.tar.bz2 |
Made updating the editing marks during replay react faster in case the marks file has just been written
-rw-r--r-- | HISTORY | 2 | ||||
-rw-r--r-- | recording.c | 30 | ||||
-rw-r--r-- | recording.h | 4 |
3 files changed, 27 insertions, 9 deletions
@@ -6564,3 +6564,5 @@ Video Disk Recorder Revision History - Fixed some direct comparisons of double values. - Fixed detecting frames on channels that broadcast with separate "fields" instead of complete frames. +- Made updating the editing marks during replay react faster in case the marks + file has just been written. diff --git a/recording.c b/recording.c index 02a6e612..97109457 100644 --- a/recording.c +++ b/recording.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: recording.c 2.26 2011/02/27 13:35:20 kls Exp $ + * $Id: recording.c 2.27 2011/03/20 10:33:30 kls Exp $ */ #include "recording.h" @@ -1270,7 +1270,7 @@ bool cMarks::Load(const char *RecordingFileName, double FramesPerSecond, bool Is { fileName = AddDirectory(RecordingFileName, IsPesRecording ? MARKSFILESUFFIX ".vdr" : MARKSFILESUFFIX); framesPerSecond = FramesPerSecond; - lastUpdate = 0; + nextUpdate = 0; lastFileTime = -1; // the first call to Load() must take place! return Update(); } @@ -1278,11 +1278,27 @@ bool cMarks::Load(const char *RecordingFileName, double FramesPerSecond, bool Is bool cMarks::Update(void) { time_t t = time(NULL); - if (t - lastUpdate > MARKSUPDATEDELTA) { - lastUpdate = t; - t = LastModifiedTime(fileName); - if (t > lastFileTime) { - lastFileTime = t; + if (t > nextUpdate) { + time_t LastModified = LastModifiedTime(fileName); + int d; + if (LastModified > 0) // the file exists + d = t - LastModified; + else { // the file doesn't exist + if (lastFileTime <= 0) { + lastFileTime = t - 2; // -2 makes sure we don't miss an update within the very same second + LastModified = t; // make sure we run into the actual Load() below + } + d = t - lastFileTime; + } + if (d < 60) + d = 1; // check frequently if the file has just been modified + else if (d < 3600) + d = 10; // older files are checked less frequently + else + d /= 360; // phase out checking for very old files + nextUpdate = t + d; + if (LastModified > lastFileTime) { + lastFileTime = LastModified; cMutexLock MutexLock(&MutexMarkFramesPerSecond); MarkFramesPerSecond = framesPerSecond; if (cConfig<cMark>::Load(fileName)) { diff --git a/recording.h b/recording.h index 93b5a9cc..459c1ca0 100644 --- a/recording.h +++ b/recording.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: recording.h 2.16 2011/02/27 12:48:21 kls Exp $ + * $Id: recording.h 2.17 2011/03/20 10:33:30 kls Exp $ */ #ifndef __RECORDING_H @@ -192,7 +192,7 @@ class cMarks : public cConfig<cMark> { private: cString fileName; double framesPerSecond; - time_t lastUpdate; + time_t nextUpdate; time_t lastFileTime; public: bool Load(const char *RecordingFileName, double FramesPerSecond = DEFAULTFRAMESPERSECOND, bool IsPesRecording = false); |