(not yet enabled) teletext subtitle support
[enigma2.git] / lib / dvb / pmt.cpp
index 4d48f86e7898c401dab01614dddd41d59581f20b..3b7a376f12d6b872aed410c7e08932c15f9deccf 100644 (file)
@@ -424,7 +424,7 @@ void eDVBServicePMTHandler::SDTScanEvent(int event)
                                eDebug("no channel list");
                        else
                        {
-                               m_dvb_scan->insertInto(db);
+                               m_dvb_scan->insertInto(db, true);
                                eDebug("sdt update done!");
                        }
                        break;
@@ -449,7 +449,8 @@ int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux,
                ref.getChannelID(chid);
                res = m_resourceManager->allocateChannel(chid, m_channel);
                eDebug("allocate Channel: res %d", res);
-               eDVBCIInterfaces::getInstance()->addPMTHandler(this);
+               if (!res)
+                       eDVBCIInterfaces::getInstance()->addPMTHandler(this);
        } else
        {
                eDVBMetaParser parser;
@@ -500,7 +501,7 @@ int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux,
                if (ref.path.empty())
                {
                        delete m_dvb_scan;
-                       m_dvb_scan = new eDVBScan(m_channel, false);
+                       m_dvb_scan = new eDVBScan(m_channel, false, false);
                        m_dvb_scan->connectEvent(slot(*this, &eDVBServicePMTHandler::SDTScanEvent), m_scan_event_connection);
                }
        } else
@@ -537,10 +538,12 @@ void eDVBServicePMTHandler::free()
                ePtr<eTable<ProgramMapSection> > ptr;
                m_PMT.getCurrent(ptr);
                eDVBCAService::unregister_service(m_reference, demuxes, ptr);
-               eDVBCIInterfaces::getInstance()->removePMTHandler(this);
                m_ca_servicePtr = 0;
        }
 
+       if (m_channel)
+               eDVBCIInterfaces::getInstance()->removePMTHandler(this);
+
        if (m_pvr_channel)
        {
                m_pvr_channel->stopFile();