servicedvb.cpp: skip subtitles when pts difference is bigger than 20seconds
[enigma2.git] / lib / service / servicedvb.cpp
index 45a12ce29b27911263f1f6049a3a805762d8e620..a57a813b1523d6dea8a7d41a2f2aa341e474154a 100644 (file)
@@ -1223,6 +1223,7 @@ RESULT eDVBServicePlay::setFastForward_internal(int ratio)
                return m_decoder->setFastForward(ffratio);
        else
                return m_decoder->setTrickmode();
+       return 0;
 }
 
 RESULT eDVBServicePlay::seek(ePtr<iSeekableService> &ptr)
@@ -2209,6 +2210,7 @@ void eDVBServicePlay::switchToLive()
        m_new_subtitle_page_connection = 0;
        m_rds_decoder_event_connection = 0;
        m_video_event_connection = 0;
+       m_is_paused = m_skipmode = 0; /* not supported in live mode */
 
                /* free the timeshift service handler, we need the resources */
        m_service_handler_timeshift.free();
@@ -2822,17 +2824,21 @@ void eDVBServicePlay::checkSubtitleTiming()
                        m_decoder->getPTS(0, pos);
 
                eDebug("%lld %lld", pos, show_time);
-               int diff =  show_time - pos;
+               int diff = show_time - pos;
                if (diff < 0)
                {
                        eDebug("[late (%d ms)]", -diff / 90);
                        diff = 0;
                }
-//             if (diff > 900000)
-//             {
-//                     eDebug("[invalid]");
-//                     diff = 0;
-//             }
+               if (abs(diff) > 1800000)
+               {
+                       eDebug("skip [invalid]");
+                       if (type == TELETEXT)
+                               m_subtitle_pages.pop_front();
+                       else
+                               m_dvb_subtitle_pages.pop_front();
+                       continue;
+               }
        
                if ((diff/90)<20)
                {