Fixed setting additional audio PIDs in CAMs

This commit is contained in:
Klaus Schmidinger 2006-08-14 09:56:28 +02:00
parent dc32738b27
commit e68171626e
4 changed files with 21 additions and 8 deletions

View File

@ -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

View File

@ -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).

View File

@ -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:

View File

@ -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)) {