summaryrefslogtreecommitdiff
path: root/recording.c
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2005-10-31 13:14:26 +0100
committerKlaus Schmidinger <vdr@tvdr.de>2005-10-31 13:14:26 +0100
commit697261c981fa877b94661d310c07b216ca708f4f (patch)
treecd24930cf7529657301f8d886dc510bdc594c989 /recording.c
parent998e3bd2c7d19485d001f1531d93fda2e92edb03 (diff)
downloadvdr-697261c981fa877b94661d310c07b216ca708f4f.tar.gz
vdr-697261c981fa877b94661d310c07b216ca708f4f.tar.bz2
The new class cUnbufferedFile is used for the recording files to avoid thrashing the file system cache1.3.35
Diffstat (limited to 'recording.c')
-rw-r--r--recording.c38
1 files changed, 18 insertions, 20 deletions
diff --git a/recording.c b/recording.c
index 6fb76d97..c90e54da 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 1.121 2005/10/09 13:09:51 kls Exp $
+ * $Id: recording.c 1.122 2005/10/31 12:27:58 kls Exp $
*/
#include "recording.h"
@@ -1258,7 +1258,7 @@ int cIndexFile::Get(uchar FileNumber, int FileOffset)
cFileName::cFileName(const char *FileName, bool Record, bool Blocking)
{
- file = -1;
+ file = NULL;
fileNumber = 0;
record = Record;
blocking = Blocking;
@@ -1279,21 +1279,21 @@ cFileName::~cFileName()
free(fileName);
}
-int cFileName::Open(void)
+cUnbufferedFile *cFileName::Open(void)
{
- if (file < 0) {
+ if (!file) {
int BlockingFlag = blocking ? 0 : O_NONBLOCK;
if (record) {
dsyslog("recording to '%s'", fileName);
file = OpenVideoFile(fileName, O_RDWR | O_CREAT | BlockingFlag);
- if (file < 0)
+ if (!file)
LOG_ERROR_STR(fileName);
}
else {
if (access(fileName, R_OK) == 0) {
dsyslog("playing '%s'", fileName);
- file = open(fileName, O_RDONLY | BlockingFlag);
- if (file < 0)
+ file = cUnbufferedFile::Create(fileName, O_RDONLY | BlockingFlag);
+ if (!file)
LOG_ERROR_STR(fileName);
}
else if (errno != ENOENT)
@@ -1305,14 +1305,14 @@ int cFileName::Open(void)
void cFileName::Close(void)
{
- if (file >= 0) {
- if ((record && CloseVideoFile(file) < 0) || (!record && close(file) < 0))
+ if (file) {
+ if ((record && CloseVideoFile(file) < 0) || (!record && file->Close() < 0))
LOG_ERROR_STR(fileName);
- file = -1;
+ file = NULL;
}
}
-int cFileName::SetOffset(int Number, int Offset)
+cUnbufferedFile *cFileName::SetOffset(int Number, int Offset)
{
if (fileNumber != Number)
Close();
@@ -1337,23 +1337,23 @@ int cFileName::SetOffset(int Number, int Offset)
}
else if (errno != ENOENT) { // something serious has happened
LOG_ERROR_STR(fileName);
- return -1;
+ return NULL;
}
// found a non existing file suffix
}
if (Open() >= 0) {
- if (!record && Offset >= 0 && lseek(file, Offset, SEEK_SET) != Offset) {
+ if (!record && Offset >= 0 && file->Seek(Offset, SEEK_SET) != Offset) {
LOG_ERROR_STR(fileName);
- return -1;
+ return NULL;
}
}
return file;
}
esyslog("ERROR: max number of files (%d) exceeded", MAXFILESPERRECORDING);
- return -1;
+ return NULL;
}
-int cFileName::NextFile(void)
+cUnbufferedFile *cFileName::NextFile(void)
{
return SetOffset(fileNumber + 1);
}
@@ -1387,7 +1387,7 @@ int SecondsToFrames(int Seconds)
// --- ReadFrame -------------------------------------------------------------
-int ReadFrame(int f, uchar *b, int Length, int Max)
+int ReadFrame(cUnbufferedFile *f, uchar *b, int Length, int Max)
{
if (Length == -1)
Length = Max; // this means we read up to EOF (see cIndex)
@@ -1395,10 +1395,8 @@ int ReadFrame(int f, uchar *b, int Length, int Max)
esyslog("ERROR: frame larger than buffer (%d > %d)", Length, Max);
Length = Max;
}
- int r = safe_read(f, b, Length);
+ int r = f->Read(b, Length);
if (r < 0)
LOG_ERROR;
return r;
}
-
-