record timing information from a single PID
authorFelix Domke <tmbinc@elitedvb.net>
Thu, 2 Feb 2006 23:13:20 +0000 (23:13 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Thu, 2 Feb 2006 23:13:20 +0000 (23:13 +0000)
lib/dvb/demux.cpp
lib/dvb/demux.h
lib/dvb/idemux.h

index 5be44dc92be46ff3e488c68b887dbe8b367dbd86..710323a1aa0f94226c6ac3a45e4608a2ba9dfd69 100644 (file)
@@ -34,6 +34,7 @@
 #include <lib/dvb/demux.h>
 #include <lib/dvb/esection.h>
 #include <lib/dvb/decoder.h>
+#include <lib/dvb/pvrparse.h>
 
 eDVBDemux::eDVBDemux(int adapter, int demux): adapter(adapter), demux(demux)
 {
@@ -267,14 +268,45 @@ RESULT eDVBSectionReader::connectRead(const Slot1<void,const __u8*> &r, ePtr<eCo
        return 0;
 }
 
+class eDVBRecordFileThread: public eFilePushThread
+{
+public:
+       eDVBRecordFileThread();
+       void setTimingPID(int pid);
+protected:
+       void filterRecordData(const char *data, int len);
+private:
+       eMPEGStreamParserTS m_ts_parser;
+       eMPEGStreamInformation m_stream_info;
+       off_t m_current_offset;
+       int m_pid;
+};
+
+eDVBRecordFileThread::eDVBRecordFileThread()
+       : m_ts_parser(m_stream_info)
+{
+       m_current_offset = 0;
+}
+
+void eDVBRecordFileThread::setTimingPID(int pid)
+{
+       m_ts_parser.setPid(pid);
+}
+
+void eDVBRecordFileThread::filterRecordData(const char *data, int len)
+{
+       m_ts_parser.parseData(m_current_offset, data, len);
+       
+       m_current_offset += len;
+}
+
 DEFINE_REF(eDVBTSRecorder);
 
 eDVBTSRecorder::eDVBTSRecorder(eDVBDemux *demux): m_demux(demux)
 {
        m_running = 0;
-       m_format = 0;
        m_target_fd = -1;
-       m_thread = new eFilePushThread();
+       m_thread = new eDVBRecordFileThread();
        m_demux->m_dvr_busy = 1;
 }
 
@@ -339,11 +371,11 @@ RESULT eDVBTSRecorder::removePID(int pid)
        return 0;
 }
 
-RESULT eDVBTSRecorder::setFormat(int format)
+RESULT eDVBTSRecorder::setTimingPID(int pid)
 {
        if (m_running)
                return -1;
-       m_format = format;
+       m_thread->setTimingPID(pid);
        return 0;
 }
 
index 06c74c9a701520ad15116450356563e15ce08b3b..f539006337ed81d9e08bcd6eaf9b190584290b8d 100644 (file)
@@ -60,7 +60,7 @@ public:
        RESULT connectRead(const Slot1<void,const __u8*> &read, ePtr<eConnection> &conn);
 };
 
-class eFilePushThread;
+class eDVBRecordFileThread;
 
 class eDVBTSRecorder: public iDVBTSRecorder, public Object
 {
@@ -73,7 +73,7 @@ public:
        RESULT addPID(int pid);
        RESULT removePID(int pid);
        
-       RESULT setFormat(int pid);
+       RESULT setTimingPID(int pid);
        
        RESULT setTargetFD(int fd);
        RESULT setBoundary(off_t max);
@@ -85,14 +85,14 @@ private:
        RESULT startPID(int pid);
        void stopPID(int pid);
        
-       eFilePushThread *m_thread;
+       eDVBRecordFileThread *m_thread;
        
        std::map<int,int> m_pids;
        Signal1<void,int> m_event;
        
        ePtr<eDVBDemux> m_demux;
        
-       int m_running, m_format, m_target_fd, m_source_fd;
+       int m_running, m_target_fd, m_source_fd;
 };
 
 #endif
index e48c5d9a93f8a4eafcc478972011fb4c4078e7d1..6cf7b0245a8d567e09827414f8d994b5c9182b61 100644 (file)
@@ -62,8 +62,7 @@ public:
        virtual RESULT addPID(int pid) = 0;
        virtual RESULT removePID(int pid) = 0;
        
-               /* include timestamps? ... */
-       virtual RESULT setFormat(int pid) = 0;
+       virtual RESULT setTimingPID(int pid) = 0;
        
        virtual RESULT setTargetFD(int fd) = 0;
        virtual RESULT setBoundary(off_t max) = 0;