summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTORS4
-rw-r--r--HISTORY8
-rw-r--r--config.h4
-rw-r--r--dvbdevice.c13
4 files changed, 21 insertions, 8 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index f19b4610..fde5a86b 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -1980,3 +1980,7 @@ Frank Schmirler <vdr@schmirler.de>
Jörn Reder <joern@zyn.de>
for reporting that a recording may unnecessarily block a device with a CAM, while
it could record on the primary device as well
+
+Tomas Berglund <tomber@telia.com>
+ for reporting a problem with sticky PIDs in CAMs when switching between encrypted
+ channels on the same transponder
diff --git a/HISTORY b/HISTORY
index 6ba80d34..b378680d 100644
--- a/HISTORY
+++ b/HISTORY
@@ -4874,3 +4874,11 @@ Video Disk Recorder Revision History
Oliver Endriss).
- Added a log error message to cPlugin::ConfigDirectory() in case a plugin calls it
from a separate thread (reported by Udo Richter).
+
+2006-08-14: Version 1.4.1-5
+
+- Replaced the "quick workaround for additional live audio PIDs" in
+ cDvbDevice::SetChannelDevice() with an actual solution in
+ cDvbDevice::SetAudioTrackDevice() in order to prevent sticky PIDs in CAMs,
+ which caused long switching times or completely blank screens when switching
+ between encrypted channels on the same transponder (reported by Tomas Berglund).
diff --git a/config.h b/config.h
index 82c06c60..8472210d 100644
--- a/config.h
+++ b/config.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: config.h 1.265 2006/08/12 09:10:11 kls Exp $
+ * $Id: config.h 1.266 2006/08/14 09:49:22 kls Exp $
*/
#ifndef __CONFIG_H
@@ -21,7 +21,7 @@
// VDR's own version number:
-#define VDRVERSION "1.4.1-4"
+#define VDRVERSION "1.4.1-5"
#define VDRVERSNUM 10401 // Version * 10000 + Major * 100 + Minor
// The plugin API's version number:
diff --git a/dvbdevice.c b/dvbdevice.c
index 9ae8dfaf..fb8ec938 100644
--- a/dvbdevice.c
+++ b/dvbdevice.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: dvbdevice.c 1.159 2006/06/11 09:03:55 kls Exp $
+ * $Id: dvbdevice.c 1.160 2006/08/14 09:38:32 kls Exp $
*/
#include "dvbdevice.h"
@@ -853,11 +853,6 @@ bool cDvbDevice::SetChannelDevice(const cChannel *Channel, bool LiveView)
esyslog("ERROR: failed to set PIDs for channel %d on device %d", Channel->Number(), CardIndex() + 1);
return false;
}
- //XXX quick workaround for additional live audio PIDs:
- if (ciHandler) {
- ciHandler->SetPid(Channel->Apid(1), true);
- ciHandler->SetPid(Channel->Dpid(0), true);
- }
if (IsPrimaryDevice())
AddPid(Channel->Tpid(), ptTeletext);
CHECK(ioctl(fd_audio, AUDIO_SET_MUTE, true)); // actually one would expect 'false' here, but according to Marco Schlüßler <marco@lordzodiac.de> this works
@@ -927,8 +922,14 @@ void cDvbDevice::SetAudioTrackDevice(eTrackType Type)
if (IS_AUDIO_TRACK(Type) || (IS_DOLBY_TRACK(Type) && SetAudioBypass(true))) {
if (pidHandles[ptAudio].pid && pidHandles[ptAudio].pid != TrackId->id) {
DetachAll(pidHandles[ptAudio].pid);
+ if (ciHandler)
+ ciHandler->SetPid(pidHandles[ptAudio].pid, false);
pidHandles[ptAudio].pid = TrackId->id;
SetPid(&pidHandles[ptAudio], ptAudio, true);
+ if (ciHandler) {
+ ciHandler->SetPid(pidHandles[ptAudio].pid, true);
+ ciHandler->StartDecrypting();
+ }
}
}
else if (IS_DOLBY_TRACK(Type)) {