remove warning
[enigma2.git] / lib / dvb / pmt.cpp
index 4d48f86e7898c401dab01614dddd41d59581f20b..d6f002e6dda59320b85d3aaf108307e493361c7c 100644 (file)
@@ -100,8 +100,7 @@ void eDVBServicePMTHandler::PMTready(int error)
                                eDVBCAService::register_service(m_reference, demuxes, m_ca_servicePtr);
                                eDVBCIInterfaces::getInstance()->recheckPMTHandlers();
                        }
-                       else
-                               eDVBCIInterfaces::getInstance()->gotPMT(this);
+                       eDVBCIInterfaces::getInstance()->gotPMT(this);
                }
                if (m_ca_servicePtr)
                {
@@ -161,27 +160,27 @@ PyObject *eDVBServicePMTHandler::getCaIds()
 int eDVBServicePMTHandler::getProgramInfo(struct program &program)
 {
        ePtr<eTable<ProgramMapSection> > ptr;
+       int cached_apid_ac3 = -1;
+       int cached_apid_mpeg = -1;
+       int cached_vpid = -1;
+       int cached_tpid = -1;
 
        program.videoStreams.clear();
        program.audioStreams.clear();
        program.pcrPid = -1;
        program.pmtPid = -1;
        program.textPid = -1;
-       program.audioChannel = m_service ? m_service->getCacheEntry(eDVBService::cACHANNEL) : -1;
+
+       if ( m_service && !m_service->cacheEmpty() )
+       {
+               cached_vpid = m_service->getCacheEntry(eDVBService::cVPID);
+               cached_apid_mpeg = m_service->getCacheEntry(eDVBService::cAC3PID);
+               cached_apid_ac3 = m_service->getCacheEntry(eDVBService::cAPID);
+               cached_tpid = m_service->getCacheEntry(eDVBService::cTPID);
+       }
 
        if ( ((m_service && m_service->usePMT()) || !m_service) && !m_PMT.getCurrent(ptr))
        {
-               int cached_apid_ac3 = -1;
-               int cached_apid_mpeg = -1;
-               int cached_vpid = -1;
-               int cached_tpid = -1;
-               if ( m_service && !m_service->cacheEmpty() )
-               {
-                       cached_vpid = m_service->getCacheEntry(eDVBService::cVPID);
-                       cached_apid_mpeg = m_service->getCacheEntry(eDVBService::cAC3PID);
-                       cached_apid_ac3 = m_service->getCacheEntry(eDVBService::cAPID);
-                       cached_tpid = m_service->getCacheEntry(eDVBService::cTPID);
-               }
                eDVBTableSpec table_spec;
                ptr->getSpec(table_spec);
                program.pmtPid = table_spec.pid < 0x1fff ? table_spec.pid : -1;
@@ -314,48 +313,44 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
                return 0;
        } else if ( m_service && !m_service->cacheEmpty() )
        {
-               int vpid = m_service->getCacheEntry(eDVBService::cVPID),
-                       apid_ac3 = m_service->getCacheEntry(eDVBService::cAC3PID),
-                       apid_mpeg = m_service->getCacheEntry(eDVBService::cAPID),
-                       pcrpid = m_service->getCacheEntry(eDVBService::cPCRPID),
-                       tpid = m_service->getCacheEntry(eDVBService::cTPID),
+               int cached_pcrpid = m_service->getCacheEntry(eDVBService::cPCRPID),
                        vpidtype = m_service->getCacheEntry(eDVBService::cVTYPE),
                        cnt=0;
                if ( vpidtype == -1 )
                        vpidtype = videoStream::vtMPEG2;
-               if ( vpid != -1 )
+               if ( cached_vpid != -1 )
                {
                        videoStream s;
-                       s.pid = vpid;
+                       s.pid = cached_vpid;
                        s.type = vpidtype;
                        program.videoStreams.push_back(s);
                        ++cnt;
                }
-               if ( apid_ac3 != -1 )
+               if ( cached_apid_ac3 != -1 )
                {
                        audioStream s;
                        s.type = audioStream::atAC3;
-                       s.pid = apid_ac3;
+                       s.pid = cached_apid_ac3;
                        program.audioStreams.push_back(s);
                        ++cnt;
                }
-               if ( apid_mpeg != -1 )
+               if ( cached_apid_mpeg != -1 )
                {
                        audioStream s;
                        s.type = audioStream::atMPEG;
-                       s.pid = apid_mpeg;
+                       s.pid = cached_apid_mpeg;
                        program.audioStreams.push_back(s);
                        ++cnt;
                }
-               if ( pcrpid != -1 )
+               if ( cached_pcrpid != -1 )
                {
                        ++cnt;
-                       program.pcrPid = pcrpid;
+                       program.pcrPid = cached_pcrpid;
                }
-               if ( tpid != -1 )
+               if ( cached_tpid != -1 )
                {
                        ++cnt;
-                       program.textPid = tpid;
+                       program.textPid = cached_tpid;
                }
                CAID_LIST &caids = m_service->m_ca;
                for (CAID_LIST::iterator it(caids.begin()); it != caids.end(); ++it)
@@ -424,7 +419,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 +444,13 @@ 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);
+
+               ePtr<iDVBChannelList> db;
+               if (!m_resourceManager->getChannelList(db))
+                               db->getService((eServiceReferenceDVB&)m_reference, m_service);
+
+               if (!res)
+                       eDVBCIInterfaces::getInstance()->addPMTHandler(this);
        } else
        {
                eDVBMetaParser parser;
@@ -481,10 +482,6 @@ int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux,
                m_channel = m_pvr_channel;
        }
 
-       ePtr<iDVBChannelList> db;
-       if (!m_resourceManager->getChannelList(db))
-               db->getService((eServiceReferenceDVB&)m_reference, m_service);
-
        if (m_channel)
        {
                m_channel->connectStateChange(
@@ -500,7 +497,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 +534,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();