diff options
| author | Frank Schmirler <vdr@schmirler.de> | 2012-12-16 12:40:44 +0100 |
|---|---|---|
| committer | Frank Schmirler <vdr@schmirler.de> | 2012-12-16 12:40:44 +0100 |
| commit | f5da0ea1fcad8078b78fe03d49b88fc92daecf35 (patch) | |
| tree | d7b2e4561188aeaddb6f11bc6378288c017dec2a /server/livefilter.c | |
| parent | 0677f483295d2b6f0cb777c3bfe0ffb2d12b3585 (diff) | |
| download | vdr-plugin-streamdev-f5da0ea1fcad8078b78fe03d49b88fc92daecf35.tar.gz vdr-plugin-streamdev-f5da0ea1fcad8078b78fe03d49b88fc92daecf35.tar.bz2 | |
Restructured cStreamdevStreamer: Moved inbound buffer into actual subclass.
Diffstat (limited to 'server/livefilter.c')
| -rw-r--r-- | server/livefilter.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/server/livefilter.c b/server/livefilter.c index 113789b..c707b3b 100644 --- a/server/livefilter.c +++ b/server/livefilter.c @@ -11,18 +11,19 @@ # define TS_SYNC_BYTE 0x47 #endif +#define FILTERBUFSIZE (1000 * TS_SIZE) // --- cStreamdevLiveFilter ------------------------------------------------- class cStreamdevLiveFilter: public cFilter { private: - cStreamdevStreamer *m_Streamer; + cStreamdevFilterStreamer *m_Streamer; protected: virtual void Process(u_short Pid, u_char Tid, const u_char *Data, int Length); public: - cStreamdevLiveFilter(cStreamdevStreamer *Streamer); + cStreamdevLiveFilter(cStreamdevFilterStreamer *Streamer); void Set(u_short Pid, u_char Tid, u_char Mask) { cFilter::Set(Pid, Tid, Mask); @@ -32,7 +33,7 @@ public: } }; -cStreamdevLiveFilter::cStreamdevLiveFilter(cStreamdevStreamer *Streamer) { +cStreamdevLiveFilter::cStreamdevLiveFilter(cStreamdevFilterStreamer *Streamer) { m_Streamer = Streamer; } @@ -54,9 +55,7 @@ void cStreamdevLiveFilter::Process(u_short Pid, u_char Tid, const u_char *Data, length -= chunk; pos += chunk; - int p = m_Streamer->Put(buffer, TS_SIZE); - if (p != TS_SIZE) - m_Streamer->ReportOverflow(TS_SIZE - p); + m_Streamer->Receive(buffer); } } @@ -68,6 +67,8 @@ cStreamdevFilterStreamer::cStreamdevFilterStreamer(): m_Filter(NULL)/*, m_Channel(NULL)*/ { + m_ReceiveBuffer = new cStreamdevBuffer(FILTERBUFSIZE, TS_SIZE); + m_ReceiveBuffer->SetTimeouts(0, 500); } cStreamdevFilterStreamer::~cStreamdevFilterStreamer() @@ -77,6 +78,14 @@ cStreamdevFilterStreamer::~cStreamdevFilterStreamer() m_Device = NULL; DELETENULL(m_Filter); Stop(); + delete m_ReceiveBuffer; +} + +void cStreamdevFilterStreamer::Receive(uchar *Data) +{ + int p = m_ReceiveBuffer->PutTS(Data, TS_SIZE); + if (p != TS_SIZE) + m_ReceiveBuffer->ReportOverflow(TS_SIZE - p); } void cStreamdevFilterStreamer::Attach(void) |
