X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/6977ff954d9c08c2f3ca7727cf997ccd7be201ed..317c6217b933893659bbf2dc80c74eac357e0bd2:/lib/dvb/demux.h diff --git a/lib/dvb/demux.h b/lib/dvb/demux.h index 08d9f43d..e3759331 100644 --- a/lib/dvb/demux.h +++ b/lib/dvb/demux.h @@ -6,30 +6,42 @@ 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; + DECLARE_REF(eDVBDemux); public: enum { evtFlush }; - DECLARE_REF(eDVBDemux); eDVBDemux(int adapter, int demux); virtual ~eDVBDemux(); + + RESULT setSourceFrontend(int fenum); + RESULT setSourcePVR(int pvrnum); + RESULT createSectionReader(eMainloop *context, ePtr &reader); + RESULT createPESReader(eMainloop *context, ePtr &reader); RESULT createTSRecorder(ePtr &recorder); - RESULT getMPEGDecoder(ePtr &reader); - RESULT getSTC(pts_t &pts); + 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; + + 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 iDVBSectionReader, public Object @@ -52,7 +64,25 @@ public: RESULT connectRead(const Slot1 &read, ePtr &conn); }; -class eFilePushThread; +class eDVBPESReader: public iDVBPESReader, public Object +{ + DECLARE_REF(eDVBPESReader); +private: + int m_fd; + Signal2 m_read; + ePtr m_demux; + int m_active; + void data(int); + eSocketNotifier *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 { @@ -65,9 +95,10 @@ public: RESULT addPID(int pid); RESULT removePID(int pid); - RESULT setFormat(int pid); + RESULT setTimingPID(int pid); RESULT setTargetFD(int fd); + RESULT setTargetFilename(const char *filename); RESULT setBoundary(off_t max); RESULT stop(); @@ -77,14 +108,16 @@ private: RESULT startPID(int pid); void stopPID(int pid); - eFilePushThread *m_thread; + eDVBRecordFileThread *m_thread; + void filepushEvent(int event); std::map m_pids; Signal1 m_event; ePtr m_demux; - int m_running, m_format, m_target_fd, m_source_fd; + int m_running, m_target_fd, m_source_fd; + std::string m_target_filename; }; #endif