summaryrefslogtreecommitdiff
path: root/dvbplayer.c
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2004-10-16 09:36:28 +0200
committerKlaus Schmidinger <vdr@tvdr.de>2004-10-16 09:36:28 +0200
commit6415cc900de3361925d22f879077be687fce3858 (patch)
tree98ab10cda016e125e33966e371ccfe01e5fd9bd1 /dvbplayer.c
parent15030f6acece1060f9736f875fe3abbcf9392263 (diff)
downloadvdr-6415cc900de3361925d22f879077be687fce3858.tar.gz
vdr-6415cc900de3361925d22f879077be687fce3858.tar.bz2
Improved buffer handling
Diffstat (limited to 'dvbplayer.c')
-rw-r--r--dvbplayer.c26
1 files changed, 12 insertions, 14 deletions
diff --git a/dvbplayer.c b/dvbplayer.c
index 8b60c2e1..c9cdc1ab 100644
--- a/dvbplayer.c
+++ b/dvbplayer.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: dvbplayer.c 1.24 2004/06/19 08:55:49 kls Exp $
+ * $Id: dvbplayer.c 1.25 2004/10/15 13:07:55 kls Exp $
*/
#include "dvbplayer.h"
@@ -80,8 +80,7 @@ private:
int length;
bool hasData;
bool active;
- cMutex mutex;
- cCondVar newSet;
+ cCondWait newSet;
protected:
void Action(void);
public:
@@ -106,20 +105,21 @@ cNonBlockingFileReader::cNonBlockingFileReader(void)
cNonBlockingFileReader::~cNonBlockingFileReader()
{
active = false;
- newSet.Broadcast();
+ newSet.Signal();
Cancel(3);
free(buffer);
}
void cNonBlockingFileReader::Clear(void)
{
- cMutexLock MutexLock(&mutex);
+ Lock();
f = -1;
free(buffer);
buffer = NULL;
wanted = length = 0;
hasData = false;
- newSet.Broadcast();
+ Unlock();
+ newSet.Signal();
}
int cNonBlockingFileReader::Read(int FileHandle, uchar *Buffer, int Length)
@@ -139,7 +139,7 @@ int cNonBlockingFileReader::Read(int FileHandle, uchar *Buffer, int Length)
wanted = Length;
length = 0;
hasData = false;
- newSet.Broadcast();
+ newSet.Signal();
}
errno = EAGAIN;
return -1;
@@ -149,7 +149,7 @@ void cNonBlockingFileReader::Action(void)
{
active = true;
while (active) {
- cMutexLock MutexLock(&mutex);
+ Lock();
if (!hasData && f >= 0 && buffer) {
int r = safe_read(f, buffer + length, wanted - length);
if (r >= 0) {
@@ -163,16 +163,14 @@ void cNonBlockingFileReader::Action(void)
hasData = true;
}
}
- newSet.TimedWait(mutex, 1000);
+ Unlock();
+ newSet.Wait(1000);
}
}
// --- cDvbPlayer ------------------------------------------------------------
-//XXX+ also used in recorder.c - find a better place???
-// The size of the array used to buffer video data:
-// (must be larger than MINVIDEODATA - see remux.h)
-#define VIDEOBUFSIZE MEGABYTE(1)
+#define PLAYERBUFSIZE MEGABYTE(1)
// The number of frames to back up when resuming an interrupted replay session:
#define RESUMEBACKUP (10 * FRAMESPERSEC)
@@ -257,7 +255,7 @@ cDvbPlayer::cDvbPlayer(const char *FileName)
replayFile = fileName->Open();
if (replayFile < 0)
return;
- ringBuffer = new cRingBufferFrame(VIDEOBUFSIZE);
+ ringBuffer = new cRingBufferFrame(PLAYERBUFSIZE);
// Create the index file:
index = new cIndexFile(FileName, false);
if (!index)