Mailing List archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[vdr] [PATCH] streamdev plugin for 1.3.18



This patch should apply to vdr-streamdev-0.3.3-pre4 (no need for any other patches). Thanks goes to everyone that helped me with this.

Best Regards,
C.Y.M.

diff -ru streamdev-0.3.3-pre3-geni/client/assembler.c vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/client/assembler.c
--- streamdev-0.3.3-pre3-geni/client/assembler.c	2004-08-17 06:07:51.000000000 -0700
+++ vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/client/assembler.c	2005-01-12 19:19:16.000000000 -0800
@@ -33,7 +33,9 @@
 cStreamdevAssembler::~cStreamdevAssembler() {
 	if (m_Active) {
 		m_Active = false;
+#if VDRVERSNUM < 10314
 		WakeUp();
+#endif
 		Cancel(3);
 	}
 	close(m_Pipe[0]);
diff -ru streamdev-0.3.3-pre3-geni/client/device.c vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/client/device.c
--- streamdev-0.3.3-pre3-geni/client/device.c	2004-08-17 07:48:04.000000000 -0700
+++ vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/client/device.c	2005-01-12 20:03:47.000000000 -0800
@@ -131,10 +131,14 @@
 }
 
 bool cStreamdevDevice::GetTSPacket(uchar *&Data) {
-  if (m_TSBuffer) {
-    int r;
-    while ((r = m_TSBuffer->Read()) >= 0) {
-      Data = m_TSBuffer->Get();
+	if (m_TSBuffer) {
+#if VDRVERSNUM < 10313
+		int r;
+		while ((r = m_TSBuffer->Read()) >= 0) {
+			Data = m_TSBuffer->Get();
+#else
+	        while ((Data = m_TSBuffer->Get())) {
+#endif
 #if VDRVERSNUM >= 10300
 			if (Data != NULL) {
 				u_short pid = (((u_char)Data[1] & PID_MASK_HI) << 8) | Data[2];
@@ -145,15 +149,17 @@
 				}
 			}
 #endif
-      return true;
-    } 
+			return true;
+		}
+#if VDRVERSNUM < 10313
 		if (FATALERRNO) {
-      LOG_ERROR;
-    	return false;
-    }
-  	return true;
+			LOG_ERROR;
+			return false;
+		}
+#endif
+		return true;
 	}
-  return false;
+	return false;
 }
 
 #if VDRVERSNUM >= 10300
diff -ru streamdev-0.3.3-pre3-geni/client/device.h vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/client/device.h
--- streamdev-0.3.3-pre3-geni/client/device.h	2004-08-14 10:57:51.000000000 -0700
+++ vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/client/device.h	2005-01-12 20:00:43.000000000 -0800
@@ -30,7 +30,6 @@
 
 protected:
 	virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView);
-	virtual bool HasLock(void) { return m_TSBuffer != NULL; }
 
 	virtual bool SetPid(cPidHandle *Handle, int Type, bool On);
 	virtual bool OpenDvr(void);
@@ -53,6 +52,7 @@
 	static bool ReInit(void);
 
 	static cStreamdevDevice *GetDevice(void) { return m_Device; }
+	virtual bool HasLock(int) { return m_TSBuffer != NULL; }
 };
 
 #endif // VDR_STREAMDEV_DEVICE_H
diff -ru streamdev-0.3.3-pre3-geni/client/filter.c vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/client/filter.c
--- streamdev-0.3.3-pre3-geni/client/filter.c	2004-08-17 05:44:12.000000000 -0700
+++ vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/client/filter.c	2005-01-12 19:29:54.000000000 -0800
@@ -91,13 +91,13 @@
 		++errcnt;
 		if (showerr) {
 			if (firsterr == 0)
-				firsterr = time_ms();
-			else if (firsterr + BUFOVERTIME > time_ms() && errcnt > BUFOVERCOUNT) {
+				firsterr = int(cTimeMs::Now());
+			else if (firsterr + BUFOVERTIME > int(cTimeMs::Now()) && errcnt > BUFOVERCOUNT) {
 				esyslog("ERROR: too many buffer overflows, logging stopped");
 				showerr = false;
-				firsterr = time_ms();
+				firsterr = int(cTimeMs::Now());
 			}
-		} else if (firsterr + BUFOVERTIME < time_ms()) {
+		} else if (firsterr + BUFOVERTIME < int(cTimeMs::Now())) {
 			showerr = true;
 			firsterr = 0;
 			errcnt = 0;
@@ -106,7 +106,7 @@
 		if (showerr)
 			esyslog("ERROR: ring buffer overflow (%d bytes dropped)", TS_SIZE - p);
 		else
-			firsterr = time_ms();
+			firsterr = int(cTimeMs::Now());
 	}
 }
 
diff -ru streamdev-0.3.3-pre3-geni/client/remote.c vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/client/remote.c
--- streamdev-0.3.3-pre3-geni/client/remote.c	2004-08-14 14:21:21.000000000 -0700
+++ vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/client/remote.c	2005-01-12 19:53:04.000000000 -0800
@@ -457,7 +457,7 @@
 		summary = strreplace(strdup(m_Summary), ':', '|');
 
 	asprintf(&m_Buffer, "%d:%s:%s:%04d:%04d:%d:%d:%s:%s", m_Active, 
-			Channel()->GetChannelID().ToString(), PrintDay(m_Day, m_FirstDay), 
+			*Channel()->GetChannelID().ToString(), PrintDay(m_Day, m_FirstDay), 
 			m_Start, m_Stop, m_Priority, m_Lifetime, m_File, summary ? summary : "");
 
 	if (summary != NULL)
diff -ru streamdev-0.3.3-pre3-geni/client/socket.c vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/client/socket.c
--- streamdev-0.3.3-pre3-geni/client/socket.c	2004-08-17 06:07:51.000000000 -0700
+++ vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/client/socket.c	2005-01-12 19:28:47.000000000 -0800
@@ -47,7 +47,7 @@
 	pkt = Command + "\015\012";
 	Dprintf("OUT: |%s|\n", (const char*)Command);
 
-	st = time_ms();
+	st = int(cTimeMs::Now());
 	if (!TimedWrite((const char*)pkt, pkt.Length(), TimeoutMs)) {
 		esyslog("Streamdev: Lost connection to %s:%d: %s", 
 				(const char*)RemoteIp(), RemotePort(), strerror(errno));
@@ -56,7 +56,7 @@
 	}
 
 	if (Expected != 0) {
-		TimeoutMs -= time_ms() - st;
+		TimeoutMs -= int(cTimeMs::Now()) - st;
 		return Expect(Expected, NULL, TimeoutMs);
 	}
 
diff -ru streamdev-0.3.3-pre3-geni/remux/tsremux.h vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/remux/tsremux.h
--- streamdev-0.3.3-pre3-geni/remux/tsremux.h	2004-07-13 07:00:51.000000000 -0700
+++ vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/remux/tsremux.h	2005-01-12 19:19:16.000000000 -0800
@@ -4,6 +4,13 @@
 #include "libdvbmpeg/transform.h"
 #include <vdr/remux.h>
 
+#ifndef MINVIDEODATA
+#define MINVIDEODATA KILOBYTE(16)
+#endif
+#ifndef RESULTBUFFERSIZE
+#define RESULTBUFFERSIZE KILOBYTE(256)
+#endif
+
 class cTSRemux {
 protected:
   uchar m_ResultBuffer[RESULTBUFFERSIZE];
diff -ru streamdev-0.3.3-pre3-geni/server/connectionHTTP.c vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/server/connectionHTTP.c
--- streamdev-0.3.3-pre3-geni/server/connectionHTTP.c	2004-08-20 10:30:41.000000000 -0700
+++ vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/server/connectionHTTP.c	2005-01-12 19:44:44.000000000 -0800
@@ -99,7 +99,7 @@
 		else
 			line.Format("<li><a href=\"http://%s:%d/%s\";>%s</a></li>", 
 				(const char*)LocalIp(), StreamdevServerSetup.HTTPServerPort, 
-				m_ListChannel->GetChannelID().ToString(), m_ListChannel->Name());
+				*m_ListChannel->GetChannelID().ToString(), m_ListChannel->Name());
 		if (!Respond(line))
 			DeferClose();
 		m_ListChannel = Channels.Next(m_ListChannel);
diff -ru streamdev-0.3.3-pre3-geni/server/connectionVTP.c vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/server/connectionVTP.c
--- streamdev-0.3.3-pre3-geni/server/connectionVTP.c	2004-08-17 07:48:04.000000000 -0700
+++ vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/server/connectionVTP.c	2005-01-12 19:41:00.000000000 -0800
@@ -284,11 +284,11 @@
 	if (ep == Opts || (*ep != '\0' && *ep != ' '))
 		return Respond(500, "Use: ABRT Id");
 
-	time_t st = time_ms();
+//	time_t st = int(cTimeMs::Now());
 	if (id == siLive)
 		DELETENULL(m_LiveStreamer);
 
-	Dprintf("ABRT took %ld ms\n", time_ms() - st);
+	Dprintf("ABRT took %ld ms\n", int(cTimeMs::Now()) - st);
 	DELETENULL(m_DataSockets[id]);
 	return Respond(220, "Data connection closed");
 }
@@ -422,7 +422,7 @@
      if (isnumber(Option)) {
         cTimer *timer = Timers.Get(strtol(Option, NULL, 10) - 1);
         if (timer)
-           Reply(250, "%d %s", timer->Index() + 1, timer->ToText(true));
+           Reply(250, "%d %s", timer->Index() + 1, *timer->ToText(true));
         else
            Reply(501, "Timer \"%s\" not defined", Option);
         }
@@ -433,7 +433,7 @@
      for (int i = 0; i < Timers.Count(); i++) {
          cTimer *timer = Timers.Get(i);
         if (timer)
-           Reply(i < Timers.Count() - 1 ? -250 : 250, "%d %s", timer->Index() + 1, timer->ToText(true));
+           Reply(i < Timers.Count() - 1 ? -250 : 250, "%d %s", timer->Index() + 1, *timer->ToText(true));
         else
            Reply(501, "Timer \"%d\" not found", i + 1);
          }
@@ -478,7 +478,7 @@
            isyslog("timer %d modified (%s)", timer->Index() + 1, 
 							 timer->HasFlags(tfActive) ? "active" : "inactive");
 #endif
-           Reply(250, "%d %s", timer->Index() + 1, timer->ToText(true));
+           Reply(250, "%d %s", timer->Index() + 1, *timer->ToText(true));
            }
         else
            Reply(501, "Timer \"%d\" not defined", n);
@@ -501,11 +501,11 @@
            Timers.Add(timer);
            Timers.Save();
            isyslog("timer %d added", timer->Index() + 1);
-           Reply(250, "%d %s", timer->Index() + 1, timer->ToText(true));
+           Reply(250, "%d %s", timer->Index() + 1, *timer->ToText(true));
            EXIT_WRAPPER();
            }
         else
-           Reply(550, "Timer already defined: %d %s", t->Index() + 1, t->ToText(true));
+           Reply(550, "Timer already defined: %d %s", t->Index() + 1, *t->ToText(true));
         }
      else
         Reply(501, "Error in timer settings");
diff -ru streamdev-0.3.3-pre3-geni/server/livefilter.c vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/server/livefilter.c
--- streamdev-0.3.3-pre3-geni/server/livefilter.c	2004-08-14 10:27:52.000000000 -0700
+++ vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/server/livefilter.c	2005-01-12 19:20:36.000000000 -0800
@@ -17,9 +17,10 @@
 
 void cStreamdevLiveFilter::Process(u_short Pid, u_char Tid, const u_char *Data,
 		int Length) {
-	static time_t firsterr = 0;
+	static cTimeMs errTime;
 	static int errcnt = 0;
 	static bool showerr = true;
+	static bool goterr = false;
 
 	uchar buffer[TS_SIZE];
 	int length = Length;
@@ -40,23 +41,28 @@
 		if (p != TS_SIZE) {
 			++errcnt;
 			if (showerr) {
-				if (firsterr == 0)
-					firsterr = time_ms();
-				else if (firsterr + BUFOVERTIME > time_ms() && errcnt > BUFOVERCOUNT) {
+				if (!goterr) {
+					errTime.Set();
+					goterr = true;
+				}
+				else if (errTime.Elapsed() > BUFOVERTIME && errcnt > BUFOVERCOUNT) {
 					esyslog("ERROR: too many buffer overflows, logging stopped");
 					showerr = false;
-					firsterr = time_ms();
+					errTime.Set();
+					goterr = true;
 				}
-			} else if (firsterr + BUFOVERTIME < time_ms()) {
+			} else if (errTime.Elapsed() < BUFOVERTIME) {
 				showerr = true;
-				firsterr = 0;
+				goterr = false;
 				errcnt = 0;
 			}
 
 			if (showerr)
-				esyslog("ERROR: ring buffer overflow (%d bytes dropped)", TS_SIZE - p);
+				esyslog("ERROR: ring buffer overflow (%d bytes dropped)", 
+		                        TS_SIZE - p);
 			else
-				firsterr = time_ms();
+				errTime.Set();
+				goterr = true;
 		}
 	}
 }
diff -ru streamdev-0.3.3-pre3-geni/server/livestreamer.c vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/server/livestreamer.c
--- streamdev-0.3.3-pre3-geni/server/livestreamer.c	2004-08-17 06:07:51.000000000 -0700
+++ vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/server/livestreamer.c	2005-01-12 19:33:47.000000000 -0800
@@ -32,13 +32,13 @@
 		++errcnt;
 		if (showerr) {
 			if (firsterr == 0)
-				firsterr = time_ms();
-			else if (firsterr + BUFOVERTIME > time_ms() && errcnt > BUFOVERCOUNT) {
+				firsterr = int(cTimeMs::Now());
+			else if (firsterr + BUFOVERTIME > int(cTimeMs::Now()) && errcnt > BUFOVERCOUNT) {
 				esyslog("ERROR: too many buffer overflows, logging stopped");
 				showerr = false;
-				firsterr = time_ms();
+				firsterr = int(cTimeMs::Now());
 			}
-		} else if (firsterr + BUFOVERTIME < time_ms()) {
+		} else if (firsterr + BUFOVERTIME < int(cTimeMs::Now())) {
 			showerr = true;
 			firsterr = 0;
 			errcnt = 0;
@@ -47,7 +47,7 @@
 		if (showerr)
 			esyslog("ERROR: ring buffer overflow (%d bytes dropped)", Length - p);
 		else
-			firsterr = time_ms();
+			firsterr = int(cTimeMs::Now());
 	}
 }
 
@@ -141,32 +141,32 @@
 	switch (StreamType) {
 	case stES: 
 		{
-			int pid = ISRADIO(Channel) ? Channel->Apid1() : Channel->Vpid();
+			int pid = ISRADIO(Channel) ? Channel->Apid(0) : Channel->Vpid();
 			m_Remux = new cTS2ESRemux(pid);
 			return SetPid(pid, true);
 		}
 
 	case stPES: 
-		m_Remux = new cTS2PSRemux(Channel->Vpid(), Channel->Apid1(), 
-				Channel->Apid2(), Channel->Dpid1(), 0, false);
+		m_Remux = new cTS2PSRemux(Channel->Vpid(), Channel->Apid(0), 
+				Channel->Apid(1), Channel->Dpid(0), 0, false);
 		return SetPid(Channel->Vpid(),  true)
-				&& SetPid(Channel->Apid1(), true)
-				&& SetPid(Channel->Apid2(), true)
-				&& SetPid(Channel->Dpid1(), true);
+				&& SetPid(Channel->Apid(0), true)
+				&& SetPid(Channel->Apid(1), true)
+				&& SetPid(Channel->Dpid(0), true);
 		break;
 
 	case stPS:  
-		m_Remux = new cTS2PSRemux(Channel->Vpid(), Channel->Apid1(), 0, 0, 0, true);
+		m_Remux = new cTS2PSRemux(Channel->Vpid(), Channel->Apid(0), 0, 0, 0, true);
 		return SetPid(Channel->Vpid(),  true)
-				&& SetPid(Channel->Apid1(), true);
+				&& SetPid(Channel->Apid(0), true);
 		break;
 
 	case stTS:
 		if (!StreamPIDS) {
 			return SetPid(Channel->Vpid(),  true)
-					&& SetPid(Channel->Apid1(), true)
-					&& SetPid(Channel->Apid2(), true)
-					&& SetPid(Channel->Dpid1(), true);
+					&& SetPid(Channel->Apid(0), true)
+					&& SetPid(Channel->Apid(1), true)
+					&& SetPid(Channel->Dpid(0), true);
 		}
 		Dprintf("pid streaming mode\n");
 		return true;
diff -ru streamdev-0.3.3-pre3-geni/streamdev-server.c vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/streamdev-server.c
--- streamdev-0.3.3-pre3-geni/streamdev-server.c	2004-08-17 07:48:04.000000000 -0700
+++ vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/streamdev-server.c	2005-01-12 19:46:17.000000000 -0800
@@ -12,7 +12,7 @@
 #include "server/suspend.h"
 #include "i18n.h"
 
-const char *cPluginStreamdevServer::DESCRIPTION = "VDR Streaming Server";
+cString cPluginStreamdevServer::DESCRIPTION = "VDR Streaming Server";
 
 cPluginStreamdevServer::cPluginStreamdevServer(void) {
 }
@@ -30,7 +30,7 @@
 	RegisterI18n(Phrases);
 
 	if (!StreamdevHosts.Load(STREAMDEVHOSTS, true, true)) {
-		esyslog("streamdev-server: error while loading %s", STREAMDEVHOSTS);
+		esyslog("streamdev-server: error while loading %s", *STREAMDEVHOSTS);
 		fprintf(stderr, "streamdev-server: error while loading %s\n");
 		if (access(STREAMDEVHOSTS, F_OK) != 0)
 			fprintf(stderr, "  Please install streamdevhosts.conf into the path "
Only in vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni: streamdev-server.c.rej
diff -ru streamdev-0.3.3-pre3-geni/streamdev-server.h vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/streamdev-server.h
--- streamdev-0.3.3-pre3-geni/streamdev-server.h	2004-08-17 07:48:04.000000000 -0700
+++ vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/streamdev-server.h	2005-01-12 19:20:36.000000000 -0800
@@ -11,7 +11,7 @@
 
 class cPluginStreamdevServer : public cPlugin {
 private:
-	static const char *DESCRIPTION;
+  static cString DESCRIPTION;
 
 public:
   cPluginStreamdevServer(void);
@@ -19,7 +19,7 @@
   virtual const char *Version(void) { return VERSION; }
   virtual const char *Description(void);
   virtual bool Start(void);
-	virtual bool Active(void);
+  virtual bool Active(void);
   virtual const char *MainMenuEntry(void);
   virtual cOsdObject *MainMenuAction(void);
   virtual cMenuSetupPage *SetupMenu(void);
diff -ru streamdev-0.3.3-pre3-geni/tools/select.c vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/tools/select.c
--- streamdev-0.3.3-pre3-geni/tools/select.c	2004-08-17 05:44:12.000000000 -0700
+++ vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/tools/select.c	2005-01-12 19:31:23.000000000 -0800
@@ -26,11 +26,11 @@
 	if (TimeoutMs == 0)
 		return ::select(m_MaxFiled + 1, &m_Rfds, &m_Wfds, NULL, &tv);
 
-	st = time_ms();
+	st = int(cTimeMs::Now());
 	ms = TimeoutMs;
 	while (ms > 0 && (res = ::select(m_MaxFiled + 1, &m_Rfds, &m_Wfds, NULL, 
 			&tv)) == -1 && errno == EINTR) {
-		et = time_ms();
+		et = int(cTimeMs::Now());
 		ms -= et - st;
 		tv.tv_usec = (ms % 1000) * 1000;
 		tv.tv_sec = ms / 1000;
diff -ru streamdev-0.3.3-pre3-geni/tools/source.c vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/tools/source.c
--- streamdev-0.3.3-pre3-geni/tools/source.c	2004-07-13 11:20:43.000000000 -0700
+++ vdr-1.3.18/PLUGINS/src/streamdev-0.3.3-pre3-geni/tools/source.c	2005-01-12 19:30:54.000000000 -0800
@@ -59,7 +59,7 @@
 	time_t st;
 	int ms, offs;
 
-	st = time_ms();
+	st = int(cTimeMs::Now());
 	ms = TimeoutMs;
 	offs = 0;
 	while (Length > 0) {
@@ -77,7 +77,7 @@
 			Length -= b;
 		}
 
-		ms -= time_ms() - st;
+		ms -= int(cTimeMs::Now()) - st;
 		if (ms <= 0) {
 			errno = ETIMEDOUT;
 			return false;
@@ -108,7 +108,7 @@
 		return olen;
 	}
 
-	st = time_ms();
+	st = int(cTimeMs::Now());
 	ms = TimeoutMs;
 	while (m_LineBuffer.Length() < BUFSIZ) {
 		int b;
@@ -142,7 +142,7 @@
 			}
 		}
 
-		ms -= time_ms() - st;
+		ms -= int(cTimeMs::Now()) - st;
 		if (ms <= 0) {
 			errno = ETIMEDOUT;
 			return -1;
@@ -159,7 +159,7 @@
 	int ms, seqlen, offs;
 
 	seqlen = strlen(Seq);
-	st = time_ms();
+	st = int(cTimeMs::Now());
 	ms = TimeoutMs;
 	offs = 0;
 	while (Length > 0) {
@@ -181,7 +181,7 @@
 				return offs;
 		}
 
-		et = time_ms();
+		et = int(cTimeMs::Now());
 		ms -= et - st;
 		if (ms <= 0) {
 			errno = ETIMEDOUT;

Home | Main Index | Thread Index