diff options
author | lordjaxom <lordjaxom> | 2004-12-30 22:43:55 +0000 |
---|---|---|
committer | lordjaxom <lordjaxom> | 2004-12-30 22:43:55 +0000 |
commit | 302fa2e67276bd0674e81e2a9a01b9e91dd45d8c (patch) | |
tree | a454884a16e0ffa48b5ce3e4ce1a66eb874a9de0 /client/filter.h | |
download | vdr-plugin-streamdev-302fa2e67276bd0674e81e2a9a01b9e91dd45d8c.tar.gz vdr-plugin-streamdev-302fa2e67276bd0674e81e2a9a01b9e91dd45d8c.tar.bz2 |
Initial revision
Diffstat (limited to 'client/filter.h')
-rw-r--r-- | client/filter.h | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/client/filter.h b/client/filter.h new file mode 100644 index 0000000..679b2b5 --- /dev/null +++ b/client/filter.h @@ -0,0 +1,64 @@ +/* + * $Id: filter.h,v 1.1 2004/12/30 22:44:04 lordjaxom Exp $ + */ + +#ifndef VDR_STREAMDEV_FILTER_H +#define VDR_STREAMDEV_FILTER_H + +#include <vdr/config.h> + +# if VDRVERSNUM >= 10300 + +#include <vdr/tools.h> +#include <vdr/thread.h> + +class cRingBufferFrame; +class cRingBufferLinear; + +class cStreamdevFilter: public cListObject { +private: + uchar m_Buffer[4096]; + int m_Used; + int m_Pipe[2]; + u_short m_Pid; + u_char m_Tid; + u_char m_Mask; + cRingBufferFrame *m_RingBuffer; + +public: + cStreamdevFilter(u_short Pid, u_char Tid, u_char Mask); + virtual ~cStreamdevFilter(); + + bool Matches(u_short Pid, u_char Tid); + bool PutSection(const uchar *Data, int Length); + int ReadPipe(void) const { return m_Pipe[0]; } + + u_short Pid(void) const { return m_Pid; } + u_char Tid(void) const { return m_Tid; } + u_char Mask(void) const { return m_Mask; } + +}; + +inline bool cStreamdevFilter::Matches(u_short Pid, u_char Tid) { + return m_Pid == Pid && m_Tid == (Tid & m_Mask); +} + +class cStreamdevFilters: public cList<cStreamdevFilter>, public cThread { +private: + bool m_Active; + cRingBufferLinear *m_RingBuffer; + +protected: + virtual void Action(void); + +public: + cStreamdevFilters(void); + virtual ~cStreamdevFilters(); + + int OpenFilter(u_short Pid, u_char Tid, u_char Mask); + cStreamdevFilter *Matches(u_short Pid, u_char Tid); + void Put(const uchar *Data); +}; + +# endif // VDRVERSNUM >= 10300 +#endif // VDR_STREAMDEV_FILTER_H |