openATV enigma2
openATV is an open source SetTopBox Graphical user interface.
demux.h
Go to the documentation of this file.
1 #ifndef __dvb_demux_h
2 #define __dvb_demux_h
3 
4 #include <aio.h>
5 #include <lib/dvb/idvb.h>
6 #include <lib/dvb/idemux.h>
7 #include <lib/dvb/pvrparse.h>
8 #include "filepush.h"
9 
10 class eDVBDemux: public iDVBDemux
11 {
12  DECLARE_REF(eDVBDemux);
13 public:
14  enum {
15  evtFlush
16  };
17  eDVBDemux(int adapter, int demux);
18  virtual ~eDVBDemux();
19 
20  RESULT setSourceFrontend(int fenum);
21  int getSource() { return source; }
22  RESULT setSourcePVR(int pvrnum);
23  int getDvrId() { return m_dvr_id; }
24 
27  RESULT createTSRecorder(ePtr<iDVBTSRecorder> &recorder, unsigned int packetsize = 188, bool streaming=false);
29  RESULT getSTC(pts_t &pts, int num);
30  RESULT getCADemuxID(uint8_t &id) { id = demux; return 0; }
31  RESULT getCAAdapterID(uint8_t &id) { id = adapter; return 0; }
32  RESULT flush();
33  RESULT connectEvent(const sigc::slot1<void,int> &event, ePtr<eConnection> &conn);
34  int openDVR(int flags);
35 
36  int getRefCount() { return ref; }
37 private:
38  int adapter, demux, source;
39 
40  int m_dvr_busy;
41  int m_dvr_id;
42  int m_dvr_source_offset;
43  friend class eDVBSectionReader;
44  friend class eDVBPESReader;
45  friend class eDVBAudio;
46  friend class eDVBVideo;
47  friend class eDVBPCR;
48  friend class eDVBTText;
49  friend class eDVBTSRecorder;
50  friend class eDVBCAService;
51  friend class eTSMPEGDecoder;
52 #ifdef HAVE_AMLOGIC
53  int m_pvr_fd;
54  friend class eAMLTSMPEGDecoder;
55 #endif
56  sigc::signal1<void, int> m_event;
57 
58  int openDemux(void);
59 };
60 
61 class eDVBSectionReader: public iDVBSectionReader, public sigc::trackable
62 {
63  DECLARE_REF(eDVBSectionReader);
64  int fd;
65  sigc::signal1<void, const uint8_t*> read;
66  ePtr<eDVBDemux> demux;
67  int active;
68  int checkcrc;
69  void data(int);
70  ePtr<eSocketNotifier> notifier;
71 public:
72  eDVBSectionReader(eDVBDemux *demux, eMainloop *context, RESULT &res);
73  virtual ~eDVBSectionReader();
75  RESULT start(const eDVBSectionFilterMask &mask);
76  RESULT stop();
77  RESULT connectRead(const sigc::slot1<void,const uint8_t*> &read, ePtr<eConnection> &conn);
78 };
79 
80 class eDVBPESReader: public iDVBPESReader, public sigc::trackable
81 {
82  DECLARE_REF(eDVBPESReader);
83  int m_fd;
84  sigc::signal2<void, const uint8_t*, int> m_read;
85  ePtr<eDVBDemux> m_demux;
86  int m_active;
87  void data(int);
88  ePtr<eSocketNotifier> m_notifier;
89 public:
90  eDVBPESReader(eDVBDemux *demux, eMainloop *context, RESULT &res);
91  virtual ~eDVBPESReader();
93  RESULT start(int pid);
94  RESULT stop();
95  RESULT connectRead(const sigc::slot2<void,const uint8_t*, int> &read, ePtr<eConnection> &conn);
96 };
97 
99 {
100 public:
101  eDVBRecordFileThread(int packetsize, int bufferCount, int buffersize = -1, bool sync_mode = false);
103  void setTimingPID(int pid, iDVBTSRecorder::timing_pid_type pidtype, int streamtype);
104  void startSaveMetaInformation(const std::string &filename);
106  int getLastPTS(pts_t &pts);
107  int getFirstPTS(pts_t &pts);
108  void setTargetFD(int fd) { m_fd_dest = fd; }
110 protected:
111  int asyncWrite(int len);
112  /* override */ int writeData(int len);
113  /* override */ void flush();
114 
115  struct AsyncIO
116  {
117  struct aiocb aio;
118  unsigned char* buffer;
120  {
121  memset(&aio, 0, sizeof(aiocb));
122  buffer = NULL;
123  }
124  int wait();
125  int start(int fd, off_t offset, size_t nbytes, void* buffer);
126  int poll(); // returns 1 if busy, 0 if ready, <0 on error return
127  int cancel(int fd); // returns <0 on error, 0 cancelled, >0 bytes written?
128  };
133  typedef std::vector<AsyncIO> AsyncIOvector;
134  unsigned char* m_allocated_buffer;
136  AsyncIOvector::iterator m_current_buffer;
137  std::vector<int> m_buffer_use_histogram;
138 };
139 
141 {
142 public:
143  eDVBRecordStreamThread(int packetsize, int buffersize = -1, bool sync_mode = false);
144 
145 protected:
146  int writeData(int len);
147  void flush();
148 };
149 
150 class eDVBTSRecorder: public iDVBTSRecorder, public sigc::trackable
151 {
152  DECLARE_REF(eDVBTSRecorder);
153 public:
154  eDVBTSRecorder(eDVBDemux *demux, int packetsize, bool streaming);
155  ~eDVBTSRecorder();
156 
158  RESULT start();
159  RESULT addPID(int pid);
160  RESULT removePID(int pid);
161 
162  RESULT setTimingPID(int pid, timing_pid_type pidtype, int streamtype);
163 
164  RESULT setTargetFD(int fd);
165  RESULT setTargetFilename(const std::string& filename);
166  RESULT setBoundary(off_t max);
168 
169  RESULT stop();
170 
171  RESULT getCurrentPCR(pts_t &pcr);
172  RESULT getFirstPTS(pts_t &pts);
173 
174  RESULT connectEvent(const sigc::slot1<void,int> &event, ePtr<eConnection> &conn);
175 private:
176  RESULT startPID(int pid);
177  void stopPID(int pid);
178 
179  void filepushEvent(int event);
180 
181  std::map<int,int> m_pids;
182  sigc::signal1<void,int> m_event;
183 
184  ePtr<eDVBDemux> m_demux;
185 
186  int m_running;
187  int m_target_fd;
188  int m_source_fd;
189  eDVBRecordFileThread *m_thread;
190  std::string m_target_filename;
191  int m_packetsize;
192  friend class eRTSPStreamClient;
193 };
194 
195 #endif
long long pts_t
Definition: cfile.h:7
Definition: amldecoder.h:35
Definition: decoder.h:10
Definition: cahandler.h:103
Definition: demux.h:11
@ evtFlush
Definition: demux.h:15
RESULT createSectionReader(eMainloop *context, ePtr< iDVBSectionReader > &reader)
Definition: demux.cpp:146
RESULT createTSRecorder(ePtr< iDVBTSRecorder > &recorder, unsigned int packetsize=188, bool streaming=false)
Definition: demux.cpp:164
eDVBDemux(int adapter, int demux)
Definition: demux.cpp:66
RESULT setSourcePVR(int pvrnum)
Definition: demux.cpp:132
int getDvrId()
Definition: demux.h:23
RESULT setSourceFrontend(int fenum)
Definition: demux.cpp:109
virtual ~eDVBDemux()
Definition: demux.cpp:82
RESULT flush()
Definition: demux.cpp:208
RESULT getCAAdapterID(uint8_t &id)
Definition: demux.h:31
RESULT getSTC(pts_t &pts, int num)
Definition: demux.cpp:182
int getSource()
Definition: demux.h:21
int openDVR(int flags)
Definition: demux.cpp:94
int getRefCount()
Definition: demux.h:36
RESULT getCADemuxID(uint8_t &id)
Definition: demux.h:30
RESULT connectEvent(const sigc::slot1< void, int > &event, ePtr< eConnection > &conn)
Definition: demux.cpp:216
RESULT createPESReader(eMainloop *context, ePtr< iDVBPESReader > &reader)
Definition: demux.cpp:155
RESULT getMPEGDecoder(ePtr< iTSMPEGDecoder > &reader, int index)
Definition: demux.cpp:172
Definition: decoder.h:65
Definition: demux.h:81
virtual ~eDVBPESReader()
Definition: demux.cpp:387
RESULT stop()
Definition: demux.cpp:421
RESULT setBufferSize(int size)
Definition: demux.cpp:377
eDVBPESReader(eDVBDemux *demux, eMainloop *context, RESULT &res)
Definition: demux.cpp:359
RESULT start(int pid)
Definition: demux.cpp:393
RESULT connectRead(const sigc::slot2< void, const uint8_t *, int > &read, ePtr< eConnection > &conn)
Definition: demux.cpp:433
Definition: demux.h:99
AsyncIOvector m_aio
Definition: demux.h:135
bool m_sync_mode
Definition: demux.h:132
void startSaveMetaInformation(const std::string &filename)
Definition: demux.cpp:484
void stopSaveMetaInformation()
Definition: demux.cpp:489
AsyncIOvector::iterator m_current_buffer
Definition: demux.h:136
void enableAccessPoints(bool enable)
Definition: demux.h:109
unsigned char * m_allocated_buffer
Definition: demux.h:134
eDVBRecordFileThread(int packetsize, int bufferCount, int buffersize=-1, bool sync_mode=false)
Definition: demux.cpp:439
~eDVBRecordFileThread()
Definition: demux.cpp:474
void setTargetFD(int fd)
Definition: demux.h:108
std::vector< int > m_buffer_use_histogram
Definition: demux.h:137
int getLastPTS(pts_t &pts)
Definition: demux.cpp:494
int getFirstPTS(pts_t &pts)
Definition: demux.cpp:499
int asyncWrite(int len)
Definition: demux.cpp:567
eMPEGStreamParserTS m_ts_parser
Definition: demux.h:129
void setTimingPID(int pid, iDVBTSRecorder::timing_pid_type pidtype, int streamtype)
Definition: demux.cpp:479
int m_fd_dest
Definition: demux.h:131
void flush()
Definition: demux.cpp:673
int writeData(int len)
Definition: demux.cpp:630
off_t m_current_offset
Definition: demux.h:130
std::vector< AsyncIO > AsyncIOvector
Definition: demux.h:133
Definition: demux.h:141
int writeData(int len)
Definition: demux.cpp:704
void flush()
Definition: demux.cpp:770
eDVBRecordStreamThread(int packetsize, int buffersize=-1, bool sync_mode=false)
Definition: demux.cpp:697
Definition: demux.h:62
RESULT setBufferSize(int size)
Definition: demux.cpp:272
RESULT connectRead(const sigc::slot1< void, const uint8_t * > &read, ePtr< eConnection > &conn)
Definition: demux.cpp:327
RESULT start(const eDVBSectionFilterMask &mask)
Definition: demux.cpp:280
RESULT stop()
Definition: demux.cpp:315
virtual ~eDVBSectionReader()
Definition: demux.cpp:266
eDVBSectionReader(eDVBDemux *demux, eMainloop *context, RESULT &res)
Definition: demux.cpp:248
Definition: demux.h:151
RESULT start()
Definition: demux.cpp:813
RESULT setBufferSize(int size)
Definition: demux.cpp:877
eDVBTSRecorder(eDVBDemux *demux, int packetsize, bool streaming)
Definition: demux.cpp:797
RESULT setTargetFilename(const std::string &filename)
Definition: demux.cpp:921
RESULT addPID(int pid)
Definition: demux.cpp:885
RESULT setTargetFD(int fd)
Definition: demux.cpp:914
RESULT getFirstPTS(pts_t &pts)
Definition: demux.cpp:992
~eDVBTSRecorder()
Definition: demux.cpp:807
RESULT enableAccessPoints(bool enable)
Definition: demux.cpp:927
RESULT setTimingPID(int pid, timing_pid_type pidtype, int streamtype)
Definition: demux.cpp:908
RESULT setBoundary(off_t max)
Definition: demux.cpp:933
RESULT removePID(int pid)
Definition: demux.cpp:896
RESULT getCurrentPCR(pts_t &pcr)
Definition: demux.cpp:980
RESULT connectEvent(const sigc::slot1< void, int > &event, ePtr< eConnection > &conn)
Definition: demux.cpp:1000
RESULT stop()
Definition: demux.cpp:938
Definition: decoder.h:78
Definition: decoder.h:30
Definition: filepush.h:71
Definition: pvrparse.h:115
void enableAccessPoints(bool enable)
Definition: pvrparse.h:122
Definition: ebase.h:187
Definition: rtspstreamserver.h:17
Definition: decoder.h:91
Definition: idvb.h:755
Definition: idemux.h:17
Definition: idemux.h:7
Definition: idemux.h:29
timing_pid_type
Definition: idemux.h:36
#define NULL
Definition: eerror.h:101
const char * filename
Definition: epng.h:36
reader
Definition: InputHotplug.py:47
enable
Definition: Extensions/MiniTV/plugin.py:8
size
Definition: Plugins/SystemPlugins/PositionerSetup/log.py:16
list ref
Definition: create_picon_e1_to_e2.py:17
index
Definition: main.py:28
int RESULT
Definition: object.h:12
#define max(a, b)
Definition: region.cpp:7
Definition: demux.h:116
int cancel(int fd)
Definition: demux.cpp:530
unsigned char * buffer
Definition: demux.h:118
int poll()
Definition: demux.cpp:539
AsyncIO()
Definition: demux.h:119
struct aiocb aio
Definition: demux.h:117
int wait()
Definition: demux.cpp:504
int start(int fd, off_t offset, size_t nbytes, void *buffer)
Definition: demux.cpp:557
Definition: idvb.h:24