aboutsummaryrefslogtreecommitdiff
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
parentb36d3153538679a8fcbebcf884e4eb1533c5cd13 (diff)
downloadenigma2-9412183a3c484b906775b2e117b6ee33c66083f6.tar.gz
enigma2-9412183a3c484b906775b2e117b6ee33c66083f6.zip
record timing information from a single PID
-rw-r--r--lib/dvb/demux.cpp40
-rw-r--r--lib/dvb/demux.h8
-rw-r--r--lib/dvb/idemux.h3
3 files changed, 41 insertions, 10 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;
}
diff --git a/lib/dvb/demux.h b/lib/dvb/demux.h
index 06c74c9a..f5390063 100644
--- a/lib/dvb/demux.h
+++ b/lib/dvb/demux.h
@@ -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
diff --git a/lib/dvb/idemux.h b/lib/dvb/idemux.h
index e48c5d9a..6cf7b024 100644
--- a/lib/dvb/idemux.h
+++ b/lib/dvb/idemux.h
@@ -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;