mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
cPatFilter::Process() now only stores CA descriptors for video and audio pids
This commit is contained in:
parent
07d50dc8c4
commit
3124c7598e
@ -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
|
||||||
|
3
HISTORY
3
HISTORY
@ -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).
|
||||||
|
8
pat.c
8
pat.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: 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,11 +449,13 @@ 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());
|
||||||
}
|
}
|
||||||
|
if (ProcessCaDescriptors) {
|
||||||
for (SI::Loop::Iterator it; (d = (SI::CaDescriptor*)stream.streamDescriptors.getNext(it, SI::CaDescriptorTag)); ) {
|
for (SI::Loop::Iterator it; (d = (SI::CaDescriptor*)stream.streamDescriptors.getNext(it, SI::CaDescriptorTag)); ) {
|
||||||
CaDescriptors->AddCaDescriptor(d, esPid);
|
CaDescriptors->AddCaDescriptor(d, esPid);
|
||||||
delete d;
|
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);
|
||||||
Channel->SetCaIds(CaDescriptors->CaIds());
|
Channel->SetCaIds(CaDescriptors->CaIds());
|
||||||
|
Loading…
Reference in New Issue
Block a user