aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb/demux.cpp
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2006-02-02 23:13:20 +0000
committerFelix Domke <tmbinc@elitedvb.net>2006-02-02 23:13:20 +0000
commit9412183a3c484b906775b2e117b6ee33c66083f6 (patch)
treeb0faf06a551719a46b89441e4c74f175376d7573 /lib/dvb/demux.cpp
parentb36d3153538679a8fcbebcf884e4eb1533c5cd13 (diff)
downloadenigma2-9412183a3c484b906775b2e117b6ee33c66083f6.tar.gz
enigma2-9412183a3c484b906775b2e117b6ee33c66083f6.zip
record timing information from a single PID
Diffstat (limited to 'lib/dvb/demux.cpp')
-rw-r--r--lib/dvb/demux.cpp40
1 files changed, 36 insertions, 4 deletions
diff --git a/lib/dvb/demux.cpp b/lib/dvb/demux.cpp
index 5be44dc9..710323a1 100644
--- a/lib/dvb/demux.cpp
+++ b/lib/dvb/demux.cpp
@@ -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;
}