diff options
author | schmirl <schmirl> | 2009-06-19 06:32:38 +0000 |
---|---|---|
committer | schmirl <schmirl> | 2009-06-19 06:32:38 +0000 |
commit | 008e7c851013722a377aa9ff4485d4af2d991883 (patch) | |
tree | 8178a3251d528849d2ccbb0cef9b1bd712cfd6f9 /server/streamer.h | |
parent | 64ff2c08be769cf227ac6cf2e318fcb6b80c9689 (diff) | |
download | vdr-plugin-streamdev-008e7c851013722a377aa9ff4485d4af2d991883.tar.gz vdr-plugin-streamdev-008e7c851013722a377aa9ff4485d4af2d991883.tar.bz2 |
- added namespace to remuxers
- increased WRITERBUFSIZE - buffer was too small for high bandwidth content
- removed cStreamdevStreamer::m_Running
- eliminated potential busy waits in remuxers
- updated cTSRemux static helpers to code of their VDR 1.6.0 counterparts
- re-enabled PES vor VDR 1.7.3+. Streamdev now uses a copy of VDR 1.6.0's
cRemux for TS to PES remuxing.
- make sure that only complete TS packets are written to ringbuffers
- use signaling instead of sleeps when writing to ringbuffers
- optimized cStreamdevPatFilter PAT packet initialization
- fixed cStreamdevPatFilter not processing PATs with length > TS_SIZE - 5
- use a small ringbuffer for cStreamdevPatFilter instead of writing to
cStreamdevStreamers SendBuffer as two threads mustn't write to the same
ringbuffer
Modified Files:
CONTRIBUTORS HISTORY Makefile common.c common.h
streamdev-server.c libdvbmpeg/transform.h remux/extern.c
remux/extern.h remux/ts2es.c remux/ts2es.h remux/ts2ps.c
remux/ts2ps.h remux/tsremux.c remux/tsremux.h
server/connectionHTTP.c server/connectionVTP.c
server/livestreamer.c server/livestreamer.h server/menuHTTP.c
server/streamer.c server/streamer.h
Added Files:
remux/ts2pes.c remux/ts2pes.h
Diffstat (limited to 'server/streamer.h')
-rw-r--r-- | server/streamer.h | 43 |
1 files changed, 34 insertions, 9 deletions
diff --git a/server/streamer.h b/server/streamer.h index 20323b7..6561bc2 100644 --- a/server/streamer.h +++ b/server/streamer.h @@ -1,5 +1,5 @@ /* - * $Id: streamer.h,v 1.10 2009/02/13 10:39:22 schmirl Exp $ + * $Id: streamer.h,v 1.11 2009/06/19 06:32:45 schmirl Exp $ */ #ifndef VDR_STREAMDEV_STREAMER_H @@ -16,8 +16,34 @@ class cStreamdevStreamer; #define TS_SIZE 188 #endif -#define STREAMERBUFSIZE MEGABYTE(4) -#define WRITERBUFSIZE KILOBYTE(256) +#define STREAMERBUFSIZE (20000 * TS_SIZE) +#define WRITERBUFSIZE (5000 * TS_SIZE) + +// --- cStreamdevBuffer ------------------------------------------------------- + +class cStreamdevBuffer: public cRingBufferLinear { +public: + // make public + void WaitForPut(void) { cRingBuffer::WaitForPut(); } + // Always write complete TS packets + // (assumes Count is a multiple of TS_SIZE) + int PutTS(const uchar *Data, int Count); + cStreamdevBuffer(int Size, int Margin = 0, bool Statistics = false, const char *Description = NULL); +}; + +inline int cStreamdevBuffer::PutTS(const uchar *Data, int Count) +{ + int free = Free(); + if (free < Count) + Count = free; + + Count -= Count % TS_SIZE; + if (Count) + Count = Put(Data, Count); + else + WaitForPut(); + return Count; +} // --- cStreamdevWriter ------------------------------------------------------- @@ -38,15 +64,14 @@ public: class cStreamdevStreamer: public cThread { private: - bool m_Running; cStreamdevWriter *m_Writer; - cRingBufferLinear *m_RingBuffer; - cRingBufferLinear *m_SendBuffer; + cStreamdevBuffer *m_RingBuffer; + cStreamdevBuffer *m_SendBuffer; protected: virtual void Action(void); - bool IsRunning(void) const { return m_Running; } + bool IsRunning(void) const { return m_Writer; } public: cStreamdevStreamer(const char *Name); @@ -57,10 +82,10 @@ public: bool Abort(void); void Activate(bool On); - int Receive(uchar *Data, int Length) { return m_RingBuffer->Put(Data, Length); } + int Receive(uchar *Data, int Length) { return m_RingBuffer->PutTS(Data, Length); } void ReportOverflow(int Bytes) { m_RingBuffer->ReportOverflow(Bytes); } - virtual int Put(const uchar *Data, int Count) { return m_SendBuffer->Put(Data, Count); } + virtual int Put(const uchar *Data, int Count) { return m_SendBuffer->PutTS(Data, Count); } virtual uchar *Get(int &Count) { return m_SendBuffer->Get(Count); } virtual void Del(int Count) { m_SendBuffer->Del(Count); } |