dont do SDT update when tuned to wrong transponder
authorghost <andreas.monzner@multimedia-labs.de>
Mon, 3 Nov 2008 20:05:52 +0000 (21:05 +0100)
committerAndreas Oberritter <obi@saftware.de>
Thu, 6 Nov 2008 00:52:05 +0000 (01:52 +0100)
lib/dvb/pmt.cpp
lib/dvb/scan.h

index 6082bf4..692428d 100644 (file)
@@ -524,8 +524,15 @@ void eDVBServicePMTHandler::SDTScanEvent(int event)
                                eDebug("no channel list");
                        else
                        {
                                eDebug("no channel list");
                        else
                        {
-                               m_dvb_scan->insertInto(db, true);
-                               eDebug("sdt update done!");
+                               eDVBChannelID chid;
+                               m_reference.getChannelID(chid);
+                               if (chid == m_dvb_scan->getCurrentChannelID())
+                               {
+                                       m_dvb_scan->insertInto(db, true);
+                                       eDebug("sdt update done!");
+                               }
+                               else
+                                       eDebug("ignore sdt update data.... incorrect transponder tuned!!!");
                        }
                        break;
                }
                        }
                        break;
                }
@@ -605,6 +612,7 @@ int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux,
 
                        if (ref.path.empty())
                        {
 
                        if (ref.path.empty())
                        {
+                               m_dvb_scan = 0;
                                m_dvb_scan = new eDVBScan(m_channel, true, false);
                                m_dvb_scan->connectEvent(slot(*this, &eDVBServicePMTHandler::SDTScanEvent), m_scan_event_connection);
                        }
                                m_dvb_scan = new eDVBScan(m_channel, true, false);
                                m_dvb_scan->connectEvent(slot(*this, &eDVBServicePMTHandler::SDTScanEvent), m_scan_event_connection);
                        }
index 95e3fb3..38ac784 100644 (file)
@@ -110,6 +110,7 @@ public:
        void getLastServiceName(std::string &name);
        RESULT getFrontend(ePtr<iDVBFrontend> &);
        RESULT getCurrentTransponder(ePtr<iDVBFrontendParameters> &);
        void getLastServiceName(std::string &name);
        RESULT getFrontend(ePtr<iDVBFrontend> &);
        RESULT getCurrentTransponder(ePtr<iDVBFrontendParameters> &);
+       eDVBChannelID getCurrentChannelID() { return m_chid_current; }
 };
 
 #endif
 };
 
 #endif