add long pat/pmt timeout on ts playback
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Wed, 1 Oct 2008 11:29:26 +0000 (11:29 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Wed, 1 Oct 2008 11:29:26 +0000 (11:29 +0000)
lib/dvb/pmt.cpp
lib/dvb/specs.h

index 4047be5..5fb1e9e 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_demux);
+                               m_PAT.begin(eApp, eDVBPATSpec(m_reference.path.empty() ? false : true), m_demux);
                        else
-                               m_PMT.begin(eApp, eDVBPMTSpec(m_pmt_pid, m_reference.getServiceID().get()), m_demux);
+                               m_PMT.begin(eApp, eDVBPMTSpec(m_pmt_pid, m_reference.getServiceID().get(), m_reference.path.empty() ? false : true), 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_demux);
+                       m_PMT.begin(eApp, eDVBPMTSpec(pmtpid, m_reference.getServiceID().get(), m_reference.path.empty() ? false : true), m_demux);
        } else
                serviceEvent(eventNoPAT);
 }
index c53a23b..514bc34 100644 (file)
@@ -14,12 +14,12 @@ struct eDVBPMTSpec
 {
        eDVBTableSpec m_spec;
 public:
-       eDVBPMTSpec(int pid, int sid)
+       eDVBPMTSpec(int pid, int sid, bool long_timeout = false)
        {
                m_spec.pid     = pid;
                m_spec.tid     = ProgramMapSection::TID;
                m_spec.tidext  = sid;
-               m_spec.timeout = 4000; // ProgramMapSection::TIMEOUT;
+               m_spec.timeout = long_timeout ? 20000 : 4000; // ProgramMapSection::TIMEOUT;
                m_spec.flags   = eDVBTableSpec::tfAnyVersion | 
                        eDVBTableSpec::tfHaveTID | eDVBTableSpec::tfHaveTIDExt | 
                        eDVBTableSpec::tfCheckCRC | eDVBTableSpec::tfHaveTimeout;
@@ -108,11 +108,11 @@ struct eDVBPATSpec
 {
        eDVBTableSpec m_spec;
 public:
-       eDVBPATSpec()
+       eDVBPATSpec(bool long_timeout=false)
        {
                m_spec.pid     = ProgramAssociationSection::PID;
                m_spec.tid     = ProgramAssociationSection::TID;
-               m_spec.timeout = 4000; // ProgramAssociationSection::TIMEOUT;
+               m_spec.timeout = long_timeout ? 20000 : 4000; // ProgramAssociationSection::TIMEOUT;
                m_spec.flags   = eDVBTableSpec::tfAnyVersion |
                        eDVBTableSpec::tfHaveTID | eDVBTableSpec::tfCheckCRC |
                        eDVBTableSpec::tfHaveTimeout;