summaryrefslogtreecommitdiff
path: root/server/livefilter.c
diff options
context:
space:
mode:
authorFrank Schmirler <vdr@schmirler.de>2012-12-16 12:40:44 +0100
committerFrank Schmirler <vdr@schmirler.de>2012-12-16 12:40:44 +0100
commitf5da0ea1fcad8078b78fe03d49b88fc92daecf35 (patch)
treed7b2e4561188aeaddb6f11bc6378288c017dec2a /server/livefilter.c
parent0677f483295d2b6f0cb777c3bfe0ffb2d12b3585 (diff)
downloadvdr-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.c21
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)