summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2011-03-20 11:46:58 +0100
committerKlaus Schmidinger <vdr@tvdr.de>2011-03-20 11:46:58 +0100
commit31d4abab378d5b069ef02584617858c7c7f3bfe5 (patch)
treecaf1d0c442df8befeac26630a2d2317fddada22d
parentd1dd7df17ab9c24867491c7cbaa148ad83ec216f (diff)
downloadvdr-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--HISTORY2
-rw-r--r--recording.c30
-rw-r--r--recording.h4
3 files changed, 27 insertions, 9 deletions
diff --git a/HISTORY b/HISTORY
index ea57a04e..11c04669 100644
--- a/HISTORY
+++ b/HISTORY
@@ -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);