X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fdvb%2Fdemux.h;h=d43c41bb6733cee2760cef8fc7992f12363b2755;hp=fdec41771bfb9c396ae5a779eaf455c64d57df50;hb=5c23ca59b7a3bb2d3a2bf3b7ffc78e1ffa170200;hpb=cb205396ae920ef813764de92bf5b686bb9d80f1 diff --git a/lib/dvb/demux.h b/lib/dvb/demux.h index fdec417..d43c41b 100644 --- a/lib/dvb/demux.h +++ b/lib/dvb/demux.h @@ -6,44 +6,83 @@ class eDVBDemux: public iDVBDemux { - int adapter, demux; + 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; -public: - DECLARE_REF(eDVBDemux); - eDVBDemux(int adapter, int demux); - virtual ~eDVBDemux(); - RESULT createSectionReader(eMainloop *context, ePtr &reader); - RESULT createTSRecorder(ePtr &recorder); - RESULT getMPEGDecoder(ePtr &reader); + friend class eDVBCAService; + Signal1 m_event; + + int openDemux(void); }; class eDVBSectionReader: public iDVBSectionReader, public Object { DECLARE_REF(eDVBSectionReader); -private: 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); virtual ~eDVBSectionReader(); + RESULT setBufferSize(int size); RESULT start(const eDVBSectionFilterMask &mask); RESULT stop(); RESULT connectRead(const Slot1 &read, ePtr &conn); }; -class eFilePushThread; +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 { @@ -52,30 +91,36 @@ public: eDVBTSRecorder(eDVBDemux *demux); ~eDVBTSRecorder(); + RESULT setBufferSize(int size); RESULT start(); RESULT addPID(int pid); RESULT removePID(int pid); - RESULT setFormat(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); - 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