cPatFilter::Process() now only stores CA descriptors for video and audio pids

This commit is contained in:
Klaus Schmidinger 2009-12-24 13:25:40 +01:00
parent 07d50dc8c4
commit 3124c7598e
3 changed files with 18 additions and 5 deletions

View File

@ -2526,3 +2526,7 @@ Andreas Schaefers <andreas_schaefers@gmx.de>
Matthieu Castet <castet.matthieu@free.fr> Matthieu Castet <castet.matthieu@free.fr>
for improving SPU handling on devices with limited OSD capabilities for improving SPU handling on devices with limited OSD capabilities
Francesco Saverio Schiavarelli <fschiava@libero.it>
for reporting a problem with channels that have some encrypted components that
VDR doesn't use

View File

@ -6227,3 +6227,6 @@ Video Disk Recorder Revision History
- cDevice now logs the device number when a new device is created. - cDevice now logs the device number when a new device is created.
- Fixed handling STREAMTYPE_11172_AUDIO in cPatPmtParser::ParsePmt(). - Fixed handling STREAMTYPE_11172_AUDIO in cPatPmtParser::ParsePmt().
- cParsePatPmt now has functions to retrieve the audio, dolby and subtitle pids. - cParsePatPmt now has functions to retrieve the audio, dolby and subtitle pids.
- cPatFilter::Process() now only stores CA descriptors for video and audio pids
(thanks to Francesco Saverio Schiavarelli for reporting a problem with channels
that have some encrypted components that VDR doesn't use).

16
pat.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: pat.c 2.5 2009/12/06 11:39:17 kls Exp $ * $Id: pat.c 2.6 2009/12/24 13:01:18 kls Exp $
*/ */
#include "pat.h" #include "pat.h"
@ -345,6 +345,7 @@ void cPatFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
int NumDpids = 0; int NumDpids = 0;
int NumSpids = 0; int NumSpids = 0;
for (SI::Loop::Iterator it; pmt.streamLoop.getNext(stream, it); ) { for (SI::Loop::Iterator it; pmt.streamLoop.getNext(stream, it); ) {
bool ProcessCaDescriptors = false;
int esPid = stream.getPid(); int esPid = stream.getPid();
switch (stream.getStreamType()) { switch (stream.getStreamType()) {
case 1: // STREAMTYPE_11172_VIDEO case 1: // STREAMTYPE_11172_VIDEO
@ -353,6 +354,7 @@ void cPatFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
Vpid = esPid; Vpid = esPid;
Ppid = pmt.getPCRPid(); Ppid = pmt.getPCRPid();
Vtype = stream.getStreamType(); Vtype = stream.getStreamType();
ProcessCaDescriptors = true;
break; break;
case 3: // STREAMTYPE_11172_AUDIO case 3: // STREAMTYPE_11172_AUDIO
case 4: // STREAMTYPE_13818_AUDIO case 4: // STREAMTYPE_13818_AUDIO
@ -385,6 +387,7 @@ void cPatFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
} }
NumApids++; NumApids++;
} }
ProcessCaDescriptors = true;
} }
break; break;
case 5: // STREAMTYPE_13818_PRIVATE case 5: // STREAMTYPE_13818_PRIVATE
@ -398,6 +401,7 @@ void cPatFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
switch (d->getDescriptorTag()) { switch (d->getDescriptorTag()) {
case SI::AC3DescriptorTag: case SI::AC3DescriptorTag:
dpid = esPid; dpid = esPid;
ProcessCaDescriptors = true;
break; break;
case SI::SubtitlingDescriptorTag: case SI::SubtitlingDescriptorTag:
if (NumSpids < MAXSPIDS) { if (NumSpids < MAXSPIDS) {
@ -445,10 +449,12 @@ void cPatFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
break; break;
default: ;//printf("PID: %5d %5d %2d %3d %3d\n", pmt.getServiceId(), stream.getPid(), stream.getStreamType(), pmt.getVersionNumber(), Channel->Number()); default: ;//printf("PID: %5d %5d %2d %3d %3d\n", pmt.getServiceId(), stream.getPid(), stream.getStreamType(), pmt.getVersionNumber(), Channel->Number());
} }
for (SI::Loop::Iterator it; (d = (SI::CaDescriptor*)stream.streamDescriptors.getNext(it, SI::CaDescriptorTag)); ) { if (ProcessCaDescriptors) {
CaDescriptors->AddCaDescriptor(d, esPid); for (SI::Loop::Iterator it; (d = (SI::CaDescriptor*)stream.streamDescriptors.getNext(it, SI::CaDescriptorTag)); ) {
delete d; CaDescriptors->AddCaDescriptor(d, esPid);
} delete d;
}
}
} }
if (Setup.UpdateChannels >= 2) { if (Setup.UpdateChannels >= 2) {
Channel->SetPids(Vpid, Ppid, Vtype, Apids, ALangs, Dpids, DLangs, Spids, SLangs, Tpid); Channel->SetPids(Vpid, Ppid, Vtype, Apids, ALangs, Dpids, DLangs, Spids, SLangs, Tpid);