00001
00002
00003
00004
00005
00006
00007
00008 #ifndef _LIVERECEIVER_H
00009 #define _LIVERECEIVER_H
00010
00011 #include "../common.h"
00012 #include "filehandle.h"
00013 #include <vdr/thread.h>
00014 #include <vdr/receiver.h>
00015 #include <vdr/ringbuffer.h>
00016
00017 #define RECEIVER_WAIT_ON_NODATA 50 // 50 ms
00018 #define RECEIVER_WAIT_ON_NODATA_TIMEOUT 1000 * 2 // 2s
00019
00028 class cLiveReceiver : public cReceiver, public cThread, public cFileHandle {
00029 public:
00043 static cLiveReceiver* newInstance(
00044 cChannel *Channel,
00045 int Priority
00046 );
00047 virtual ~cLiveReceiver(void);
00049 virtual void open(UpnpOpenFileMode mode);
00051 virtual int read(char* buf, size_t buflen);
00053 virtual int write(char* buf, size_t buflen);
00055 virtual int seek(off_t offset, int whence);
00057 virtual void close();
00058 protected:
00066 virtual void Receive(
00067 uchar *Data,
00068 int Length
00069 );
00079 virtual void Activate(
00080 bool On
00081 );
00092 virtual void Action(void);
00093 private:
00094 cLiveReceiver(cChannel *Channel, cDevice *Device);
00095 cDevice *mDevice;
00096 cChannel *mChannel;
00097 cRingBufferLinear *mLiveBuffer;
00098 cRingBufferLinear *mOutputBuffer;
00099 cFrameDetector *mFrameDetector;
00100 cPatPmtGenerator mPatPmtGenerator;
00101 };
00102
00103 #endif
00104