diff options
| author | ghost <andreas.monzner@multimedia-labs.de> | 2008-11-24 22:04:28 +0100 |
|---|---|---|
| committer | ghost <andreas.monzner@multimedia-labs.de> | 2008-11-24 22:04:28 +0100 |
| commit | 08d4f4729ac8c417f767628ef521dc71f232cf98 (patch) | |
| tree | 6670152cd65a041b4e2329196d1dd499fb94aa36 /lib/dvb/dvb.cpp | |
| parent | 14cf6c3b6887b94bcdd65ee251207d9309e2ae24 (diff) | |
| download | enigma2-08d4f4729ac8c417f767628ef521dc71f232cf98.tar.gz enigma2-08d4f4729ac8c417f767628ef521dc71f232cf98.zip | |
add possibility to request tsid/onid for iDVBChannel
Diffstat (limited to 'lib/dvb/dvb.cpp')
| -rw-r--r-- | lib/dvb/dvb.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index 66ec1d2d..fd509d5d 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -4,6 +4,7 @@ #include <lib/dvb/dvb.h> #include <lib/dvb/pmt.h> #include <lib/dvb/sec.h> +#include <lib/dvb/specs.h> #include <errno.h> #include <sys/types.h> @@ -1499,6 +1500,58 @@ RESULT eDVBChannel::setCIRouting(const eDVBCIRouting &routing) return -1; } +void eDVBChannel::SDTready(int result) +{ + ePyObject args = PyTuple_New(2); + bool ok=false; + if (!result) + { + for (std::vector<ServiceDescriptionSection*>::const_iterator i = m_SDT->getSections().begin(); i != m_SDT->getSections().end(); ++i) + { + ok = true; + PyTuple_SET_ITEM(args, 0, PyInt_FromLong((*i)->getTransportStreamId())); + PyTuple_SET_ITEM(args, 1, PyInt_FromLong((*i)->getOriginalNetworkId())); + break; + } + } + if (!ok) + { + PyTuple_SET_ITEM(args, 0, Py_None); + PyTuple_SET_ITEM(args, 1, Py_None); + Py_INCREF(Py_None); + Py_INCREF(Py_None); + } + PyObject_CallObject(m_tsid_onid_callback, args); + Py_DECREF(args); + Py_DECREF(m_tsid_onid_callback); + m_tsid_onid_callback = ePyObject(); + m_tsid_onid_demux = 0; + m_SDT = 0; +} + +RESULT eDVBChannel::requestTsidOnid(ePyObject callback) +{ + if (PyCallable_Check(callback)) + { + if (!getDemux(m_tsid_onid_demux, 0)) + { + m_SDT = new eTable<ServiceDescriptionSection>; + CONNECT(m_SDT->tableReady, eDVBChannel::SDTready); + if (m_SDT->start(m_tsid_onid_demux, eDVBSDTSpec())) + { + m_tsid_onid_demux = 0; + m_SDT = 0; + } + else + { + m_tsid_onid_callback = callback; + return 0; + } + } + } + return -1; +} + RESULT eDVBChannel::getDemux(ePtr<iDVBDemux> &demux, int cap) { ePtr<eDVBAllocatedDemux> &our_demux = (cap & capDecode) ? m_decoder_demux : m_demux; |
