Revert "check sid and tsid before start automatic service update (STD update)"
[enigma2.git] / lib / dvb / pmt.cpp
index 940d2e7dc325fffcc35fd35b78c8d5617c18a1f4..6082bf4ad43c48d8373c2f1d4e884699d195ac88 100644 (file)
@@ -50,9 +50,9 @@ void eDVBServicePMTHandler::channelStateChanged(iDVBChannel *channel)
                        eDebug("ok ... now we start!!");
 
                        if (m_pmt_pid == -1)
-                               m_PAT.begin(eApp, eDVBPATSpec(m_reference.path.empty() ? false : true), m_demux);
+                               m_PAT.begin(eApp, eDVBPATSpec(), m_demux);
                        else
-                               m_PMT.begin(eApp, eDVBPMTSpec(m_pmt_pid, m_reference.getServiceID().get(), m_reference.path.empty() ? false : true), m_demux);
+                               m_PMT.begin(eApp, eDVBPMTSpec(m_pmt_pid, m_reference.getServiceID().get()), m_demux);
 
                        if ( m_service && !m_service->cacheEmpty() )
                                serviceEvent(eventNewProgramInfo);
@@ -135,7 +135,7 @@ void eDVBServicePMTHandler::PATready(int)
                if (pmtpid == -1)
                        serviceEvent(eventNoPATEntry);
                else
-                       m_PMT.begin(eApp, eDVBPMTSpec(pmtpid, m_reference.getServiceID().get(), m_reference.path.empty() ? false : true), m_demux);
+                       m_PMT.begin(eApp, eDVBPMTSpec(pmtpid, m_reference.getServiceID().get()), m_demux);
        } else
                serviceEvent(eventNoPAT);
 }
@@ -251,11 +251,22 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
                                                                        for (SubtitlingConstIterator it(list->begin()); it != list->end(); ++it)
                                                                        {
                                                                                s.subtitling_type = (*it)->getSubtitlingType();
+                                                                               switch(s.subtitling_type)
+                                                                               {
+                                                                               case 0x10 ... 0x13:
+                                                                               case 0x20 ... 0x23: // dvb subtitles
+                                                                                       break;
+                                                                               default:
+                                                                                       eDebug("dvb subtitle %s PID %04x with wrong subtitling type (%02x)... force 0x10!!",
+                                                                                               s.language_code.c_str(), s.pid, s.subtitling_type);
+                                                                                       s.subtitling_type = 0x10;
+                                                                                       break;
+                                                                               }
                                                                                s.composition_page_id = (*it)->getCompositionPageId();
                                                                                s.ancillary_page_id = (*it)->getAncillaryPageId();
                                                                                s.language_code = (*it)->getIso639LanguageCode();
-       //                                                                      eDebug("add dvb subtitle %s PID %04x, type %d, composition page %d, ancillary_page %d",
-       //                                                                              s.language_code.c_str(), s.pid, s.subtitling_type, s.composition_page_id, s.ancillary_page_id);
+//                                                                             eDebug("add dvb subtitle %s PID %04x, type %d, composition page %d, ancillary_page %d",
+//                                                                                     s.language_code.c_str(), s.pid, s.subtitling_type, s.composition_page_id, s.ancillary_page_id);
                                                                                program.subtitleStreams.push_back(s);
                                                                        }
                                                                        break;
@@ -594,7 +605,6 @@ int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux,
 
                        if (ref.path.empty())
                        {
-                               delete m_dvb_scan;
                                m_dvb_scan = new eDVBScan(m_channel, true, false);
                                m_dvb_scan->connectEvent(slot(*this, &eDVBServicePMTHandler::SDTScanEvent), m_scan_event_connection);
                        }
@@ -620,7 +630,6 @@ int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux,
 void eDVBServicePMTHandler::free()
 {
        m_dvb_scan = 0;
-       delete m_dvb_scan;
 
        if (m_ca_servicePtr)
        {
@@ -660,10 +669,10 @@ ChannelMap eDVBCAService::exist_channels;
 ePtr<eConnection> eDVBCAService::m_chanAddedConn;
 
 eDVBCAService::eDVBCAService()
-       :m_sn(0), m_prev_build_hash(0), m_sendstate(0), m_retryTimer(eApp)
+       : m_prev_build_hash(0), m_sendstate(0), m_retryTimer(eTimer::create(eApp))
 {
        memset(m_used_demux, 0xFF, sizeof(m_used_demux));
-       CONNECT(m_retryTimer.timeout, eDVBCAService::sendCAPMT);
+       CONNECT(m_retryTimer->timeout, eDVBCAService::sendCAPMT);
        Connect();
 }
 
@@ -671,7 +680,6 @@ eDVBCAService::~eDVBCAService()
 {
        eDebug("[eDVBCAService] free service %s", m_service.toString().c_str());
        ::close(m_sock);
-       delete m_sn;
 }
 
 // begin static methods
@@ -865,10 +873,7 @@ void eDVBCAService::socketCB(int what)
 
 void eDVBCAService::Connect()
 {
-       if (m_sn) {
-               delete m_sn;
-               m_sn=0;
-       }
+       m_sn=0;
        memset(&m_servaddr, 0, sizeof(struct sockaddr_un));
        m_servaddr.sun_family = AF_UNIX;
        strcpy(m_servaddr.sun_path, "/tmp/camd.socket");
@@ -881,7 +886,7 @@ void eDVBCAService::Connect()
                        int val=1;
                        fcntl(m_sock, F_SETFL, O_NONBLOCK);
                        setsockopt(m_sock, SOL_SOCKET, SO_REUSEADDR, &val, 4);
-                       m_sn = new eSocketNotifier(eApp, m_sock,
+                       m_sn = eSocketNotifier::create(eApp, m_sock,
                                eSocketNotifier::Read|eSocketNotifier::Priority|eSocketNotifier::Error|eSocketNotifier::Hungup);
                        CONNECT(m_sn->activated, eDVBCAService::socketCB);
                        
@@ -1033,11 +1038,11 @@ void eDVBCAService::sendCAPMT()
                {
                        case 0xFFFFFFFF:
                                ++m_sendstate;
-                               m_retryTimer.start(0,true);
+                               m_retryTimer->start(0,true);
 //                             eDebug("[eDVBCAService] send failed .. immediate retry");
                                break;
                        default:
-                               m_retryTimer.start(5000,true);
+                               m_retryTimer->start(5000,true);
 //                             eDebug("[eDVBCAService] send failed .. retry in 5 sec");
                                break;
                }