18 #define PMT_SCAN_TIMEOUT 10 // seconds
48 data[4] = ((CaPid >> 8) & 0x1F) | 0xE0;
49 data[5] = CaPid & 0xFF;
51 memcpy(&
data[6], Data, Length);
78 bool Is(
int Source,
int Transponder,
int ServiceId);
121 for (
int i = 0; i <
numCaIds; i++) {
122 if (
caIds[i] == CaId)
125 caIds[numCaIds++] = CaId;
142 #ifdef DEBUG_CA_DESCRIPTORS
146 for (
int i = 0; i < nca->
Length(); i++)
147 q += sprintf(q,
" %02X", nca->
Data()[i]);
159 if (!CaSystemIds || !*CaSystemIds)
161 if (BufSize > 0 && Data) {
164 if (EsPid < 0 || d->EsPid() == EsPid) {
165 const int *caids = CaSystemIds;
167 if (d->CaSystem() == *caids) {
168 if (length + d->Length() <= BufSize) {
169 memcpy(Data + length, d->Data(), d->Length());
170 length += d->Length();
193 int GetCaDescriptors(
int Source,
int Transponder,
int ServiceId,
const int *CaSystemIds,
int BufSize,
uchar *Data,
int EsPid);
200 if (ca->Is(CaDescriptors)) {
201 if (*ca == *CaDescriptors) {
202 delete CaDescriptors;
211 return CaDescriptors->
Empty() ? 0 : 1;
218 if (ca->Is(Source, Transponder, ServiceId))
219 return ca->GetCaDescriptors(CaSystemIds, BufSize, Data, EsPid);
226 int GetCaDescriptors(
int Source,
int Transponder,
int ServiceId,
const int *CaSystemIds,
int BufSize,
uchar *Data,
int EsPid)
228 return CaDescriptorHandler.
GetCaDescriptors(Source, Transponder, ServiceId, CaSystemIds, BufSize, Data, EsPid);
260 uint64_t v = Version;
262 uint64_t
id = (PmtPid | (Sid << 16)) & 0x00000000FFFFFFFFLL;
264 if ((
pmtVersion[i] & 0x00000000FFFFFFFFLL) == id) {
265 bool Changed = (
pmtVersion[i] & 0x000000FF00000000LL) != v;
341 uint16_t CompositionPageIds[
MAXSPIDS + 1] = { 0 };
342 uint16_t AncillaryPageIds[
MAXSPIDS + 1] = { 0 };
353 bool ProcessCaDescriptors =
false;
354 int esPid = stream.
getPid();
362 ProcessCaDescriptors =
true;
370 Apids[NumApids] = esPid;
378 char *s = ALangs[NumApids];
398 ProcessCaDescriptors =
true;
415 ProcessCaDescriptors =
true;
419 Spids[NumSpids] = esPid;
422 char *s = SLangs[NumSpids];
467 Dpids[NumDpids] = dpid;
468 Dtypes[NumDpids] = dtype;
480 ProcessCaDescriptors =
true;
500 Dpids[NumDpids] = esPid;
505 ProcessCaDescriptors =
true;
546 Dpids[NumDpids] = esPid;
551 ProcessCaDescriptors =
true;
557 if (ProcessCaDescriptors) {
565 Channel->
SetPids(Vpid, Ppid, Vtype, Apids, Atypes, ALangs, Dpids, Dtypes, DLangs, Spids, SLangs, Tpid);
568 if (manualPageNumber)