summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Schmirler <vdr@schmirler.de>2012-05-29 01:25:47 +0200
committerFrank Schmirler <vdr@schmirler.de>2012-05-29 01:25:47 +0200
commit744dc6792ca41febf35982984cc4e79ee35a9ff6 (patch)
treeb5558ee1aa7a5ea50e74931eaa4f00c40a49cf58
parent16f8c75918d309042490ef5c853def735151cd2c (diff)
downloadvdr-plugin-streamdev-744dc6792ca41febf35982984cc4e79ee35a9ff6.tar.gz
vdr-plugin-streamdev-744dc6792ca41febf35982984cc4e79ee35a9ff6.tar.bz2
Reimplemented some client device methods
-rw-r--r--HISTORY1
-rw-r--r--client/device.c67
-rw-r--r--common.h6
3 files changed, 37 insertions, 37 deletions
diff --git a/HISTORY b/HISTORY
index 49e43b6..bfe8815 100644
--- a/HISTORY
+++ b/HISTORY
@@ -1,6 +1,7 @@
VDR Plugin 'streamdev' Revision History
---------------------------------------
+- Reimplemented some client device methods
- Proper fix for "client sends ABRT after TUNE". Obsoletes many hacks in client
- Added CLOCK_MONOTONIC timestamp and thread id to Dprintf
- Silenced warning (thanks to Rolf Ahrenberg)
diff --git a/client/device.c b/client/device.c
index 87dd46c..5c15a98 100644
--- a/client/device.c
+++ b/client/device.c
@@ -84,23 +84,19 @@ bool cStreamdevDevice::IsTunedToTransponder(const cChannel *Channel) const
bool cStreamdevDevice::IsTunedToTransponder(const cChannel *Channel)
#endif
{
- bool res = false;
- if (ClientSocket.DataSocket(siLive) != NULL
- && TRANSPONDER(Channel, m_Channel)
- && Channel->Ca() == CA_FTA
- && m_Channel->Ca() == CA_FTA)
- res = true;
- return res;
+ return ClientSocket.DataSocket(siLive) != NULL &&
+ m_Channel != NULL &&
+ Channel->Transponder() == m_Channel->Transponder();
}
bool cStreamdevDevice::ProvidesChannel(const cChannel *Channel, int Priority,
bool *NeedsDetachReceivers) const {
- bool res = false;
#if APIVERSNUM >= 10725
bool prio = Priority == IDLEPRIORITY || Priority >= this->Priority();
#else
bool prio = Priority < 0 || Priority > this->Priority();
#endif
+ bool res = prio;
bool ndr = false;
if (!StreamdevClientSetup.StartClient || Channel == m_DenyChannel)
@@ -121,29 +117,31 @@ bool cStreamdevDevice::ProvidesChannel(const cChannel *Channel, int Priority,
return false;
}
- if (ClientSocket.DataSocket(siLive) != NULL
- && TRANSPONDER(Channel, m_Channel))
- res = true;
- else {
- if (Priority == LIVEPRIORITY)
- {
- if (ClientSocket.ServerVersion() >= 100)
- {
+ if (IsTunedToTransponder(Channel)) {
+ if (Channel->Ca() < CA_ENCRYPTED_MIN ||
+ (Channel->Vpid() && HasPid(Channel->Vpid())) ||
+ (Channel->Apid(0) && HasPid(Channel->Apid(0))))
+ res = true;
+ else
+ ndr = true;
+ }
+ else if (prio) {
+ if (Priority == LIVEPRIORITY) {
+ if (ClientSocket.ServerVersion() >= 100) {
Priority = StreamdevClientSetup.LivePriority;
UpdatePriority(true);
}
- else
- {
+ else {
if (StreamdevClientSetup.LivePriority >= 0)
Priority = StreamdevClientSetup.LivePriority;
}
}
- res = prio && ClientSocket.ProvidesChannel(Channel, Priority);
+ res = ClientSocket.ProvidesChannel(Channel, Priority);
+ ndr = Receiving();
if (ClientSocket.ServerVersion() >= 100)
UpdatePriority(false);
- ndr = true;
}
if (NeedsDetachReceivers)
@@ -154,6 +152,7 @@ bool cStreamdevDevice::ProvidesChannel(const cChannel *Channel, int Priority,
bool cStreamdevDevice::SetChannelDevice(const cChannel *Channel,
bool LiveView) {
+ bool res;
Dprintf("SetChannelDevice Channel: %s, LiveView: %s\n", Channel->Name(),
LiveView ? "true" : "false");
LOCK_THREAD;
@@ -161,17 +160,23 @@ bool cStreamdevDevice::SetChannelDevice(const cChannel *Channel,
if (LiveView)
return false;
- if (ClientSocket.DataSocket(siLive) != NULL
- && TRANSPONDER(Channel, m_Channel)
- && Channel->Ca() == CA_FTA
- && m_Channel->Ca() == CA_FTA)
- return true;
-
- DetachAllReceivers();
- m_Channel = Channel;
- bool r = ClientSocket.SetChannelDevice(m_Channel);
- Dprintf("setchanneldevice r=%d\n", r);
- return r;
+ if (Receiving() && IsTunedToTransponder(Channel) && (
+ Channel->Ca() < CA_ENCRYPTED_MIN ||
+ (Channel->Vpid() && HasPid(Channel->Vpid())) ||
+ (Channel->Apid(0) && HasPid(Channel->Apid(0))))) {
+ res = true;
+ }
+ else {
+ DetachAllReceivers();
+ m_Channel = Channel;
+ // Old servers delete cStreamdevLiveStreamer in ABRT.
+ // Delete it now or it will happen after we tuned to new channel
+ if (ClientSocket.ServerVersion() < 100)
+ CloseDvr();
+ res = ClientSocket.SetChannelDevice(m_Channel);
+ }
+ Dprintf("setchanneldevice res=%d\n", res);
+ return res;
}
bool cStreamdevDevice::SetPid(cPidHandle *Handle, int Type, bool On) {
diff --git a/common.h b/common.h
index cad48ce..664f679 100644
--- a/common.h
+++ b/common.h
@@ -29,12 +29,6 @@
#define Dprintf(x...)
#endif
-#if APIVERSNUM >= 10714
-#define TRANSPONDER(c1, c2) (c1->Transponder() == c2->Transponder() && !c1->IsSourceType('V'))
-#else
-#define TRANSPONDER(c1, c2) (c1->Transponder() == c2->Transponder())
-#endif
-
#define MAXPARSEBUFFER KILOBYTE(16)
/* Service ID for loop prevention */