1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
#ifndef __dvb_idemux_h
#define __dvb_idemux_h
#include <lib/dvb/idvb.h>
#ifndef DMX_FILTER_SIZE
#define DMX_FILTER_SIZE 16
#endif
struct eDVBSectionFilterMask
{
int pid;
/* mode is 0 for positive, 1 for negative filtering */
__u8 data[DMX_FILTER_SIZE], mask[DMX_FILTER_SIZE], mode[DMX_FILTER_SIZE];
enum {
rfCRC=1,
rfNoAbort=2
};
int flags;
};
struct eDVBTableSpec
{
int pid, tid, tidext, tid_mask, tidext_mask;
int version;
int timeout; /* timeout in ms */
enum
{
tfInOrder=1,
/*
tfAnyVersion filter ANY version
0 filter all EXCEPT given version (negative filtering)
tfThisVersion filter only THIS version
*/
tfAnyVersion=2,
tfThisVersion=4,
tfHaveTID=8,
tfHaveTIDExt=16,
tfCheckCRC=32,
tfHaveTimeout=64,
tfHaveTIDMask=128,
tfHaveTIDExtMask=256
};
int flags;
};
class iDVBSectionReader: public iObject
{
public:
virtual RESULT start(const eDVBSectionFilterMask &mask)=0;
virtual RESULT stop()=0;
virtual RESULT connectRead(const Slot1<void,const __u8*> &read, ePtr<eConnection> &conn)=0;
virtual ~iDVBSectionReader() { };
};
/* records a given set of pids into a file descriptor. */
/* the FD must not be modified between start() and stop() ! */
class iDVBTSRecorder: public iObject
{
public:
virtual RESULT start() = 0;
virtual RESULT addPID(int pid) = 0;
virtual RESULT removePID(int pid) = 0;
/* include timestamps? ... */
virtual RESULT setFormat(int pid) = 0;
virtual RESULT setTargetFD(int fd) = 0;
virtual RESULT setBoundary(off_t max) = 0;
virtual RESULT stop() = 0;
enum {
eventWriteError,
/* a write error has occured. data won't get lost if fd is writable after return. */
/* you MUST respond with either stop() or fixing the problems, else you get the error */
/* again. */
eventReachedBoundary,
/* the programmed boundary was reached. you might set a new target fd. you can close the */
/* old one. */
};
virtual RESULT connectEvent(const Slot1<void,int> &event, ePtr<eConnection> &conn)=0;
};
#endif
|