disable fast winding for non TS mediafiles until we have a usable solution for this..
authorghost <andreas.monzner@multimedia-labs.de>
Thu, 5 Nov 2009 10:37:29 +0000 (11:37 +0100)
committerghost <andreas.monzner@multimedia-labs.de>
Thu, 5 Nov 2009 10:37:29 +0000 (11:37 +0100)
lib/python/Plugins/Extensions/DVDPlayer/src/servicedvd.cpp
lib/python/Screens/InfoBarGenerics.py
lib/service/servicedvb.cpp
lib/service/servicemp3.cpp
lib/service/servicexine.cpp

index 94f2ee38ad0ed7cff675b9f2b8d8f5631ba40f41..0372c49719edaf6d223af83fc119e32525535095 100644 (file)
@@ -696,7 +696,7 @@ RESULT eServiceDVD::setTrickmode(int /*trick*/)
 
 RESULT eServiceDVD::isCurrentlySeekable()
 {
-       return m_state == stRunning;
+       return m_state == stRunning ? 3 : 0;
 }
 
 RESULT eServiceDVD::keyPressed(int key)
index 2cbfeb733819faceecff80e23feecbe0982297a9..96fcf802d1a0a2cc97715b33fd3544f756b16f71 100644 (file)
@@ -690,6 +690,7 @@ class InfoBarSeek:
                                iPlayableService.evEOF: self.__evEOF,
                                iPlayableService.evSOF: self.__evSOF,
                        })
+               self.fast_winding_hint_message_showed = False
 
                self.minSpeedBackward = useSeekBackHack and 16 or 0
 
@@ -823,6 +824,7 @@ class InfoBarSeek:
 #                      print "seekable"
 
        def __serviceStarted(self):
+               self.fast_winding_hint_message_showed = False
                self.seekstate = self.SEEK_STATE_PLAY
                self.__seekableStatusChanged()
 
@@ -913,6 +915,12 @@ class InfoBarSeek:
                        self.showAfterSeek()
 
        def seekFwd(self):
+               seek = self.getSeek()
+               if seek and (seek.isCurrentlySeekable() & 1) and not (seek.isCurrentlySeekable() & 2):
+                       if not self.fast_winding_hint_message_showed:
+                               self.session.open(MessageBox, _("No fast winding possible yet.. but you can use the number buttons to skip forward/backward!"), MessageBox.TYPE_INFO, timeout=10)
+                               self.fast_winding_hint_message_showed = True
+                       return
                if self.seekstate == self.SEEK_STATE_PLAY:
                        self.setSeekState(self.makeStateForward(int(config.seek.enter_forward.value)))
                elif self.seekstate == self.SEEK_STATE_PAUSE:
@@ -942,6 +950,12 @@ class InfoBarSeek:
                        self.setSeekState(self.makeStateSlowMotion(speed))
 
        def seekBack(self):
+               seek = self.getSeek()
+               if seek and (seek.isCurrentlySeekable() & 1) and not (seek.isCurrentlySeekable() & 2):
+                       if not self.fast_winding_hint_message_showed:
+                               self.session.open(MessageBox, _("No fast winding possible yet.. but you can use the number buttons to skip forward/backward!"), MessageBox.TYPE_INFO, timeout=10)
+                               self.fast_winding_hint_message_showed = True
+                       return
                seekstate = self.seekstate
                if seekstate == self.SEEK_STATE_PLAY:
                        self.setSeekState(self.makeStateBackward(int(config.seek.enter_backward.value)))
index 1a28fbdd17907d2dda1a43403d85abef3df4db58..ddc675e66bbf150ad58af62d0fee750f2208c109 100644 (file)
@@ -1370,7 +1370,7 @@ RESULT eDVBServicePlay::setTrickmode(int trick)
 
 RESULT eDVBServicePlay::isCurrentlySeekable()
 {
-       return m_is_pvr || m_timeshift_active;
+       return m_is_pvr || m_timeshift_active ? 3 : 0; // fast forward/backward possible and seeking possible
 }
 
 RESULT eDVBServicePlay::frontendInfo(ePtr<iFrontendInformation> &ptr)
index 34d09363b4be1d1be31b7568cec27a71b88467fb..e684e393c7c97870f43bc507f3f74e65a13ac5f3 100644 (file)
@@ -635,7 +635,31 @@ RESULT eServiceMP3::setTrickmode(int trick)
 
 RESULT eServiceMP3::isCurrentlySeekable()
 {
-       return 1;
+       int ret = 3; // seeking and fast/slow winding possible
+       GstElement *sink;
+
+       if (!m_gst_playbin)
+               return 0;
+       if (m_state != stRunning)
+               return 0;
+
+       g_object_get (G_OBJECT (m_gst_playbin), "video-sink", &sink, NULL);
+
+       // disable fast winding yet when a dvbvideosink or dvbaudiosink is used
+       // for this we must do some changes on different places.. (gstreamer.. our sinks.. enigma2)
+       if (sink) {
+               ret &= ~2; // only seeking possible
+               gst_object_unref(sink);
+       }
+       else {
+               g_object_get (G_OBJECT (m_gst_playbin), "audio-sink", &sink, NULL);
+               if (sink) {
+                       ret &= ~2; // only seeking possible
+                       gst_object_unref(sink);
+               }
+       }
+
+       return ret;
 }
 
 RESULT eServiceMP3::info(ePtr<iServiceInformation>&i)
index 44e6a6e0ec6d96364435eb2844532955768351b6..6b9adfb9d1caa98eefcd6881fb25ad88581dd8c8 100644 (file)
@@ -315,7 +315,7 @@ RESULT eServiceXine::setTrickmode(int trick)
 
 RESULT eServiceXine::isCurrentlySeekable()
 {
-       return 1;
+       return 3;
 }
 
 RESULT eServiceXine::info(ePtr<iServiceInformation>&i)