, m_webkitVideoSink(0)
#if ENABLE(TIZEN_GSTREAMER_VIDEO)
, m_videoSinkBin(0)
+ , m_suspended(false)
#endif
, m_fpsSink(0)
, m_source(0)
if (m_seeking)
return m_seekTime;
+#if ENABLE(TIZEN_GSTREAMER_VIDEO)
+ if(m_suspended)
+ return m_suspendTime;
+#endif
// Workaround for
// https://bugzilla.gnome.org/show_bug.cgi?id=639941 In GStreamer
// 0.10.35 basesink reports wrong duration in case of EOS and
#if ENABLE(TIZEN_DLOG_SUPPORT)
TIZEN_LOGI("Seek attempt to %f secs", time);
#endif
-
+#if ENABLE(TIZEN_GSTREAMER_VIDEO)
+ GstState state;
+ GstState pending;
+ gst_element_get_state(m_playBin.get(), &state, &pending, 0);
+ m_suspendTime = time;
+ if (state < GST_STATE_PAUSED) {
+ m_seekTime = time;
+ if (pending < GST_STATE_PAUSED)
+ gst_element_set_state(m_playBin.get(), GST_STATE_PAUSED);
+ return;
+ }
+ // Avoid useless seeking.
+ if (time == currentTime() && !m_suspended)
+#else
// Avoid useless seeking.
if (time == currentTime())
+#endif
return;
// Extract the integer part of the time (seconds) and the
GstState state;
gst_element_get_state(m_playBin.get(), &state, 0, 0);
+#if ENABLE(TIZEN_GSTREAMER_VIDEO)
+ return state != GST_STATE_PLAYING;
+#else
return state == GST_STATE_PAUSED;
+#endif
}
bool MediaPlayerPrivateGStreamer::seeking() const
LOG_MEDIA_MESSAGE("End of Stream");
didEnd();
break;
+#if ENABLE(TIZEN_GSTREAMER_VIDEO)
+ case GST_MESSAGE_ASYNC_DONE:
+ if (!isLocalMediaStream())
+ updateStates();
+ break;
+#endif
case GST_MESSAGE_STATE_CHANGED:
// Ignore state changes if load is delayed (preload=none). The
// player state will be updated once commitLoad() is called.
#if ENABLE(TIZEN_GSTREAMER_VIDEO)
HTMLMediaElement* element = static_cast<HTMLMediaElement*>(player()->mediaPlayerClient());
- if (element->suspended() && newState == GST_STATE_PAUSED) {
- if (m_suspendTime > 0 && !(isLocalMediaStream() || m_isEndReached))
+ if (element->suspended() && newState >= GST_STATE_PAUSED && oldState < GST_STATE_PAUSED) {
+ if (!isLocalMediaStream())
seek(m_suspendTime);
m_suspendTime = 0;
+ m_suspended = false;
m_player->mediaPlayerClient()->setSuspended(false);
}
#endif
GstState state;
GstState pending;
+#if ENABLE(TIZEN_GSTREAMER_VIDEO)
+ HTMLMediaElement* element = static_cast<HTMLMediaElement*>(player()->mediaPlayerClient());
+ if (element->suspended()) {
+ return;
+ }
+#endif
+
GstStateChangeReturn ret = gst_element_get_state(m_playBin.get(),
&state, &pending, 250 * GST_NSECOND);
void MediaPlayerPrivateGStreamer::suspend()
{
m_suspendTime = currentTime();
+ m_suspended = true;
gst_element_set_state(m_playBin.get(), GST_STATE_NULL);
#if ENABLE(TIZEN_GSTREAMER_AUDIO)
if (m_audioSessionManager)