X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/1aeefd997cc362c3b37c1587c5f08891b35c3a75..479df2313449286767814bc0c89624fdd45d2a2d:/lib/dvb/demux.h diff --git a/lib/dvb/demux.h b/lib/dvb/demux.h index c7fa5bc0..08d9f43d 100644 --- a/lib/dvb/demux.h +++ b/lib/dvb/demux.h @@ -2,25 +2,39 @@ #define __dvb_demux_h #include -#include +#include class eDVBDemux: public iDVBDemux { int adapter, demux; + + int m_dvr_busy; friend class eDVBSectionReader; friend class eDVBAudio; friend class eDVBVideo; + friend class eDVBPCR; + friend class eDVBTSRecorder; + friend class eDVBCAService; + Signal1 m_event; public: - DECLARE_REF + enum { + evtFlush + }; + DECLARE_REF(eDVBDemux); eDVBDemux(int adapter, int demux); virtual ~eDVBDemux(); RESULT createSectionReader(eMainloop *context, ePtr &reader); + RESULT createTSRecorder(ePtr &recorder); RESULT getMPEGDecoder(ePtr &reader); + RESULT getSTC(pts_t &pts); + RESULT getCADemuxID(uint8_t &id) { id = demux; return 0; } + RESULT flush(); + RESULT connectEvent(const Slot1 &event, ePtr &conn); }; class eDVBSectionReader: public iDVBSectionReader, public Object { - DECLARE_REF + DECLARE_REF(eDVBSectionReader); private: int fd; Signal1 read; @@ -38,4 +52,39 @@ public: RESULT connectRead(const Slot1 &read, ePtr &conn); }; +class eFilePushThread; + +class eDVBTSRecorder: public iDVBTSRecorder, public Object +{ + DECLARE_REF(eDVBTSRecorder); +public: + eDVBTSRecorder(eDVBDemux *demux); + ~eDVBTSRecorder(); + + RESULT start(); + RESULT addPID(int pid); + RESULT removePID(int pid); + + RESULT setFormat(int pid); + + RESULT setTargetFD(int fd); + RESULT setBoundary(off_t max); + + RESULT stop(); + + RESULT connectEvent(const Slot1 &event, ePtr &conn); +private: + RESULT startPID(int pid); + void stopPID(int pid); + + eFilePushThread *m_thread; + + std::map m_pids; + Signal1 m_event; + + ePtr m_demux; + + int m_running, m_format, m_target_fd, m_source_fd; +}; + #endif