summaryrefslogtreecommitdiff
path: root/client/device.c
diff options
context:
space:
mode:
Diffstat (limited to 'client/device.c')
-rw-r--r--client/device.c24
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();
+ }
+}