diff --git a/CONTRIBUTORS b/CONTRIBUTORS index f19b4610..fde5a86b 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -1980,3 +1980,7 @@ Frank Schmirler Jörn Reder 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 + 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 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)) {