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:
parent
e158021a4d
commit
5ac41bf091
@ -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
|
||||||
|
2
HISTORY
2
HISTORY
@ -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
17
ci.c
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user