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