#include <lib/dvb/idvb.h>
#include <lib/dvb/idemux.h>
+#include <lib/dvb/pvrparse.h>
+#include <lib/base/filepush.h>
class eDVBDemux: public iDVBDemux
{
virtual ~eDVBDemux();
RESULT setSourceFrontend(int fenum);
+ int getSource() { return source; }
RESULT setSourcePVR(int pvrnum);
RESULT createSectionReader(eMainloop *context, ePtr<iDVBSectionReader> &reader);
RESULT getCADemuxID(uint8_t &id) { id = demux; return 0; }
RESULT flush();
RESULT connectEvent(const Slot1<void,int> &event, ePtr<eConnection> &conn);
-
+ int openDVR(int flags);
+
int getRefCount() { return ref; }
private:
- int adapter, demux;
+ int adapter, demux, source;
int m_dvr_busy;
friend class eDVBSectionReader;
class eDVBSectionReader: public iDVBSectionReader, public Object
{
DECLARE_REF(eDVBSectionReader);
-private:
int fd;
Signal1<void, const __u8*> read;
ePtr<eDVBDemux> demux;
int active;
int checkcrc;
void data(int);
- eSocketNotifier *notifier;
+ ePtr<eSocketNotifier> notifier;
public:
-
eDVBSectionReader(eDVBDemux *demux, eMainloop *context, RESULT &res);
virtual ~eDVBSectionReader();
+ RESULT setBufferSize(int size);
RESULT start(const eDVBSectionFilterMask &mask);
RESULT stop();
RESULT connectRead(const Slot1<void,const __u8*> &read, ePtr<eConnection> &conn);
class eDVBPESReader: public iDVBPESReader, public Object
{
DECLARE_REF(eDVBPESReader);
-private:
int m_fd;
Signal2<void, const __u8*, int> m_read;
ePtr<eDVBDemux> m_demux;
int m_active;
void data(int);
- eSocketNotifier *m_notifier;
+ ePtr<eSocketNotifier> m_notifier;
public:
eDVBPESReader(eDVBDemux *demux, eMainloop *context, RESULT &res);
virtual ~eDVBPESReader();
+ RESULT setBufferSize(int size);
RESULT start(int pid);
RESULT stop();
RESULT connectRead(const Slot2<void,const __u8*, int> &read, ePtr<eConnection> &conn);
};
-class eDVBRecordFileThread;
+class eDVBRecordFileThread: public eFilePushThread
+{
+public:
+ eDVBRecordFileThread();
+ void setTimingPID(int pid, int type);
+
+ void startSaveMetaInformation(const std::string &filename);
+ void stopSaveMetaInformation();
+ void enableAccessPoints(bool enable);
+ 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;
+};
class eDVBTSRecorder: public iDVBTSRecorder, public Object
{
eDVBTSRecorder(eDVBDemux *demux);
~eDVBTSRecorder();
+ RESULT setBufferSize(int size);
RESULT start();
RESULT addPID(int pid);
RESULT removePID(int pid);
- RESULT setTimingPID(int pid);
+ RESULT setTimingPID(int pid, int type);
RESULT setTargetFD(int fd);
RESULT setTargetFilename(const char *filename);
+ RESULT enableAccessPoints(bool enable);
RESULT setBoundary(off_t max);
+ RESULT setTimeshift(bool enable);
RESULT stop();
-
+
+ RESULT getCurrentPCR(pts_t &pcr);
+
RESULT connectEvent(const Slot1<void,int> &event, ePtr<eConnection> &conn);
private:
RESULT startPID(int pid);