aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb/pmt.cpp
diff options
context:
space:
mode:
authorghost <andreas.monzner@multimedia-labs.de>2010-11-23 12:40:13 +0100
committerghost <andreas.monzner@multimedia-labs.de>2010-11-23 12:40:13 +0100
commitfc8be0878f710d73f3d1c1b1ed308ad27c5ddb15 (patch)
tree30b30aac38fbb6a156063c0c6701997cc453e365 /lib/dvb/pmt.cpp
parenta543d670adf570b5ca49e48cdac5a22f2f0c48e7 (diff)
downloadenigma2-fc8be0878f710d73f3d1c1b1ed308ad27c5ddb15.tar.gz
enigma2-fc8be0878f710d73f3d1c1b1ed308ad27c5ddb15.zip
use service_id and pmtpid from PAT when only one PAT entry is exist
Diffstat (limited to 'lib/dvb/pmt.cpp')
-rw-r--r--lib/dvb/pmt.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/dvb/pmt.cpp b/lib/dvb/pmt.cpp
index 7b799662..0d2f85c4 100644
--- a/lib/dvb/pmt.cpp
+++ b/lib/dvb/pmt.cpp
@@ -131,6 +131,8 @@ void eDVBServicePMTHandler::PATready(int)
ePtr<eTable<ProgramAssociationSection> > ptr;
if (!m_PAT.getCurrent(ptr))
{
+ int service_id_single = -1;
+ int pmtpid_single = -1;
int pmtpid = -1;
std::vector<ProgramAssociationSection*>::const_iterator i;
for (i = ptr->getSections().begin(); pmtpid == -1 && i != ptr->getSections().end(); ++i)
@@ -138,8 +140,22 @@ void eDVBServicePMTHandler::PATready(int)
const ProgramAssociationSection &pat = **i;
ProgramAssociationConstIterator program;
for (program = pat.getPrograms()->begin(); pmtpid == -1 && program != pat.getPrograms()->end(); ++program)
+ {
if (eServiceID((*program)->getProgramNumber()) == m_reference.getServiceID())
pmtpid = (*program)->getProgramMapPid();
+ if (pmtpid_single == -1 && pmtpid == -1)
+ {
+ pmtpid_single = (*program)->getProgramMapPid();
+ service_id_single = (*program)->getProgramNumber();
+ }
+ else
+ pmtpid_single = service_id_single = -1;
+ }
+ }
+ if (pmtpid_single != -1) // only one PAT entry .. so we use this one
+ {
+ m_reference.setServiceID(eServiceID(service_id_single));
+ pmtpid = pmtpid_single;
}
if (pmtpid == -1)
serviceEvent(eventNoPATEntry);