From bdee8c1923edc4fb04feffbdc0b548706b9e8a0a Mon Sep 17 00:00:00 2001 From: Frank Schmirler Date: Sat, 9 Aug 2014 23:04:45 +0200 Subject: Implemented VDR 2.1.4 cStatus::ChannelChange(...) --- server/livestreamer.c | 13 +++++++++++++ server/livestreamer.h | 9 ++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) (limited to 'server') 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 +#include #include #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(); -- cgit v1.2.3