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

Revoked "Fixed sending CA descriptors to CAMs in case a cReceiver is not used for a recording or live view" - was unstable

This commit is contained in:
Klaus Schmidinger 2014-01-24 11:55:40 +01:00
parent e158021a4d
commit 5ac41bf091
3 changed files with 4 additions and 19 deletions

View File

@ -3243,10 +3243,6 @@ Thomas Reufer <thomas@reufer.ch>
for suggesting to add a note to ePlayMode in device.h that VDR itself always uses for suggesting to add a note to ePlayMode in device.h that VDR itself always uses
pmAudioVideo when replaying a recording pmAudioVideo when replaying a recording
Mariusz Bialonczyk <manio@skyboo.net>
for fixing sending CA descriptors to CAMs in case a cReceiver is not used for a
recording or live view, like e.g. streaming clients
Eike Sauer <EikeSauer@t-online.de> Eike Sauer <EikeSauer@t-online.de>
for reporting a problem with channels that need more than 5 TS packets for detecting for reporting a problem with channels that need more than 5 TS packets for detecting
frame borders frame borders

View File

@ -8140,8 +8140,6 @@ Video Disk Recorder Revision History
- Improved locking for CAM slots and made the pure functions of cCiAdapter have - Improved locking for CAM slots and made the pure functions of cCiAdapter have
default implementations, to fix a possible crash with CI adapters and CAM slots default implementations, to fix a possible crash with CI adapters and CAM slots
that are implemented in a plugin. that are implemented in a plugin.
- Fixed sending CA descriptors to CAMs in case a cReceiver is not used for a
recording or live view, like e.g. streaming clients (thanks to Mariusz Bialonczyk).
- Added logging the supported system ids of a CAM. - Added logging the supported system ids of a CAM.
- Increased MIN_TS_PACKETS_FOR_FRAME_DETECTOR to 10 in order to be able to record - Increased MIN_TS_PACKETS_FOR_FRAME_DETECTOR to 10 in order to be able to record
channels that need more than 5 TS packets for detecting frame borders (reported by channels that need more than 5 TS packets for detecting frame borders (reported by

17
ci.c
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: ci.c 3.9 2014/01/22 09:39:06 kls Exp $ * $Id: ci.c 3.10 2014/01/24 11:53:53 kls Exp $
*/ */
#include "ci.h" #include "ci.h"
@ -592,7 +592,6 @@ private:
int transponder; int transponder;
int programNumber; int programNumber;
int caSystemIds[MAXCASYSTEMIDS + 1]; // list is zero terminated! int caSystemIds[MAXCASYSTEMIDS + 1]; // list is zero terminated!
bool gotCaDescriptors;
void AddCaDescriptors(int Length, const uint8_t *Data); void AddCaDescriptors(int Length, const uint8_t *Data);
public: public:
cCiCaPmt(uint8_t CmdId, int Source, int Transponder, int ProgramNumber, const int *CaSystemIds); cCiCaPmt(uint8_t CmdId, int Source, int Transponder, int ProgramNumber, const int *CaSystemIds);
@ -600,12 +599,10 @@ public:
void SetListManagement(uint8_t ListManagement); void SetListManagement(uint8_t ListManagement);
uint8_t ListManagement(void) { return capmt[0]; } uint8_t ListManagement(void) { return capmt[0]; }
void AddPid(int Pid, uint8_t StreamType); void AddPid(int Pid, uint8_t StreamType);
bool GotCaDescriptors(void) { return gotCaDescriptors; }
}; };
cCiCaPmt::cCiCaPmt(uint8_t CmdId, int Source, int Transponder, int ProgramNumber, const int *CaSystemIds) cCiCaPmt::cCiCaPmt(uint8_t CmdId, int Source, int Transponder, int ProgramNumber, const int *CaSystemIds)
{ {
gotCaDescriptors = false;
cmdId = CmdId; cmdId = CmdId;
source = Source; source = Source;
transponder = Transponder; transponder = Transponder;
@ -661,7 +658,6 @@ void cCiCaPmt::AddCaDescriptors(int Length, const uint8_t *Data)
int l = length - esInfoLengthPos - 2; int l = length - esInfoLengthPos - 2;
capmt[esInfoLengthPos] = (l >> 8) & 0xFF; capmt[esInfoLengthPos] = (l >> 8) & 0xFF;
capmt[esInfoLengthPos + 1] = l & 0xFF; capmt[esInfoLengthPos + 1] = l & 0xFF;
gotCaDescriptors = true;
} }
} }
else else
@ -1810,7 +1806,6 @@ cCiEnquiry *cCamSlot::GetEnquiry(void)
void cCamSlot::SendCaPmt(uint8_t CmdId) void cCamSlot::SendCaPmt(uint8_t CmdId)
{ {
cMutexLock MutexLock(&mutex); cMutexLock MutexLock(&mutex);
bool needResend = false;
cCiConditionalAccessSupport *cas = (cCiConditionalAccessSupport *)GetSessionByResourceId(RI_CONDITIONAL_ACCESS_SUPPORT); cCiConditionalAccessSupport *cas = (cCiConditionalAccessSupport *)GetSessionByResourceId(RI_CONDITIONAL_ACCESS_SUPPORT);
if (cas) { if (cas) {
const int *CaSystemIds = cas->GetCaSystemIds(); const int *CaSystemIds = cas->GetCaSystemIds();
@ -1843,12 +1838,8 @@ void cCamSlot::SendCaPmt(uint8_t CmdId)
} }
if (cas->RepliesToQuery()) if (cas->RepliesToQuery())
CaPmt.SetListManagement(Active ? CPLM_ADD : CPLM_UPDATE); CaPmt.SetListManagement(Active ? CPLM_ADD : CPLM_UPDATE);
if (Active || cas->RepliesToQuery()) { if (Active || cas->RepliesToQuery())
if ((CaPmt.ListManagement() == CPLM_ADD || CaPmt.ListManagement() == CPLM_ONLY) && !CaPmt.GotCaDescriptors()) cas->SendPMT(&CaPmt);
needResend = true;
else
cas->SendPMT(&CaPmt);
}
p->modified = false; p->modified = false;
} }
} }
@ -1858,7 +1849,7 @@ void cCamSlot::SendCaPmt(uint8_t CmdId)
if (cDevice *d = Device()) if (cDevice *d = Device())
d->AttachReceiver(caPidReceiver); d->AttachReceiver(caPidReceiver);
} }
resendPmt = needResend; resendPmt = false;
} }
else { else {
cCiCaPmt CaPmt(CmdId, 0, 0, 0, NULL); cCiCaPmt CaPmt(CmdId, 0, 0, 0, NULL);