diff options
author | Frank Schmirler <vdr@schmirler.de> | 2010-12-02 09:39:01 +0100 |
---|---|---|
committer | Mikko Matilainen <mikkom@iki.fi> | 2011-03-24 19:20:05 +0200 |
commit | 635ccc479f3e0d62b3f52cb5407d06185e402f5b (patch) | |
tree | 8f56fa909f40656a130f41e3cab4898093fdb0e5 /client/device.c | |
parent | db3274c046f4e2d44cb8263428073b6a43dca2fa (diff) | |
download | vdr-plugin-streamdev-635ccc479f3e0d62b3f52cb5407d06185e402f5b.tar.gz vdr-plugin-streamdev-635ccc479f3e0d62b3f52cb5407d06185e402f5b.tar.bz2 |
Snapshot 2010-09-15
Diffstat (limited to 'client/device.c')
-rw-r--r-- | client/device.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/client/device.c b/client/device.c index 581176f..bbdaf6a 100644 --- a/client/device.c +++ b/client/device.c @@ -1,5 +1,5 @@ /* - * $Id: device.c,v 1.18.2.3 2010/06/08 05:56:15 schmirl Exp $ + * $Id: device.c,v 1.18.2.4 2010/08/18 10:26:18 schmirl Exp $ */ #include "client/device.h" @@ -8,6 +8,7 @@ #include "tools/select.h" +#include <vdr/config.h> #include <vdr/channels.h> #include <vdr/ringbuffer.h> #include <vdr/eit.h> @@ -32,6 +33,7 @@ cStreamdevDevice::cStreamdevDevice(void) { m_Device = this; m_Pids = 0; + m_Priority = -1; m_DvrClosed = true; } @@ -108,7 +110,7 @@ bool cStreamdevDevice::ProvidesChannel(const cChannel *Channel, int Priority, res = prio && ClientSocket.ProvidesChannel(Channel, Priority); ndr = true; } - + if (NeedsDetachReceivers) *NeedsDetachReceivers = ndr; Dprintf("prov res = %d, ndr = %d\n", res, ndr); @@ -119,6 +121,9 @@ bool cStreamdevDevice::SetChannelDevice(const cChannel *Channel, bool LiveView) { Dprintf("SetChannelDevice Channel: %s, LiveView: %s\n", Channel->Name(), LiveView ? "true" : "false"); + LOCK_THREAD; + + m_UpdatePriority = ClientSocket.SupportsPrio(); if (LiveView) return false; @@ -139,6 +144,8 @@ bool cStreamdevDevice::SetPid(cPidHandle *Handle, int Type, bool On) { Handle->used); LOCK_THREAD; + m_UpdatePriority = ClientSocket.SupportsPrio(); + if (On && !m_TSBuffer) { Dprintf("SetPid: no data connection -> OpenDvr()"); OpenDvrInt(); @@ -305,3 +312,16 @@ bool cStreamdevDevice::ReInit(void) { return StreamdevClientSetup.StartClient ? Init() : true; } +void cStreamdevDevice::UpdatePriority(void) { + if (m_Device) { + m_Device->Lock(); + if (m_Device->m_UpdatePriority && ClientSocket.DataSocket(siLive)) { + int Priority = m_Device->Priority(); + if (m_Device == cDevice::ActualDevice() && Priority < Setup.PrimaryLimit) + Priority = Setup.PrimaryLimit; + if (m_Device->m_Priority != Priority && ClientSocket.SetPriority(Priority)) + m_Device->m_Priority = Priority; + } + m_Device->Unlock(); + } +} |