1
0
mirror of https://github.com/VDR4Arch/vdr.git synced 2023-10-10 13:36:52 +02:00

The mechanism of trying different CAMs when switching to an encrypted channel is now only triggered if there acually is more than one CAM in the system

This commit is contained in:
Klaus Schmidinger 2017-01-09 14:27:36 +01:00
parent d1ddb39781
commit 196f2af596
2 changed files with 11 additions and 8 deletions

View File

@ -8894,4 +8894,5 @@ Video Disk Recorder Revision History
by Dietmar Spingler). This speeds up switching to encrypted channels after by Dietmar Spingler). This speeds up switching to encrypted channels after
newly starting VDR, in case there is more than one CAM in the system. newly starting VDR, in case there is more than one CAM in the system.
- Fixed a flaw in handling timeouts for encrypted channels. - Fixed a flaw in handling timeouts for encrypted channels.
- The mechanism of trying different CAMs when switching to an encrypted channel is
now only triggered if there acually is more than one CAM in the system.

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: device.c 4.4 2017/01/09 12:51:05 kls Exp $ * $Id: device.c 4.5 2017/01/09 14:25:38 kls Exp $
*/ */
#include "device.h" #include "device.h"
@ -1678,12 +1678,14 @@ bool cDevice::AttachReceiver(cReceiver *Receiver)
Unlock(); Unlock();
if (camSlot && Receiver->priority > MINPRIORITY) { // priority check to avoid an infinite loop with the CAM slot's caPidReceiver if (camSlot && Receiver->priority > MINPRIORITY) { // priority check to avoid an infinite loop with the CAM slot's caPidReceiver
camSlot->StartDecrypting(); camSlot->StartDecrypting();
startScrambleDetection = time(NULL); if (CamSlots.Count() > 1) { // don't try different CAMs if there is only one
scramblingTimeout = TS_SCRAMBLING_TIMEOUT; startScrambleDetection = time(NULL);
bool KnownToDecrypt = ChannelCamRelations.CamDecrypt(Receiver->ChannelID(), camSlot->SlotNumber()); scramblingTimeout = TS_SCRAMBLING_TIMEOUT;
if (KnownToDecrypt) bool KnownToDecrypt = ChannelCamRelations.CamDecrypt(Receiver->ChannelID(), camSlot->SlotNumber());
scramblingTimeout *= 10; // give it time to receive ECM/EMM if (KnownToDecrypt)
dsyslog("CAM %d: %sknown to decrypt channel %s (scramblingTimeout = %ds)", camSlot->SlotNumber(), KnownToDecrypt ? "" : "not ", *Receiver->ChannelID().ToString(), scramblingTimeout); scramblingTimeout *= 10; // give it time to receive ECM/EMM
dsyslog("CAM %d: %sknown to decrypt channel %s (scramblingTimeout = %ds)", camSlot->SlotNumber(), KnownToDecrypt ? "" : "not ", *Receiver->ChannelID().ToString(), scramblingTimeout);
}
} }
Start(); Start();
return true; return true;