X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/d63d2c3c6cbbd574dda4f8b00ebe6c661735edd5..b23e0f70b3b0e6815b784f29cbe7d09982116c41:/lib/dvb/demux.h diff --git a/lib/dvb/demux.h b/lib/dvb/demux.h index 3b4cbede..7a697d49 100644 --- a/lib/dvb/demux.h +++ b/lib/dvb/demux.h @@ -2,33 +2,59 @@ #define __dvb_demux_h #include -#include +#include -class eDVBDemux: public virtual iDVBDemux +class eDVBDemux: public iDVBDemux { - int adapter, demux; - friend class eDVBSectionReader; - friend class eDVBAudio; - friend class eDVBVideo; + DECLARE_REF(eDVBDemux); public: - DECLARE_REF + enum { + evtFlush + }; eDVBDemux(int adapter, int demux); virtual ~eDVBDemux(); + + RESULT setSourceFrontend(int fenum); + int getSource() { return source; } + RESULT setSourcePVR(int pvrnum); + RESULT createSectionReader(eMainloop *context, ePtr &reader); - RESULT getMPEGDecoder(ePtr &reader); + RESULT createPESReader(eMainloop *context, ePtr &reader); + RESULT createTSRecorder(ePtr &recorder); + RESULT getMPEGDecoder(ePtr &reader, int primary); + RESULT getSTC(pts_t &pts, int num); + RESULT getCADemuxID(uint8_t &id) { id = demux; return 0; } + RESULT flush(); + RESULT connectEvent(const Slot1 &event, ePtr &conn); + + int getRefCount() { return ref; } +private: + int adapter, demux, source; + + int m_dvr_busy; + friend class eDVBSectionReader; + friend class eDVBPESReader; + friend class eDVBAudio; + friend class eDVBVideo; + friend class eDVBPCR; + friend class eDVBTText; + friend class eDVBTSRecorder; + friend class eDVBCAService; + Signal1 m_event; + + int openDemux(void); }; -class eDVBSectionReader: public virtual iDVBSectionReader, public Object +class eDVBSectionReader: public iDVBSectionReader, public Object { - DECLARE_REF -private: + DECLARE_REF(eDVBSectionReader); int fd; Signal1 read; ePtr demux; int active; int checkcrc; void data(int); - eSocketNotifier *notifier; + ePtr notifier; public: eDVBSectionReader(eDVBDemux *demux, eMainloop *context, RESULT &res); @@ -38,4 +64,61 @@ public: RESULT connectRead(const Slot1 &read, ePtr &conn); }; +class eDVBPESReader: public iDVBPESReader, public Object +{ + DECLARE_REF(eDVBPESReader); + int m_fd; + Signal2 m_read; + ePtr m_demux; + int m_active; + void data(int); + ePtr m_notifier; +public: + eDVBPESReader(eDVBDemux *demux, eMainloop *context, RESULT &res); + virtual ~eDVBPESReader(); + RESULT start(int pid); + RESULT stop(); + RESULT connectRead(const Slot2 &read, ePtr &conn); +}; + +class eDVBRecordFileThread; + +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 setTimingPID(int pid, int type); + + RESULT setTargetFD(int fd); + RESULT setTargetFilename(const char *filename); + RESULT setBoundary(off_t max); + + RESULT stop(); + + RESULT getCurrentPCR(pts_t &pcr); + + RESULT connectEvent(const Slot1 &event, ePtr &conn); +private: + RESULT startPID(int pid); + void stopPID(int pid); + + eDVBRecordFileThread *m_thread; + void filepushEvent(int event); + + std::map m_pids; + Signal1 m_event; + + ePtr m_demux; + + int m_running, m_target_fd, m_source_fd; + std::string m_target_filename; +}; + #endif