aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb/pmt.cpp
diff options
context:
space:
mode:
authorghost <andreas.monzner@multimedia-labs.de>2010-11-22 16:19:51 +0100
committerghost <andreas.monzner@multimedia-labs.de>2010-11-22 16:21:24 +0100
commitb55f332be8d9490d2a01705ce13db4999112cc37 (patch)
tree18f72138ddc4163ea8e02f136fe27cee9065542a /lib/dvb/pmt.cpp
parent2ddea3d034f830c0809687b89cef2489e92a3a3d (diff)
downloadenigma2-b55f332be8d9490d2a01705ce13db4999112cc37.tar.gz
enigma2-b55f332be8d9490d2a01705ce13db4999112cc37.zip
add possibility to query CAID/CAPID combination from python
refs bug #621
Diffstat (limited to 'lib/dvb/pmt.cpp')
-rw-r--r--lib/dvb/pmt.cpp41
1 files changed, 32 insertions, 9 deletions
diff --git a/lib/dvb/pmt.cpp b/lib/dvb/pmt.cpp
index 2ca226ae..c6e03c22 100644
--- a/lib/dvb/pmt.cpp
+++ b/lib/dvb/pmt.cpp
@@ -149,7 +149,7 @@ void eDVBServicePMTHandler::PATready(int)
serviceEvent(eventNoPAT);
}
-PyObject *eDVBServicePMTHandler::getCaIds()
+PyObject *eDVBServicePMTHandler::getCaIds(bool pair)
{
ePyObject ret;
@@ -161,16 +161,29 @@ PyObject *eDVBServicePMTHandler::getCaIds()
if (cnt)
{
ret=PyList_New(cnt);
- std::set<uint16_t>::iterator it(prog.caids.begin());
- while(cnt--)
- PyList_SET_ITEM(ret, cnt, PyInt_FromLong(*it++));
+ std::set<program::capid_pair>::iterator it(prog.caids.begin());
+ if (pair)
+ {
+ while(cnt--)
+ {
+ ePyObject tuple = PyTuple_New(2);
+ PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong(it->caid));
+ PyTuple_SET_ITEM(tuple, 1, PyInt_FromLong((it++)->capid));
+ PyList_SET_ITEM(ret, cnt, tuple);
+ }
+ }
+ else
+ {
+ while(cnt--)
+ PyList_SET_ITEM(ret, cnt, PyInt_FromLong((it++)->caid));
+ }
}
}
return ret ? (PyObject*)ret : (PyObject*)PyList_New(0);
}
-int eDVBServicePMTHandler::getProgramInfo(struct program &program)
+int eDVBServicePMTHandler::getProgramInfo(program &program)
{
ePtr<eTable<ProgramMapSection> > ptr;
int cached_apid_ac3 = -1;
@@ -460,7 +473,10 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
case CA_DESCRIPTOR:
{
CaDescriptor *descr = (CaDescriptor*)(*desc);
- program.caids.insert(descr->getCaSystemId());
+ program::capid_pair pair;
+ pair.caid = descr->getCaSystemId();
+ pair.capid = descr->getCaPid();
+ program.caids.insert(pair);
break;
}
default:
@@ -523,7 +539,10 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
if ((*desc)->getTag() == CA_DESCRIPTOR)
{
CaDescriptor *descr = (CaDescriptor*)(*desc);
- program.caids.insert(descr->getCaSystemId());
+ program::capid_pair pair;
+ pair.caid = descr->getCaSystemId();
+ pair.capid = descr->getCaPid();
+ program.caids.insert(pair);
}
}
}
@@ -589,8 +608,12 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
program.textPid = cached_tpid;
}
CAID_LIST &caids = m_service->m_ca;
- for (CAID_LIST::iterator it(caids.begin()); it != caids.end(); ++it)
- program.caids.insert(*it);
+ for (CAID_LIST::iterator it(caids.begin()); it != caids.end(); ++it) {
+ program::capid_pair pair;
+ pair.caid = *it;
+ pair.capid = -1; // not known yet
+ program.caids.insert(pair);
+ }
if ( cnt )
ret = 0;
}