+ flt.flags = DMX_IMMEDIATE_START;
+
+ res = ::ioctl(m_fd, DMX_SET_PES_FILTER, &flt);
+
+ if (res)
+ eWarning("PES filter: DMX_SET_PES_FILTER - %m");
+ if (!res)
+ m_active = 1;
+ return res;
+}
+
+RESULT eDVBPESReader::stop()
+{
+ if (!m_active)
+ return -1;
+
+ m_active=0;
+ ::ioctl(m_fd, DMX_STOP);
+ m_notifier->stop();
+
+ return 0;
+}
+
+RESULT eDVBPESReader::connectRead(const Slot2<void,const __u8*,int> &r, ePtr<eConnection> &conn)
+{
+ conn = new eConnection(this, m_read.connect(r));
+ return 0;
+}
+
+class eDVBRecordFileThread: public eFilePushThread
+{
+public:
+ eDVBRecordFileThread();
+ void setTimingPID(int pid, int type);
+
+ void startSaveMetaInformation(const std::string &filename);
+ void stopSaveMetaInformation();
+ int getLastPTS(pts_t &pts);
+protected:
+ int filterRecordData(const unsigned char *data, int len, size_t ¤t_span_remaining);
+private:
+ eMPEGStreamParserTS m_ts_parser;
+ eMPEGStreamInformation m_stream_info;
+ off_t m_current_offset;
+ pts_t m_last_pcr; /* very approximate.. */
+ int m_pid;
+};
+
+eDVBRecordFileThread::eDVBRecordFileThread()
+ :eFilePushThread(IOPRIO_CLASS_RT, 7), m_ts_parser(m_stream_info)
+{
+ m_current_offset = 0;
+}
+
+void eDVBRecordFileThread::setTimingPID(int pid, int type)
+{
+ m_ts_parser.setPid(pid, type);
+}
+
+void eDVBRecordFileThread::startSaveMetaInformation(const std::string &filename)
+{
+ m_stream_info.startSave(filename.c_str());