Revert "fix audio pid set"
[enigma2.git] / lib / service / servicedvb.cpp
index 33cd865e9ea7c648893a6f37fa9a6e20a802b65a..4b762b9933b014f93455e5c1c1cae96cc98d4b63 100644 (file)
@@ -370,13 +370,17 @@ int eStaticServiceDVBPVRInformation::getLength(const eServiceReference &ref)
        struct stat s;
        stat(ref.path.c_str(), &s);
 
-       if (tstools.openFile(ref.path.c_str()))
+       if (tstools.openFile(ref.path.c_str(), 1))
                return 0;
 
                        /* check if cached data is still valid */
        if (m_parser.m_data_ok && (s.st_size == m_parser.m_filesize) && (m_parser.m_length))
                return m_parser.m_length / 90000;
 
+                       /* open again, this time with stream info */
+       if (tstools.openFile(ref.path.c_str()))
+               return 0;
+
                        /* otherwise, re-calc length and update meta file */
        pts_t len;
        if (tstools.calcLen(len))
@@ -502,6 +506,7 @@ RESULT eDVBPVRServiceOfflineOperations::getListOfFilenames(std::list<std::string
 
        res.push_back(m_ref.path + ".meta");
        res.push_back(m_ref.path + ".ap");
+       res.push_back(m_ref.path + ".sc");
        res.push_back(m_ref.path + ".cuts");
        std::string tmp = m_ref.path;
        tmp.erase(m_ref.path.length()-3);
@@ -520,6 +525,7 @@ eServiceFactoryDVB::eServiceFactoryDVB()
        {
                std::list<std::string> extensions;
                extensions.push_back("ts");
+               extensions.push_back("trp");
                sc->addServiceFactory(eServiceFactoryDVB::id, this, extensions);
        }
 
@@ -1001,7 +1007,10 @@ void eDVBServicePlay::serviceEventTimeshift(int event)
                break;
        case eDVBServicePMTHandler::eventEOF:
                if ((!m_is_paused) && (m_skipmode >= 0))
+               {
+                       eDebug("timeshift EOF, so let's go live");
                        switchToLive();
+               }
                break;
        }
 }
@@ -1124,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)
@@ -1136,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);
 }
 
@@ -1173,9 +1182,9 @@ RESULT eDVBServicePlay::setFastForward_internal(int ratio)
        
        if (!m_decoder)
                return -1;
-
+               
        if (ffratio == 0)
-               return 0;
+               ; /* return m_decoder->play(); is done in caller*/
        else if (ffratio != 1)
                return m_decoder->setFastForward(ffratio);
        else
@@ -1211,6 +1220,7 @@ RESULT eDVBServicePlay::pause()
        setFastForward_internal(0);
        if (m_decoder)
        {
+               m_is_paused = 1;
                return m_decoder->pause();
        } else
                return -1;
@@ -1222,6 +1232,7 @@ RESULT eDVBServicePlay::unpause()
        setFastForward_internal(0);
        if (m_decoder)
        {
+               m_is_paused = 0;
                return m_decoder->play();
        } else
                return -1;
@@ -1867,20 +1878,7 @@ PyObject *eDVBServiceBase::getTransponderData(bool original)
                {
                        ePtr<iDVBFrontend> fe;
                        if(!channel->getFrontend(fe))
-                       {
                                fe->getTransponderData(ret, original);
-                               ePtr<iDVBFrontendParameters> feparm;
-                               channel->getCurrentFrontendParameters(feparm);
-                               if (feparm)
-                               {
-                                       eDVBFrontendParametersSatellite osat;
-                                       if (!feparm->getDVBS(osat))
-                                       {
-                                               PutToDict(ret, "orbital_position", osat.orbital_position);
-                                               PutToDict(ret, "polarization", osat.polarisation);
-                                       }
-                               }
-                       }
                }
        }
        else
@@ -2136,6 +2134,8 @@ void eDVBServicePlay::switchToLive()
        if (!m_timeshift_active)
                return;
        
+       eDebug("SwitchToLive");
+       
        m_cue = 0;
        m_decoder = 0;
        m_decode_demux = 0;
@@ -2177,7 +2177,7 @@ void eDVBServicePlay::switchToTimeshift()
        r.path = m_timeshift_file;
 
        m_cue = new eCueSheet();
-       m_service_handler_timeshift.tune(r, 1, m_cue); /* use the decoder demux for everything */
+       m_service_handler_timeshift.tune(r, 1, m_cue, 0, m_dvb_service); /* use the decoder demux for everything */
 
        eDebug("eDVBServicePlay::switchToTimeshift, in pause mode now.");
        pause();
@@ -2291,8 +2291,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,14 +2316,6 @@ void eDVBServicePlay::updateDecoder()
 
                m_teletext_parser->start(program.textPid);
 
-               if (!m_is_primary)
-                       m_decoder->setTrickmode();
-
-               if (m_is_paused)
-                       m_decoder->pause();
-               else
-                       m_decoder->play();
-
                if (vpid > 0 && vpid < 0x2000)
                        ;
                else
@@ -2323,6 +2325,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 */
@@ -2334,7 +2343,7 @@ void eDVBServicePlay::updateDecoder()
                        m_dvb_service->setCacheEntry(eDVBService::cPCRPID, pcrpid);
                        m_dvb_service->setCacheEntry(eDVBService::cTPID, tpid);
                }
-       }       
+       }
        m_have_video_pid = (vpid > 0 && vpid < 0x2000);
 }