don't add any source span if no cutlist defined, because we don't have an 'infinite...
[enigma2.git] / lib / service / servicedvb.cpp
index 14c849db07d4d6610e1548304f339d142bb06abf..44a22ea9265dd8249968d61b8f5e1987f03cf177 100644 (file)
@@ -1133,7 +1133,7 @@ RESULT eDVBServicePlay::pause(ePtr<iPauseableService> &ptr)
 
 RESULT eDVBServicePlay::setSlowMotion(int ratio)
 {
-       assert(ratio); /* The API changed: instead of calling setSlowMotion(0), call play! */
+       ASSERT(ratio); /* The API changed: instead of calling setSlowMotion(0), call play! */
        eDebug("eDVBServicePlay::setSlowMotion(%d)", ratio);
        setFastForward_internal(0);
        if (m_decoder)
@@ -1145,7 +1145,7 @@ RESULT eDVBServicePlay::setSlowMotion(int ratio)
 RESULT eDVBServicePlay::setFastForward(int ratio)
 {
        eDebug("eDVBServicePlay::setFastForward(%d)", ratio);
-       assert(ratio);
+       ASSERT(ratio);
        return setFastForward_internal(ratio);
 }
 
@@ -1184,7 +1184,7 @@ RESULT eDVBServicePlay::setFastForward_internal(int ratio)
                return -1;
                
        if (ffratio == 0)
-               ; /* return m_decoder->play(); is done in caller*/
+               return 0; /* return m_decoder->play(); is done in caller*/
        else if (ffratio != 1)
                return m_decoder->setFastForward(ffratio);
        else
@@ -1684,6 +1684,8 @@ int eDVBServicePlay::selectAudioStream(int i)
                eDebug("set audio pid failed");
                return -4;
        }
+       
+       m_decoder->set();
 
                /* if we are not in PVR mode, timeshift is not active and we are not in pip mode, check if we need to enable the rds reader */
        if (!(m_is_pvr || m_timeshift_active || !m_is_primary))
@@ -2291,8 +2293,18 @@ void eDVBServicePlay::updateDecoder()
                                }
                        }
                }
-               m_decoder->setAC3Delay(ac3_delay == -1 ? 0 : ac3_delay);
-               m_decoder->setPCMDelay(pcm_delay == -1 ? 0 : pcm_delay);
+
+               std::string config_delay;
+               int config_delay_int = 0;
+               if(ePythonConfigQuery::getConfigValue("config.av.generalAC3delay", config_delay) == 0)
+                       config_delay_int = atoi(config_delay.c_str());
+               m_decoder->setAC3Delay(ac3_delay == -1 ? config_delay_int : ac3_delay + config_delay_int);
+
+               if(ePythonConfigQuery::getConfigValue("config.av.generalPCMdelay", config_delay) == 0)
+                       config_delay_int = atoi(config_delay.c_str());
+               else
+                       config_delay_int = 0;
+               m_decoder->setPCMDelay(pcm_delay == -1 ? config_delay_int : pcm_delay + config_delay_int);
 
                m_decoder->setVideoPID(vpid, vpidtype);
                selectAudioStream();
@@ -2306,13 +2318,6 @@ void eDVBServicePlay::updateDecoder()
 
                m_teletext_parser->start(program.textPid);
 
-/*             if (!m_is_primary)
-                       m_decoder->setTrickmode();
-               else */ if (m_is_paused)
-                       m_decoder->pause();
-               else
-                       m_decoder->play();
-
                if (vpid > 0 && vpid < 0x2000)
                        ;
                else
@@ -2322,6 +2327,13 @@ void eDVBServicePlay::updateDecoder()
                                m_decoder->setRadioPic(radio_pic);
                }
 
+/*             if (!m_is_primary)
+                       m_decoder->setTrickmode();
+               else */ if (m_is_paused)
+                       m_decoder->pause();
+               else
+                       m_decoder->play();
+
                m_decoder->setAudioChannel(achannel);
 
                /* don't worry about non-existing services, nor pvr services */
@@ -2429,11 +2441,16 @@ void eDVBServicePlay::cutlistToCuesheet()
                
        std::multiset<cueEntry>::iterator i(m_cue_entries.begin());
        
+       int have_any_span = 0;
+       
        while (1)
        {
                if (i == m_cue_entries.end())
+               {
+                       if (!have_any_span)
+                               break;
                        out = length;
-               else {
+               else {
                        if (i->what == 0) /* in */
                        {
                                in = i++->where;
@@ -2457,7 +2474,10 @@ void eDVBServicePlay::cutlistToCuesheet()
                        out = length;
                
                if (in < out)
+               {
+                       have_any_span = 1;
                        m_cue->addSourceSpan(in, out);
+               }
                
                in = length;