4 #include <lib/dvb/idvb.h>
5 #include <lib/dvb/idemux.h>
7 class eDVBDemux: public iDVBDemux
9 DECLARE_REF(eDVBDemux);
14 eDVBDemux(int adapter, int demux);
17 RESULT setSourceFrontend(int fenum);
18 int getSource() { return source; }
19 RESULT setSourcePVR(int pvrnum);
21 RESULT createSectionReader(eMainloop *context, ePtr<iDVBSectionReader> &reader);
22 RESULT createPESReader(eMainloop *context, ePtr<iDVBPESReader> &reader);
23 RESULT createTSRecorder(ePtr<iDVBTSRecorder> &recorder);
24 RESULT getMPEGDecoder(ePtr<iTSMPEGDecoder> &reader, int primary);
25 RESULT getSTC(pts_t &pts, int num);
26 RESULT getCADemuxID(uint8_t &id) { id = demux; return 0; }
28 RESULT connectEvent(const Slot1<void,int> &event, ePtr<eConnection> &conn);
29 int openDVR(int flags);
31 int getRefCount() { return ref; }
33 int adapter, demux, source;
36 friend class eDVBSectionReader;
37 friend class eDVBPESReader;
38 friend class eDVBAudio;
39 friend class eDVBVideo;
41 friend class eDVBTText;
42 friend class eDVBTSRecorder;
43 friend class eDVBCAService;
44 Signal1<void, int> m_event;
49 class eDVBSectionReader: public iDVBSectionReader, public Object
51 DECLARE_REF(eDVBSectionReader);
53 Signal1<void, const __u8*> read;
54 ePtr<eDVBDemux> demux;
58 ePtr<eSocketNotifier> notifier;
60 eDVBSectionReader(eDVBDemux *demux, eMainloop *context, RESULT &res);
61 virtual ~eDVBSectionReader();
62 RESULT setBufferSize(int size);
63 RESULT start(const eDVBSectionFilterMask &mask);
65 RESULT connectRead(const Slot1<void,const __u8*> &read, ePtr<eConnection> &conn);
68 class eDVBPESReader: public iDVBPESReader, public Object
70 DECLARE_REF(eDVBPESReader);
72 Signal2<void, const __u8*, int> m_read;
73 ePtr<eDVBDemux> m_demux;
76 ePtr<eSocketNotifier> m_notifier;
78 eDVBPESReader(eDVBDemux *demux, eMainloop *context, RESULT &res);
79 virtual ~eDVBPESReader();
80 RESULT setBufferSize(int size);
81 RESULT start(int pid);
83 RESULT connectRead(const Slot2<void,const __u8*, int> &read, ePtr<eConnection> &conn);
86 class eDVBRecordFileThread;
88 class eDVBTSRecorder: public iDVBTSRecorder, public Object
90 DECLARE_REF(eDVBTSRecorder);
92 eDVBTSRecorder(eDVBDemux *demux);
95 RESULT setBufferSize(int size);
97 RESULT addPID(int pid);
98 RESULT removePID(int pid);
100 RESULT setTimingPID(int pid, int type);
102 RESULT setTargetFD(int fd);
103 RESULT setTargetFilename(const char *filename);
104 RESULT setBoundary(off_t max);
108 RESULT getCurrentPCR(pts_t &pcr);
110 RESULT connectEvent(const Slot1<void,int> &event, ePtr<eConnection> &conn);
112 RESULT startPID(int pid);
113 void stopPID(int pid);
115 eDVBRecordFileThread *m_thread;
116 void filepushEvent(int event);
118 std::map<int,int> m_pids;
119 Signal1<void,int> m_event;
121 ePtr<eDVBDemux> m_demux;
123 int m_running, m_target_fd, m_source_fd;
124 std::string m_target_filename;