1 diff --git a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py
2 index 75fba2d..da5ebd4 100644
3 --- a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py
4 +++ b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py
5 @@ -7,7 +7,7 @@ from Screens.HelpMenu import HelpableScreen
6 from Screens.MessageBox import MessageBox
7 from Screens.InputBox import InputBox
8 from Screens.ChoiceBox import ChoiceBox
9 -from Screens.InfoBarGenerics import InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSupport, InfoBarNotifications, InfoBarSubtitleSupport
10 +from Screens.InfoBarGenerics import InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSupport, InfoBarNotifications, InfoBarSubtitleSupport, InfoBarPVRState
11 from Components.ActionMap import NumberActionMap, HelpableActionMap
12 from Components.Label import Label
13 from Components.Pixmap import Pixmap,MultiPixmap
14 @@ -87,7 +87,7 @@ class MediaPixmap(Pixmap):
15 self.coverArtFileName = "/tmp/.id3coverart"
16 self.picload.startDecode(self.coverArtFileName)
18 -class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSupport, InfoBarNotifications, InfoBarSubtitleSupport, HelpableScreen):
19 +class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSupport, InfoBarNotifications, InfoBarSubtitleSupport, InfoBarPVRState, HelpableScreen):
21 ENABLE_RESUME_SUPPORT = True
23 @@ -201,6 +201,10 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB
25 InfoBarSeek.__init__(self, actionmap = "MediaPlayerSeekActions")
27 + InfoBarPVRState.__init__(self)
28 + self.__hideTimer = eTimer()
29 + self.__hideTimer.callback.append(self.__hideMediaPlayerState)
31 self.onClose.append(self.delMPTimer)
32 self.onClose.append(self.__onClose)
34 @@ -234,6 +238,14 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB
35 iPlayableService.evUser+13: self["coverArt"].embeddedCoverArt
39 + self.pvrStateDialog.show()
40 + if self.seekstate == self.SEEK_STATE_PLAY and not self.shown:
41 + self.__hideTimer.start(5*1000, True)
43 + def __hideMediaPlayerState(self):
44 + self.pvrStateDialog.hide()
49 @@ -762,6 +774,7 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB
50 self.playlist.updateList()
51 if len(self.playlist) == 1:
53 + self.switchToPlayList()
55 def addPlaylistParser(self, parser, extension):
56 self.playlistparsers[extension] = parser
57 diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py
58 index 07fbac8..6ca65e3 100755
59 --- a/lib/python/Screens/InfoBarGenerics.py
60 +++ b/lib/python/Screens/InfoBarGenerics.py
61 @@ -957,14 +957,17 @@ class InfoBarSeek:
64 if seek and not (seek.isCurrentlySeekable() & 2):
65 - if not self.fast_winding_hint_message_showed and (seek.isCurrentlySeekable() & 1):
66 - 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)
67 - self.fast_winding_hint_message_showed = True
69 - return 0 # trade as unhandled action
73 +# if not self.fast_winding_hint_message_showed and (seek.isCurrentlySeekable() & 1):
74 +# 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)
75 +# self.fast_winding_hint_message_showed = True
77 +# return 0 # trade as unhandled action
78 if self.seekstate == self.SEEK_STATE_PLAY:
79 self.setSeekState(self.makeStateForward(int(config.seek.enter_forward.value)))
80 - elif self.seekstate == self.SEEK_STATE_PAUSE:
81 + elif self.seekstate == self.SEEK_STATE_PAUSE and media==0:
82 if len(config.seek.speeds_slowmotion.value):
83 self.setSeekState(self.makeStateSlowMotion(config.seek.speeds_slowmotion.value[-1]))
85 @@ -975,7 +978,11 @@ class InfoBarSeek:
86 speed = self.seekstate[1]
88 speed /= self.seekstate[2]
89 - speed = self.getHigher(speed, config.seek.speeds_forward.value) or config.seek.speeds_forward.value[-1]
90 + if media==1 and speed == 8:
92 + return 0 # trade as unhandled action
94 + speed = self.getHigher(speed, config.seek.speeds_forward.value) or config.seek.speeds_forward.value[-1]
95 self.setSeekState(self.makeStateForward(speed))
96 elif self.isStateBackward(self.seekstate):
97 speed = -self.seekstate[1]
98 @@ -993,18 +1000,27 @@ class InfoBarSeek:
100 seek = self.getSeek()
101 if seek and not (seek.isCurrentlySeekable() & 2):
102 - if not self.fast_winding_hint_message_showed and (seek.isCurrentlySeekable() & 1):
103 - 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)
107 +# if not self.fast_winding_hint_message_showed and (seek.isCurrentlySeekable() & 1):
108 +# 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)
109 +# self.fast_winding_hint_message_showed = True
111 +# return 0 # trade as unhandled action
112 + seekstate = self.seekstate
113 + if seekstate == self.SEEK_STATE_PLAY and media==0:
114 + self.setSeekState(self.makeStateBackward(int(config.seek.enter_backward.value)))
115 + elif seekstate == self.SEEK_STATE_PLAY and media ==1:
116 + if not self.fast_winding_hint_message_showed:
117 + self.session.open(MessageBox, _("No rewinding possible yet.. but you can use the number buttons to skip forward/backward!"), MessageBox.TYPE_INFO, timeout=10)
118 self.fast_winding_hint_message_showed = True
120 return 0 # trade as unhandled action
121 - seekstate = self.seekstate
122 - if seekstate == self.SEEK_STATE_PLAY:
123 - self.setSeekState(self.makeStateBackward(int(config.seek.enter_backward.value)))
124 elif seekstate == self.SEEK_STATE_EOF:
125 self.setSeekState(self.makeStateBackward(int(config.seek.enter_backward.value)))
126 self.doSeekRelative(-6)
127 - elif seekstate == self.SEEK_STATE_PAUSE:
128 + elif seekstate == self.SEEK_STATE_PAUSE and media==0:
129 self.doSeekRelative(-1)
130 elif self.isStateForward(seekstate):
132 diff --git a/lib/service/servicemp3.cpp b/lib/service/servicemp3.cpp
135 index be55d0c..7ce34c1
136 --- a/lib/service/servicemp3.cpp
137 +++ b/lib/service/servicemp3.cpp
138 @@ -235,6 +235,7 @@ eServiceMP3::eServiceMP3(eServiceReference ref)
139 CONNECT(m_pump.recv_msg, eServiceMP3::gstPoll);
140 m_aspect = m_width = m_height = m_framerate = m_progressive = -1;
144 eDebug("eServiceMP3::construct!");
146 @@ -517,6 +518,9 @@ RESULT eServiceMP3::unpause()
147 if (!m_gst_playbin || m_state != stRunning)
150 + if(m_cur_rate!=1.0)
153 gst_element_set_state(m_gst_playbin, GST_STATE_PLAYING);
156 @@ -552,7 +556,7 @@ RESULT eServiceMP3::seekToImpl(pts_t to)
158 /* convert pts to nanoseconds */
159 gint64 time_nanoseconds = to * 11111LL;
160 - if (!gst_element_seek (m_gst_playbin, 1.0, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH,
161 + if (!gst_element_seek (m_gst_playbin, m_cur_rate, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH,
162 GST_SEEK_TYPE_SET, time_nanoseconds,
163 GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE))
165 @@ -589,19 +593,23 @@ RESULT eServiceMP3::trickSeek(gdouble ratio)
167 return seekRelative(0, 0);
169 + eSingleLocker l(m_subs_to_pull_lock);
173 flags = GST_SEEK_FLAG_NONE;
174 flags |= GST_SEEK_FLAG_FLUSH;
175 // flags |= GstSeekFlags (GST_SEEK_FLAG_ACCURATE);
176 - flags |= GST_SEEK_FLAG_KEY_UNIT;
177 +// flags |= GST_SEEK_FLAG_KEY_UNIT;
178 // flags |= GstSeekFlags (GST_SEEK_FLAG_SEGMENT);
179 // flags |= GstSeekFlags (GST_SEEK_FLAG_SKIP);
181 GstFormat fmt = GST_FORMAT_TIME;
185 gst_element_query_duration(m_gst_playbin, &fmt, &len);
186 - gst_element_query_position(m_gst_playbin, &fmt, &pos);
187 + getPlayPosition(pos);
192 @@ -619,7 +627,11 @@ RESULT eServiceMP3::trickSeek(gdouble ratio)
193 eDebug("eServiceMP3::trickSeek failed");
197 + m_subtitle_pages.clear();
198 + m_prev_decoder_time = -1;
199 + m_decoder_time_valid_state = 0;
200 + m_subs_to_pull = 0;
205 diff --git a/lib/service/servicemp3.h b/lib/service/servicemp3.h
208 index f3cc6dd..07eb321
209 --- a/lib/service/servicemp3.h
210 +++ b/lib/service/servicemp3.h
211 @@ -265,6 +265,7 @@ private:
212 gint m_aspect, m_width, m_height, m_framerate, m_progressive;
213 std::string m_useragent;
214 RESULT trickSeek(gdouble ratio);