void cCamSlot::SendCaPmt(uint8_t CmdId)
if (GetCaPids(source, transponder, p->programNumber, CaSystemIds, MAXRECEIVEPIDS + 1, CaPids) > 0)
{
if (Loop == 1)
{
FixSharedCaPids(p->programNumber, CaSystemIds, CaPids);
caPidReceiver->DelPids(CaPids);
}
.....
void cCamSlot::FixSharedCaPids(int programNumber, const int *CaSystemIds, int *CaPids) //02.06.2016 {
//dont delete shared CaPids
//example: ORF 2 V and ORF Sport plus shares the same CaPids
int numPids = 0;
int *pCaPids = CaPids;
while (*pCaPids)
{
numPids++;
pCaPids++;
}
if (numPids <= 0)
return;
int CaPids2[MAXRECEIVEPIDS + 1];
for (cCiCaProgramData *p = caProgramList.First(); p; p = caProgramList.Next(p))
{
if (p->programNumber != programNumber)
{
if (GetCaPids(source, transponder, p->programNumber, CaSystemIds, MAXRECEIVEPIDS + 1, CaPids2) > 0)
{
int* pCaPids2 = CaPids2;
while (*pCaPids2)
{
pCaPids = CaPids;
while (*pCaPids)
{
if (*pCaPids == *pCaPids2)
{
*pCaPids = CaPids[numPids - 1];
numPids--;
CaPids[numPids] = 0;
if (numPids <= 0)
return;
}
else
*pCaPids++;
}
*pCaPids2++;
}
}
}
}
}