From 7fac1d4ae2284b8789b3042dc261393589649206 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Fri, 9 Jan 2015 09:46:57 +0100 Subject: [PATCH] Fixed resetting the receiver for EMM pids for CAMs that need to receive the TS --- CONTRIBUTORS | 2 ++ HISTORY | 4 +++- ci.c | 8 +++++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 7d5ff6b7..3d9757e4 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -3293,3 +3293,5 @@ Christian Winkler Dietmar Spingler for reporting a problem that led to a fix in detaching receivers from devices in case a CAM needs to receive the TS + for reporting a problem that led to a fix with EMM pids not being properly reset for + CAMs that need to receive the TS diff --git a/HISTORY b/HISTORY index d99a8857..c699cf12 100644 --- a/HISTORY +++ b/HISTORY @@ -8307,7 +8307,7 @@ Video Disk Recorder Revision History - The APIVERSION has been increased to 2.0.6 due to the changes to pat.h, sdt.h and the functional modification to cFont::CreateFont(). -2015-01-07: Version 2.1.7 +2015-01-09: Version 2.1.7 - No longer logging an error message in DirSizeMB() if the given directory doesn't exist. This avoids lots of log entries in case several VDRs use the same video @@ -8338,3 +8338,5 @@ Video Disk Recorder Revision History Rolf Ahrenberg). - Fixed detaching receivers from devices in case a CAM needs to receive the TS (reported by Dietmar Spingler). +- Fixed resetting the receiver for EMM pids for CAMs that need to receive the TS + (reported by Dietmar Spingler). diff --git a/ci.c b/ci.c index 90777651..fc50071e 100644 --- a/ci.c +++ b/ci.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: ci.c 3.13 2014/03/26 11:51:09 kls Exp $ + * $Id: ci.c 3.14 2015/01/09 09:41:20 kls Exp $ */ #include "ci.h" @@ -123,6 +123,7 @@ public: virtual ~cCaPidReceiver() { Detach(); } virtual void Receive(uchar *Data, int Length); bool HasCaPids(void) { return NumPids() - emmPids.Size() - 1 > 0; } + void Reset(void) { DelEmmPids(); } }; cCaPidReceiver::cCaPidReceiver(void) @@ -1931,6 +1932,11 @@ void cCamSlot::SendCaPmt(uint8_t CmdId) else { cCiCaPmt CaPmt(CmdId, 0, 0, 0, NULL); cas->SendPMT(&CaPmt); + if (caPidReceiver) { + if (cDevice *d = Device()) + d->Detach(caPidReceiver); + caPidReceiver->Reset(); + } } } }