aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb/dvb.cpp
diff options
context:
space:
mode:
authorghost <andreas.monzner@multimedia-labs.de>2008-11-24 22:04:28 +0100
committerghost <andreas.monzner@multimedia-labs.de>2008-11-24 22:04:28 +0100
commit08d4f4729ac8c417f767628ef521dc71f232cf98 (patch)
tree6670152cd65a041b4e2329196d1dd499fb94aa36 /lib/dvb/dvb.cpp
parent14cf6c3b6887b94bcdd65ee251207d9309e2ae24 (diff)
downloadenigma2-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.cpp53
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;