summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authorFrank Schmirler <vdr@schmirler.de>2014-08-09 23:04:45 +0200
committerFrank Schmirler <vdr@schmirler.de>2014-08-09 23:04:45 +0200
commitbdee8c1923edc4fb04feffbdc0b548706b9e8a0a (patch)
tree95954fd1bba95b7be129a66307ca0a2e9cb4d330 /server
parent83262870d50da36039351c597b210ffe82198c17 (diff)
downloadvdr-plugin-streamdev-bdee8c1923edc4fb04feffbdc0b548706b9e8a0a.tar.gz
vdr-plugin-streamdev-bdee8c1923edc4fb04feffbdc0b548706b9e8a0a.tar.bz2
Implemented VDR 2.1.4 cStatus::ChannelChange(...)
Diffstat (limited to 'server')
-rw-r--r--server/livestreamer.c13
-rw-r--r--server/livestreamer.h9
2 files changed, 21 insertions, 1 deletions
diff --git a/server/livestreamer.c b/server/livestreamer.c
index 6b18d15..1ddae0c 100644
--- a/server/livestreamer.c
+++ b/server/livestreamer.c
@@ -670,6 +670,19 @@ bool cStreamdevLiveStreamer::ProvidesChannel(const cChannel *Channel, int Priori
return device;
}
+void cStreamdevLiveStreamer::ChannelChange(const cChannel *Channel)
+{
+ if (Running() && m_Device && m_Device->ProvidesTransponder(Channel) && ISTRANSPONDER(m_Channel->Transponder(), Channel->Transponder())) {
+ Detach();
+ if (m_Device->SwitchChannel(m_Channel, false)) {
+ Attach();
+ dsyslog("streamdev: channel %d (%s) changed", Channel->Number(), Channel->Name());
+ }
+ else
+ isyslog("streamdev: failed to re-tune after channel %d (%s) changed", Channel->Number(), Channel->Name());
+ }
+}
+
void cStreamdevLiveStreamer::MainThreadHook()
{
if (!m_SwitchLive && Running() && m_Device && !m_Device->IsTunedToTransponder(m_Channel) && !IsReceiving()) {
diff --git a/server/livestreamer.h b/server/livestreamer.h
index 29217d9..36e98d1 100644
--- a/server/livestreamer.h
+++ b/server/livestreamer.h
@@ -2,6 +2,7 @@
#define VDR_STREAMDEV_LIVESTREAMER_H
#include <vdr/config.h>
+#include <vdr/status.h>
#include <vdr/receiver.h>
#include "server/streamer.h"
@@ -18,7 +19,11 @@ class cStreamdevLiveReceiver;
// --- cStreamdevLiveStreamer -------------------------------------------------
-class cStreamdevLiveStreamer: public cStreamdevStreamer, public cMainThreadHookSubscriber {
+class cStreamdevLiveStreamer: public cStreamdevStreamer, public cMainThreadHookSubscriber
+#if VDRVERSNUM >= 20104
+ , public cStatus
+#endif
+ {
private:
int m_Priority;
int m_Pids[MAXRECEIVEPIDS + 1];
@@ -51,6 +56,8 @@ protected:
virtual int Put(const uchar *Data, int Count);
virtual void Action(void);
+ virtual void ChannelChange(const cChannel *Channel);
+
public:
cStreamdevLiveStreamer(const cServerConnection *Connection, const cChannel *Channel, int Priority, eStreamType StreamType, const int* Apid = NULL, const int* Dpid = NULL);
virtual ~cStreamdevLiveStreamer();