Merge branch 'master' of /home/tmbinc/enigma2-git into tmbinc/FixTimingBugs
authorFelix Domke <tmbinc@elitedvb.net>
Mon, 16 Feb 2009 17:25:23 +0000 (18:25 +0100)
committerFelix Domke <tmbinc@elitedvb.net>
Mon, 16 Feb 2009 17:25:23 +0000 (18:25 +0100)
1  2 
lib/python/Components/Converter/StringList.py
lib/service/servicedvb.cpp

index d424d39f804028a1b052ec3869665ac8b97c282e,213f08bc2984a4b471ebdae243f7df328105b2c3..226247c4a7bac8560bac8fedf3c9b3e12878cb4a
@@@ -18,14 -18,18 +18,21 @@@ class StringList(Converter)
  
        def selectionChanged(self, index):
                self.source.selectionChanged(index)
+       def setIndex(self, index):
                # update all non-master targets
 +              print "changed selection in listbox!"
                for x in self.downstream_elements:
 +                      print "downstream element", x
                        if x is not self.master:
 +                              print "is not master, so update to index", index
                                x.index = index
  
+       def getIndex(self, index):
+               return None
+       
+       index = property(getIndex, setIndex)
        @cached
        def getCurrent(self):
                if self.source is None or self.index is None or self.index >= len(self.source.list):
index 2f91971a43931687e0e380aefedd0450065daae5,12b75f80ad3b1be1125584a3d285e74eb740215f..14c849db07d4d6610e1548304f339d142bb06abf
@@@ -506,7 -506,6 +506,7 @@@ RESULT eDVBPVRServiceOfflineOperations:
  
        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);
@@@ -525,6 -524,7 +525,7 @@@ eServiceFactoryDVB::eServiceFactoryDVB(
        {
                std::list<std::string> extensions;
                extensions.push_back("ts");
+               extensions.push_back("trp");
                sc->addServiceFactory(eServiceFactoryDVB::id, this, extensions);
        }
  
@@@ -1006,10 -1006,7 +1007,10 @@@ void eDVBServicePlay::serviceEventTimes
                break;
        case eDVBServicePMTHandler::eventEOF:
                if ((!m_is_paused) && (m_skipmode >= 0))
 +              {
 +                      eDebug("timeshift EOF, so let's go live");
                        switchToLive();
 +              }
                break;
        }
  }
@@@ -1132,9 -1129,6 +1133,9 @@@ RESULT eDVBServicePlay::pause(ePtr<iPau
  
  RESULT eDVBServicePlay::setSlowMotion(int ratio)
  {
 +      assert(ratio); /* The API changed: instead of calling setSlowMotion(0), call play! */
 +      eDebug("eDVBServicePlay::setSlowMotion(%d)", ratio);
 +      setFastForward_internal(0);
        if (m_decoder)
                return m_decoder->setSlowMotion(ratio);
        else
  }
  
  RESULT eDVBServicePlay::setFastForward(int ratio)
 +{
 +      eDebug("eDVBServicePlay::setFastForward(%d)", ratio);
 +      assert(ratio);
 +      return setFastForward_internal(ratio);
 +}
 +
 +RESULT eDVBServicePlay::setFastForward_internal(int ratio)
  {
        int skipmode, ffratio;
        
        
        if (!m_decoder)
                return -1;
 -
 -      return m_decoder->setFastForward(ffratio);
 +              
 +      if (ffratio == 0)
 +              ; /* return m_decoder->play(); is done in caller*/
 +      else if (ffratio != 1)
 +              return m_decoder->setFastForward(ffratio);
 +      else
 +              return m_decoder->setTrickmode();
  }
  
  RESULT eDVBServicePlay::seek(ePtr<iSeekableService> &ptr)
@@@ -1215,24 -1197,20 +1216,24 @@@ RESULT eDVBServicePlay::getLength(pts_
  
  RESULT eDVBServicePlay::pause()
  {
 -      if (!m_is_paused && m_decoder)
 +      eDebug("eDVBServicePlay::pause");
 +      setFastForward_internal(0);
 +      if (m_decoder)
        {
                m_is_paused = 1;
 -              return m_decoder->freeze(0);
 +              return m_decoder->pause();
        } else
                return -1;
  }
  
  RESULT eDVBServicePlay::unpause()
  {
 -      if (m_is_paused && m_decoder)
 +      eDebug("eDVBServicePlay::unpause");
 +      setFastForward_internal(0);
 +      if (m_decoder)
        {
                m_is_paused = 0;
 -              return m_decoder->unfreeze();
 +              return m_decoder->play();
        } else
                return -1;
  }
@@@ -1314,8 -1292,9 +1315,8 @@@ RESULT eDVBServicePlay::getPlayPosition
  
  RESULT eDVBServicePlay::setTrickmode(int trick)
  {
 -      if (m_decoder)
 -              m_decoder->setTrickmode(trick);
 -      return 0;
 +              /* currently unimplemented */
 +      return -1;
  }
  
  RESULT eDVBServicePlay::isCurrentlySeekable()
@@@ -1601,7 -1580,7 +1602,7 @@@ RESULT eDVBServicePlay::selectTrack(uns
  {
        int ret = selectAudioStream(i);
  
 -      if (m_decoder->start())
 +      if (m_decoder->play())
                return -5;
  
        return ret;
@@@ -2133,8 -2112,6 +2134,8 @@@ void eDVBServicePlay::switchToLive(
        if (!m_timeshift_active)
                return;
        
 +      eDebug("SwitchToLive");
 +      
        m_cue = 0;
        m_decoder = 0;
        m_decode_demux = 0;
@@@ -2176,7 -2153,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();
@@@ -2305,12 -2282,13 +2306,12 @@@ void eDVBServicePlay::updateDecoder(
  
                m_teletext_parser->start(program.textPid);
  
 -              if (!m_is_primary)
 -                      m_decoder->setTrickmode(1);
 -
 -              if (m_is_paused)
 -                      m_decoder->preroll();
 +/*            if (!m_is_primary)
 +                      m_decoder->setTrickmode();
 +              else */ if (m_is_paused)
 +                      m_decoder->pause();
                else
 -                      m_decoder->start();
 +                      m_decoder->play();
  
                if (vpid > 0 && vpid < 0x2000)
                        ;
                        m_dvb_service->setCacheEntry(eDVBService::cPCRPID, pcrpid);
                        m_dvb_service->setCacheEntry(eDVBService::cTPID, tpid);
                }
 -      }       
 +      }
        m_have_video_pid = (vpid > 0 && vpid < 0x2000);
  }