From 9f60bd2fc401c0d195e2a55f24e0e09ec17bb824 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Mon, 27 Dec 2010 12:25:19 +0100 Subject: [PATCH] Now updating the 'frames per second' data in the list of recordings when a new recording is started that has a frame rate other than the default --- HISTORY | 2 ++ recorder.c | 16 ++++++++++------ recorder.h | 4 ++-- recording.c | 20 ++++++++++++++++++-- recording.h | 4 +++- 5 files changed, 35 insertions(+), 11 deletions(-) diff --git a/HISTORY b/HISTORY index c236c331..996a7a17 100644 --- a/HISTORY +++ b/HISTORY @@ -6515,3 +6515,5 @@ Video Disk Recorder Revision History to Dominik Strasser). - Added LDFLAGS to the linker calls in the Makefiles (thanks to Joerg Bornkessel and Paul Menzel). +- Now updating the 'frames per second' data in the list of recordings when a new + recording is started that has a frame rate other than the default. diff --git a/recorder.c b/recorder.c index 60631e0a..f7c3fb03 100644 --- a/recorder.c +++ b/recorder.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: recorder.c 2.8 2010/01/29 16:37:22 kls Exp $ + * $Id: recorder.c 2.9 2010/12/27 11:35:46 kls Exp $ */ #include "recorder.h" @@ -24,8 +24,9 @@ cRecorder::cRecorder(const char *FileName, const cChannel *Channel, int Priority) :cReceiver(Channel, Priority) ,cThread("recording") -,recordingInfo(FileName) { + recordingName = strdup(FileName); + // Make sure the disk is up and running: SpinUpDisk(FileName); @@ -69,6 +70,7 @@ cRecorder::~cRecorder() delete fileName; delete frameDetector; delete ringBuffer; + free(recordingName); } bool cRecorder::RunningLowOnDiskSpace(void) @@ -127,10 +129,12 @@ void cRecorder::Action(void) break; if (frameDetector->Synced()) { if (!InfoWritten) { - if (recordingInfo.Read()) { - if (frameDetector->FramesPerSecond() > 0 && !DoubleEqual(recordingInfo.FramesPerSecond(), frameDetector->FramesPerSecond())) { - recordingInfo.SetFramesPerSecond(frameDetector->FramesPerSecond()); - recordingInfo.Write(); + cRecordingInfo RecordingInfo(recordingName); + if (RecordingInfo.Read()) { + if (frameDetector->FramesPerSecond() > 0 && !DoubleEqual(RecordingInfo.FramesPerSecond(), frameDetector->FramesPerSecond())) { + RecordingInfo.SetFramesPerSecond(frameDetector->FramesPerSecond()); + RecordingInfo.Write(); + Recordings.UpdateByName(recordingName); } } InfoWritten = true; diff --git a/recorder.h b/recorder.h index d11d7adf..05cc42b0 100644 --- a/recorder.h +++ b/recorder.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: recorder.h 2.2 2010/01/29 16:32:32 kls Exp $ + * $Id: recorder.h 2.3 2010/12/27 11:17:04 kls Exp $ */ #ifndef __RECORDER_H @@ -24,7 +24,7 @@ private: cFileName *fileName; cIndexFile *index; cUnbufferedFile *recordFile; - cRecordingInfo recordingInfo; + char *recordingName; off_t fileSize; time_t lastDiskSpaceCheck; bool RunningLowOnDiskSpace(void); diff --git a/recording.c b/recording.c index 96dc95f9..e0f5b279 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.23 2010/03/07 14:06:04 kls Exp $ + * $Id: recording.c 2.24 2010/12/27 12:02:00 kls Exp $ */ #include "recording.h" @@ -678,7 +678,7 @@ cRecording::cRecording(const char *FileName) const char *p = strrchr(FileName, '/'); name = NULL; - info = new cRecordingInfo; + info = new cRecordingInfo(fileName); if (p) { time_t now = time(NULL); struct tm tm_r; @@ -921,6 +921,14 @@ bool cRecording::IsEdited(void) const return *s == '%'; } +void cRecording::ReadInfo(void) +{ + info->Read(); + priority = info->priority; + lifetime = info->lifetime; + framesPerSecond = info->framesPerSecond; +} + bool cRecording::WriteInfo(void) { cString InfoFileName = cString::sprintf("%s%s", fileName, isPesRecording ? INFOFILESUFFIX ".vdr" : INFOFILESUFFIX); @@ -1172,6 +1180,14 @@ void cRecordings::DelByName(const char *FileName) } } +void cRecordings::UpdateByName(const char *FileName) +{ + LOCK_THREAD; + cRecording *recording = GetByName(FileName); + if (recording) + recording->ReadInfo(); +} + int cRecordings::TotalFileSizeMB(void) { int size = 0; diff --git a/recording.h b/recording.h index 939878f2..7510a6e1 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.14 2010/03/07 14:06:15 kls Exp $ + * $Id: recording.h 2.15 2010/12/27 10:48:21 kls Exp $ */ #ifndef __RECORDING_H @@ -117,6 +117,7 @@ public: bool IsNew(void) const { return GetResume() <= 0; } bool IsEdited(void) const; bool IsPesRecording(void) const { return isPesRecording; } + void ReadInfo(void); bool WriteInfo(void); bool Delete(void); // Changes the file name so that it will no longer be visible in the "Recordings" menu @@ -165,6 +166,7 @@ public: cRecording *GetByName(const char *FileName); void AddByName(const char *FileName, bool TriggerUpdate = true); void DelByName(const char *FileName); + void UpdateByName(const char *FileName); int TotalFileSizeMB(void); ///< Only for deleted recordings! };