summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2012-12-24 09:00:55 +0100
committerKlaus Schmidinger <vdr@tvdr.de>2012-12-24 09:00:55 +0100
commitdb59a8e745a6a48574f897ec0ce212f31fc87802 (patch)
tree1c9d79cc3e552dc609a79ac49cb984e57115c816
parentef3af3b70275056fbe3442eb0b9f56098cda4ed1 (diff)
downloadvdr-db59a8e745a6a48574f897ec0ce212f31fc87802.tar.gz
vdr-db59a8e745a6a48574f897ec0ce212f31fc87802.tar.bz2
Fixed replaying ongoing recordings from other VDR instances1.7.34
-rw-r--r--HISTORY3
-rw-r--r--recording.c51
-rw-r--r--recording.h7
3 files changed, 7 insertions, 54 deletions
diff --git a/HISTORY b/HISTORY
index dc3afca9..5b4513dd 100644
--- a/HISTORY
+++ b/HISTORY
@@ -7417,7 +7417,7 @@ Video Disk Recorder Revision History
plugins to display these items in a more elaborate way than just a simple line of
text.
-2012-12-23: Version 1.7.34
+2012-12-24: Version 1.7.34
- Changed the type of the TimerMatch parameter in cSkinDisplayMenu::SetItemEvent() from
'int' to 'eTimerEvent' (reported by Christoph Haubrich).
@@ -7458,3 +7458,4 @@ Video Disk Recorder Revision History
Regel).
- Fixed cIndexFile::GetNextIFrame() to properly handle the case where the very last frame
is an I-frame (which normally shouldn't occur).
+- Fixed replaying ongoing recordings from other VDR instances.
diff --git a/recording.c b/recording.c
index f40a9c95..ca50f433 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.80 2012/12/23 13:34:06 kls Exp $
+ * $Id: recording.c 2.81 2012/12/23 15:11:28 kls Exp $
*/
#include "recording.h"
@@ -1666,7 +1666,8 @@ void cIndexFileGenerator::Action(void)
#define INDEXFILESUFFIX "/index"
// The maximum time to wait before giving up while catching up on an index file:
-#define MAXINDEXCATCHUP 8 // seconds
+#define MAXINDEXCATCHUP 8 // number of retries
+#define INDEXCATCHUPWAIT 100 // milliseconds
struct tIndexPes {
uint32_t offset;
@@ -1693,9 +1694,6 @@ struct tIndexTs {
#define INDEXFILECHECKINTERVAL 500 // ms between checks for existence of the regenerated index file
#define INDEXFILETESTINTERVAL 10 // ms between tests for the size of the index file in case of pausing live video
-cMutex cIndexFile::indexListMutex;
-cVector<const cIndexFile *> cIndexFile::indexList;
-
cIndexFile::cIndexFile(const char *FileName, bool Record, bool IsPesRecording, bool PauseLive)
:resumeFile(FileName, IsPesRecording)
{
@@ -1776,13 +1774,10 @@ cIndexFile::cIndexFile(const char *FileName, bool Record, bool IsPesRecording, b
LOG_ERROR_STR(*fileName);
}
}
- if (Record)
- AddToIndexList(this);
}
cIndexFile::~cIndexFile()
{
- RemoveFromIndexList(this);
if (f >= 0)
close(f);
free(index);
@@ -1829,11 +1824,6 @@ bool cIndexFile::CatchUp(int Index)
for (int i = 0; i <= MAXINDEXCATCHUP && (Index < 0 || Index >= last); i++) {
struct stat buf;
if (fstat(f, &buf) == 0) {
- if (!IsInIndexList(this)) {
- close(f);
- f = -1;
- break;
- }
int newLast = int(buf.st_size / sizeof(tIndexTs) - 1);
if (newLast > last) {
int NewSize = size;
@@ -1873,7 +1863,7 @@ bool cIndexFile::CatchUp(int Index)
LOG_ERROR_STR(*fileName);
if (Index < last)
break;
- cCondWait::SleepMs(1000);
+ cCondWait::SleepMs(INDEXCATCHUPWAIT);
}
}
return index != NULL;
@@ -2028,39 +2018,6 @@ int cIndexFile::GetLength(const char *FileName, bool IsPesRecording)
return -1;
}
-void cIndexFile::AddToIndexList(const cIndexFile *IndexFile)
-{
- cMutexLock MutexLock(&indexListMutex);
- for (int i = 0; i < indexList.Size(); i++) {
- if (!indexList[i]) {
- indexList[i] = IndexFile;
- return;
- }
- }
- indexList.Append(IndexFile);
-}
-
-void cIndexFile::RemoveFromIndexList(const cIndexFile *IndexFile)
-{
- cMutexLock MutexLock(&indexListMutex);
- for (int i = 0; i < indexList.Size(); i++) {
- if (indexList[i] == IndexFile) {
- indexList[i] = NULL;
- return;
- }
- }
-}
-
-bool cIndexFile::IsInIndexList(const cIndexFile *IndexFile)
-{
- cMutexLock MutexLock(&indexListMutex);
- for (int i = 0; i < indexList.Size(); i++) {
- if (indexList[i] && !strcmp(indexList[i]->fileName, IndexFile->fileName))
- return true;
- }
- return false;
-}
-
bool GenerateIndex(const char *FileName)
{
if (DirectoryOk(FileName)) {
diff --git a/recording.h b/recording.h
index 9ae9b1ec..f555024c 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.40 2012/11/13 11:43:59 kls Exp $
+ * $Id: recording.h 2.41 2012/12/23 15:11:53 kls Exp $
*/
#ifndef __RECORDING_H
@@ -292,11 +292,6 @@ private:
cResumeFile resumeFile;
cIndexFileGenerator *indexFileGenerator;
cMutex mutex;
- static cMutex indexListMutex;
- static cVector<const cIndexFile *> indexList;
- static void AddToIndexList(const cIndexFile *IndexFile);
- static void RemoveFromIndexList(const cIndexFile *IndexFile);
- static bool IsInIndexList(const cIndexFile *IndexFile);
void ConvertFromPes(tIndexTs *IndexTs, int Count);
void ConvertToPes(tIndexTs *IndexTs, int Count);
bool CatchUp(int Index = -1);