mirror of
https://projects.vdr-developer.org/git/vdr-plugin-streamdev.git
synced 2023-10-10 19:16:51 +02:00
client_filter-visibility.patch by Petri Hintukainen
- Move cStreamdevFilter definition from filter.h to filter.c - Add IsClosed() and Reset() members to cStreamdevFilter: * IsClosed() returns true if filter was closed by VDR * Reset() discards (incomplete) queued section data Modified Files: client/filter.c client/filter.h
This commit is contained in:
parent
3ceb716ea9
commit
313da9682d
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: filter.c,v 1.3 2005/11/06 16:43:58 lordjaxom Exp $
|
||||
* $Id: filter.c,v 1.4 2007/04/23 11:23:15 schmirl Exp $
|
||||
*/
|
||||
|
||||
#include "client/filter.h"
|
||||
@ -7,11 +7,41 @@
|
||||
#include "tools/select.h"
|
||||
#include "common.h"
|
||||
|
||||
#include <vdr/ringbuffer.h>
|
||||
#include <vdr/device.h>
|
||||
|
||||
#if VDRVERSNUM >= 10300
|
||||
|
||||
// --- cStreamdevFilter ------------------------------------------------------
|
||||
|
||||
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;
|
||||
|
||||
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]; }
|
||||
|
||||
bool IsClosed(void);
|
||||
void Reset(void);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
cStreamdevFilter::cStreamdevFilter(u_short Pid, u_char Tid, u_char Mask) {
|
||||
m_Used = 0;
|
||||
m_Pid = Pid;
|
||||
@ -53,6 +83,33 @@ bool cStreamdevFilter::PutSection(const uchar *Data, int Length) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void cStreamdevFilter::Reset(void) {
|
||||
if(m_Used)
|
||||
dsyslog("cStreamdevFilter::Reset skipping %d bytes", m_Used);
|
||||
m_Used = 0;
|
||||
}
|
||||
|
||||
bool cStreamdevFilter::IsClosed(void) {
|
||||
char m_Buffer[3] = {0,0,0}; /* tid 0, 0 bytes */
|
||||
|
||||
// Test if pipe/socket has been closed by writing empty section
|
||||
if (write(m_Pipe[1], m_Buffer, 3) < 0 &&
|
||||
errno != EAGAIN &&
|
||||
errno != EWOULDBLOCK) {
|
||||
|
||||
if (errno != ECONNREFUSED &&
|
||||
errno != ECONNRESET &&
|
||||
errno != EPIPE)
|
||||
esyslog("cStreamdevFilter::TestPipe: failed: %m");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// --- cStreamdevFilters -----------------------------------------------------
|
||||
|
||||
cStreamdevFilters::cStreamdevFilters(void):
|
||||
cThread("streamdev-client: sections assembler") {
|
||||
m_Active = false;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: filter.h,v 1.1 2004/12/30 22:44:04 lordjaxom Exp $
|
||||
* $Id: filter.h,v 1.2 2007/04/23 11:23:15 schmirl Exp $
|
||||
*/
|
||||
|
||||
#ifndef VDR_STREAMDEV_FILTER_H
|
||||
@ -12,36 +12,9 @@
|
||||
#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 cTSBuffer;
|
||||
class cStreamdevFilter;
|
||||
|
||||
class cStreamdevFilters: public cList<cStreamdevFilter>, public cThread {
|
||||
private:
|
||||
|
Loading…
Reference in New Issue
Block a user