diff options
author | Klaus Schmidinger <vdr@tvdr.de> | 2001-03-31 08:42:27 +0200 |
---|---|---|
committer | Klaus Schmidinger <vdr@tvdr.de> | 2001-03-31 08:42:27 +0200 |
commit | 5c68fc100c87bf677932852fbcd446199c03fecb (patch) | |
tree | d8257dcf6457b0f38124606fb0419912ffc71bfc /ringbuffer.h | |
parent | 191fb910bf8f908266dd512a9c649cc906cb72d0 (diff) | |
download | vdr-5c68fc100c87bf677932852fbcd446199c03fecb.tar.gz vdr-5c68fc100c87bf677932852fbcd446199c03fecb.tar.bz2 |
Redesigned the ring buffer; prepared for remultiplexing
Diffstat (limited to 'ringbuffer.h')
-rw-r--r-- | ringbuffer.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/ringbuffer.h b/ringbuffer.h new file mode 100644 index 00000000..605f553f --- /dev/null +++ b/ringbuffer.h @@ -0,0 +1,55 @@ +/* + * ringbuffer.h: A threaded ring buffer + * + * See the main source file 'vdr.c' for copyright information and + * how to reach the author. + * + * $Id: ringbuffer.h 1.1 2001/03/18 16:47:00 kls Exp $ + */ + +#ifndef __RINGBUFFER_H +#define __RINGBUFFER_H + +#include "thread.h" + +typedef unsigned char uchar; + +class cRingBufferInputThread; +class cRingBufferOutputThread; + +class cRingBuffer { + friend class cRingBufferInputThread; + friend class cRingBufferOutputThread; +private: + cRingBufferInputThread *inputThread; + cRingBufferOutputThread *outputThread; + cMutex mutex; + int size, head, tail; + uchar *buffer; + int maxFill; + bool busy; +protected: + bool Busy(void) { return busy; } + void Clear(void); + // Immediately clears the ring buffer. + int Put(const uchar *Data, int Count); + // Puts at most Count bytes of Data into the ring buffer. + // Returns the number of bytes actually stored. + int Get(uchar *Data, int Count); + // Gets at most Count bytes of Data from the ring buffer. + // Returns the number of bytes actually retrieved. + virtual void Input(void) = 0; + // Runs as a separate thread and shall continuously read data from + // a source and call Put() to store the data in the ring buffer. + virtual void Output(void) = 0; + // Runs as a separate thread and shall continuously call Get() to + // retrieve data from the ring buffer and write it to a destination. +public: + cRingBuffer(int Size); + virtual ~cRingBuffer(); + bool Start(void); + bool Active(void); + void Stop(void); + }; + +#endif // __RINGBUFFER_H |