summaryrefslogtreecommitdiff
path: root/recv.h
diff options
context:
space:
mode:
Diffstat (limited to 'recv.h')
-rw-r--r--recv.h90
1 files changed, 90 insertions, 0 deletions
diff --git a/recv.h b/recv.h
new file mode 100644
index 0000000..fb7e5a0
--- /dev/null
+++ b/recv.h
@@ -0,0 +1,90 @@
+/*
+ * recv.h: A plugin for the Video Disk Recorder
+ *
+ * See the README file for copyright information and how to reach the author.
+ *
+ * $Id$
+ */
+
+#ifndef __recv_h_
+#define __recv_h_
+
+#include <vdr/receiver.h>
+#include <vdr/filter.h>
+#include <vdr/thread.h>
+#include <vdr/ringbuffer.h>
+#include <vdr/recording.h>
+
+#include "demux.h"
+#include "decoder.h"
+#include "audio.h"
+#include "video.h"
+#include "common.h"
+
+#if (APIVERSNUM >= 10700)
+#include <linux/dvb/frontend.h>
+#endif
+
+class cMarkAdRingBuffer : public cRingBufferFrame
+{
+private:
+ int pid;
+public:
+ cMarkAdRingBuffer(int Size) : cRingBufferFrame(Size, true) {};
+ ~cMarkAdRingBuffer()
+ {
+ Clear();
+ }
+ void Wait(void)
+ {
+ WaitForGet();
+ }
+ void Signal(void)
+ {
+ EnableGet();
+ }
+ bool Check(int Size)
+ {
+ return (Free() >= Size);
+ }
+};
+
+class cMarkAdReceiver : public cReceiver, public cThread
+{
+private:
+ int recvnumber;
+ char *filename;
+ int lastiframe;
+
+ cMarks marks;
+ cIndexFile *Index;
+
+ int LastIFrame();
+ MarkAdContext macontext;
+
+ cMarkAdDecoder *decoder;
+ cMarkAdCommon *common;
+ cMarkAdAudio *audio;
+ cMarkAdVideo *video;
+
+ cMarkAdDemux *video_demux;
+ cMarkAdDemux *mp2_demux;
+ cMarkAdDemux *ac3_demux;
+
+ void AddMark(MarkAdMark *mark);
+protected:
+ virtual void Activate(bool On);
+ virtual void Receive(uchar *Data, int Length);
+ void Action();
+ cMarkAdRingBuffer buffer;
+ bool running;
+public:
+ cMarkAdReceiver(int RecvNumber, const char *Filename, cTimer *Timer);
+ const char *FileName()
+ {
+ return (const char *) filename;
+ }
+ virtual ~cMarkAdReceiver();
+};
+
+#endif