summaryrefslogtreecommitdiff
path: root/server/recstreamer.c
diff options
context:
space:
mode:
Diffstat (limited to 'server/recstreamer.c')
-rw-r--r--server/recstreamer.c67
1 files changed, 67 insertions, 0 deletions
diff --git a/server/recstreamer.c b/server/recstreamer.c
new file mode 100644
index 0000000..73af53b
--- /dev/null
+++ b/server/recstreamer.c
@@ -0,0 +1,67 @@
+#include "remux/ts2ps.h"
+#include "remux/ts2pes.h"
+#include "remux/ts2es.h"
+#include "remux/extern.h"
+
+#include <vdr/ringbuffer.h>
+#include "server/recstreamer.h"
+#include "server/connection.h"
+#include "common.h"
+
+using namespace Streamdev;
+
+// --- cStreamdevRecStreamer -------------------------------------------------
+
+cStreamdevRecStreamer::cStreamdevRecStreamer(cRecording *Rec, const cServerConnection *Connection):
+ cStreamdevStreamer("streamdev-recstreaming", Connection),
+ m_RecPlayer(Rec),
+ m_From(0L)
+{
+ Dprintf("New rec streamer\n");
+ m_To = (int64_t) m_RecPlayer.getLengthBytes() - 1;
+}
+
+cStreamdevRecStreamer::~cStreamdevRecStreamer()
+{
+ Dprintf("Desctructing rec streamer\n");
+ Stop();
+}
+
+int64_t cStreamdevRecStreamer::SetRange(int64_t &From, int64_t &To)
+{
+ int64_t l = (int64_t) m_RecPlayer.getLengthBytes();
+ if (From < 0L) {
+ From += l;
+ if (From < 0L)
+ From = 0L;
+ To = l - 1;
+ }
+ else {
+ if (To < 0L)
+ To += l;
+ else if (To >= l)
+ To = l - 1;
+ if (From > To) {
+ // invalid range - return whole content
+ From = 0L;
+ To = l - 1;
+ }
+ }
+ m_From = From;
+ m_To = To;
+ return m_To - m_From + 1;
+}
+
+uchar* cStreamdevRecStreamer::GetFromReceiver(int &Count)
+{
+ if (m_From <= m_To) {
+ Count = (int) m_RecPlayer.getBlock(m_Buffer, m_From, sizeof(m_Buffer));
+ return m_Buffer;
+ }
+ return NULL;
+}
+
+cString cStreamdevRecStreamer::ToText() const
+{
+ return "REPLAY";
+}