client_filter-data-handling.patch by Petri Hintukainen

- regonize PUSI flag in TS packets (bullet-proof section start+end indicator)
- Use own TS buffer to read directly from socket, no need for ring buffer anymore
- Re-activate all active filters after re-connection to server
- Simplify thread start/stop/running detection to current VDR style
- Update "filter closed by VDR" detection (datagram sockets
  return different errno's than pipes)
- Deliver data to first matching and active filter (do not drop data if first
  matching filter has been closed, there is quite likely new filter for it)
- Add disconnect detection to avoid 100% CPU usage in cTSBuffer::Action()
Modified Files:
	client/filter.c client/filter.h
This commit is contained in:
schmirl
2007-04-24 11:23:16 +00:00
parent 52bf110aa9
commit 518886b08b
2 changed files with 96 additions and 42 deletions

View File

@@ -1,5 +1,5 @@
/*
* $Id: filter.h,v 1.3 2007/04/23 12:52:28 schmirl Exp $
* $Id: filter.h,v 1.4 2007/04/24 11:23:16 schmirl Exp $
*/
#ifndef VDR_STREAMDEV_FILTER_H
@@ -12,26 +12,25 @@
#include <vdr/tools.h>
#include <vdr/thread.h>
class cRingBufferLinear;
class cTSBuffer;
class cStreamdevFilter;
class cStreamdevFilters: public cList<cStreamdevFilter>, public cThread {
private:
bool m_Active;
cRingBufferLinear *m_RingBuffer;
cTSBuffer *m_TSBuffer;
protected:
virtual void Action(void);
void CarbageCollect(void);
bool ReActivateFilters(void);
public:
cStreamdevFilters(void);
virtual ~cStreamdevFilters();
void SetConnection(int Handle);
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