diff --git a/CONTRIBUTORS b/CONTRIBUTORS index c5999624..2bf22521 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -1691,6 +1691,8 @@ Udo Richter for reporting missing defines for large files in the 'newplugin' script for pointing out that the full timer file name should be displayed if it ends with "TITLE" or "EPISODE" + for a patch to "Made updating the editing marks during replay react faster in case + the marks file has just been written" Sven Kreiensen for his help in keeping 'channels.conf.terr' up to date diff --git a/HISTORY b/HISTORY index 94212647..8c26a523 100644 --- a/HISTORY +++ b/HISTORY @@ -6565,7 +6565,7 @@ Video Disk Recorder Revision History - 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. + file has just been written (with a patch from Udo Richter). - Fixed horizontal scaling of subtitles (reported by Reinhard Nissl). - Stripped the note "The data returned by this function is only used for informational purposes (if any)" from the description of cDevice::GetVideoSize(). The VideoAspect diff --git a/recording.c b/recording.c index ca8d6380..518325de 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.28 2011/03/27 15:02:53 kls Exp $ + * $Id: recording.c 2.29 2011/04/17 13:20:46 kls Exp $ */ #include "recording.h" @@ -1274,6 +1274,7 @@ bool cMarks::Load(const char *RecordingFileName, double FramesPerSecond, bool Is framesPerSecond = FramesPerSecond; nextUpdate = 0; lastFileTime = -1; // the first call to Load() must take place! + lastChange = 0; return Update(); } @@ -1282,16 +1283,9 @@ bool cMarks::Update(void) time_t t = time(NULL); 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 (LastModified != lastFileTime) // change detected, or first run + lastChange = LastModified > 0 ? LastModified : t; + int d = t - lastChange; if (d < 60) d = 1; // check frequently if the file has just been modified else if (d < 3600) @@ -1299,8 +1293,10 @@ bool cMarks::Update(void) else d /= 360; // phase out checking for very old files nextUpdate = t + d; - if (LastModified > lastFileTime) { + if (LastModified != lastFileTime) { // change detected, or first run lastFileTime = LastModified; + if (lastFileTime == t) + lastFileTime--; // make sure we don't miss updates in the remaining second cMutexLock MutexLock(&MutexMarkFramesPerSecond); MarkFramesPerSecond = framesPerSecond; if (cConfig::Load(fileName)) { diff --git a/recording.h b/recording.h index 3410ae23..8ec7f49e 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.18 2011/04/03 11:14:37 kls Exp $ + * $Id: recording.h 2.19 2011/04/17 13:18:04 kls Exp $ */ #ifndef __RECORDING_H @@ -194,6 +194,7 @@ private: double framesPerSecond; time_t nextUpdate; time_t lastFileTime; + time_t lastChange; public: bool Load(const char *RecordingFileName, double FramesPerSecond = DEFAULTFRAMESPERSECOND, bool IsPesRecording = false); bool Update(void);