#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)
{
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;
}
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;
}
RESULT connectRead(const Slot1<void,const __u8*> &read, ePtr<eConnection> &conn);
};
-class eFilePushThread;
+class eDVBRecordFileThread;
class eDVBTSRecorder: public iDVBTSRecorder, public Object
{
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);
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
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;