aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb/pmt.cpp
diff options
context:
space:
mode:
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>2006-05-09 20:54:29 +0000
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>2006-05-09 20:54:29 +0000
commit056f4ed60ae323f41601b8acdc42794902eac0d1 (patch)
tree3fb38668c210687e43562a8d5a5e47d228050dc7 /lib/dvb/pmt.cpp
parent23cc33141cdf93dad750965ee559849aa99410a3 (diff)
downloadenigma2-056f4ed60ae323f41601b8acdc42794902eac0d1.tar.gz
enigma2-056f4ed60ae323f41601b8acdc42794902eac0d1.zip
implement SDT scan on enter transponder (on normale zapping)
this a) update changed service/provider names b) add new services to servicelist and mark it as new services to prevent change service_name it is possible to set the dxHoldName flag for this service to prevent change any parameter of a single service it is possible to set the dxNoSDT flag look at the eServiceDVB class declaration in lib/dvb/idvb.h
Diffstat (limited to 'lib/dvb/pmt.cpp')
-rw-r--r--lib/dvb/pmt.cpp47
1 files changed, 46 insertions, 1 deletions
diff --git a/lib/dvb/pmt.cpp b/lib/dvb/pmt.cpp
index 47251835..74042ed0 100644
--- a/lib/dvb/pmt.cpp
+++ b/lib/dvb/pmt.cpp
@@ -5,6 +5,7 @@
#include <lib/dvb/metaparser.h>
#include <lib/dvb_ci/dvbci.h>
#include <lib/dvb/epgcache.h>
+#include <lib/dvb/scan.h>
#include <dvbsi++/ca_descriptor.h>
#include <dvbsi++/ca_program_map_section.h>
#include <dvbsi++/teletext_descriptor.h>
@@ -13,7 +14,7 @@
#include <dvbsi++/stream_identifier_descriptor.h>
eDVBServicePMTHandler::eDVBServicePMTHandler()
- :m_ca_servicePtr(0), m_decode_demux_num(0xFF)
+ :m_ca_servicePtr(0), m_dvb_scan(0), m_decode_demux_num(0xFF)
{
m_use_decode_demux = 0;
m_pmt_pid = -1;
@@ -440,6 +441,39 @@ int eDVBServicePMTHandler::getPVRChannel(ePtr<iDVBPVRChannel> &pvr_channel)
return -1;
}
+void eDVBServicePMTHandler::SDTScanEvent(int event)
+{
+ eDebug("scan event %d!", event);
+
+ switch (event)
+ {
+ case eDVBScan::evtFinish:
+ {
+ ePtr<iDVBChannelList> db;
+ int err;
+ if ((err = m_resourceManager->getChannelList(db)) != 0)
+ eDebug("no channel list");
+ else
+ {
+ m_dvb_scan->insertInto(db);
+ eDebug("scan done!");
+ }
+ break;
+ }
+
+ case eDVBScan::evtNewService:
+ eDebug("scan new service");
+ break;
+
+ case eDVBScan::evtFail:
+ eDebug("scan failed.");
+ break;
+
+ default:
+ break;
+ }
+}
+
int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux, eCueSheet *cue)
{
RESULT res;
@@ -500,6 +534,13 @@ int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux,
m_channel->connectEvent(
slot(*this, &eDVBServicePMTHandler::channelEvent),
m_channelEvent_connection);
+
+ if (ref.path.empty())
+ {
+ delete m_dvb_scan;
+ m_dvb_scan = new eDVBScan(m_channel);
+ m_dvb_scan->connectEvent(slot(*this, &eDVBServicePMTHandler::SDTScanEvent), m_scan_event_connection);
+ }
} else
{
serviceEvent(eventTuneFailed);
@@ -517,6 +558,10 @@ int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux,
void eDVBServicePMTHandler::free()
{
+ eDVBScan *tmp = m_dvb_scan;
+ m_dvb_scan = 0;
+ delete m_dvb_scan;
+
if (m_ca_servicePtr)
{
int demuxes[2] = {0,0};