Add deferred state and pipeline ready flag. 63/9863/2
authorJaska Uimonen <jaska.uimonen@helsinki.fi>
Mon, 2 Sep 2013 08:16:42 +0000 (11:16 +0300)
committerJoone Hur <joone.hur@intel.com>
Fri, 20 Sep 2013 14:40:22 +0000 (07:40 -0700)
Since both ASM and Murphy policy integration
might cause asynchronous behavior make sure
that play or pause are not forced on incomplete
pipeline by media element autostart or similar
mechanism.

Change-Id: I1dae86ed3eea325928ae70e06987ad8c70d637d5

Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h

index d26c4d1..eb0db52 100755 (executable)
@@ -600,6 +600,14 @@ void MediaPlayerPrivateGStreamer::play()
     if (m_audioSessionManager && !m_audioSessionManager->setSoundState(ASM_STATE_PLAYING))
         return;
 #endif
+
+    if (m_playBinReady == false) {
+        m_playerDeferredState = 1; // play
+        return;
+    }
+
+    m_playerDeferredState = -1; // ignore
+
     if (changePipelineState(GST_STATE_PLAYING)) {
         m_isEndReached = false;
         LOG_MEDIA_MESSAGE("Play");
@@ -612,6 +620,14 @@ void MediaPlayerPrivateGStreamer::pause()
     if (m_audioSessionManager && !m_audioSessionManager->setSoundState(ASM_STATE_PAUSE))
         return;
 #endif
+
+    if (m_playBinReady == false) {
+        m_playerDeferredState = 0; // pause
+        return;
+    }
+
+    m_playerDeferredState = -1; // ignore
+
     if (m_isEndReached)
         return;
 
@@ -2246,6 +2262,9 @@ void MediaPlayerPrivateGStreamer::createGSTPlayBin()
 {
     ASSERT(!m_playBin);
 
+    m_playerDeferredState = -1; // ignore
+    m_playBinReady = false;
+
     // gst_element_factory_make() returns a floating reference so
     // we should not adopt.
     m_playBin = gst_element_factory_make(gPlaybinName, "play");
@@ -2330,6 +2349,15 @@ void MediaPlayerPrivateGStreamer::createGSTPlayBin()
 #else
     createAudioSink();
 #endif
+
+    m_playBinReady = true;
+
+    if (m_playerDeferredState == 1)
+        play();
+    else if (m_playerDeferredState == 0)
+        pause();
+
+    m_playerDeferredState = -1;
 }
 
 #if ENABLE(TIZEN_ACCELERATED_COMPOSITING) && USE(TIZEN_TEXTURE_MAPPER)
index cca7d22..61a7897 100644 (file)
@@ -263,6 +263,9 @@ class MediaPlayerPrivateGStreamer : public MediaPlayerPrivateInterface
 #if ENABLE(TIZEN_GSTREAMER_VIDEO)
             float m_suspendTime;
 #endif
+
+            bool m_playBinReady;
+            guint m_playerDeferredState;
     };
 }