#ifndef __dvb_demux_h #define __dvb_demux_h #include #include class eDVBDemux: public iDVBDemux { DECLARE_REF(eDVBDemux); public: 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 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 iDVBSectionReader, public Object { DECLARE_REF(eDVBSectionReader); int fd; Signal1 read; ePtr demux; int active; int checkcrc; void data(int); ePtr notifier; public: eDVBSectionReader(eDVBDemux *demux, eMainloop *context, RESULT &res); virtual ~eDVBSectionReader(); RESULT setBufferSize(int size); RESULT start(const eDVBSectionFilterMask &mask); RESULT stop(); 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 setBufferSize(int size); 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 setBufferSize(int size); 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