changing media role to browser and moving resource allocation before building the... 37/3337/1
authorJaska Uimonen <jaska.uimonen@helsinki.fi>
Tue, 16 Apr 2013 09:42:57 +0000 (12:42 +0300)
committerJaska Uimonen <jaska.uimonen@helsinki.fi>
Tue, 16 Apr 2013 12:27:19 +0000 (15:27 +0300)
Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp
Source/WebCore/platform/audio/gstreamer/AudioSessionManagerGStreamerTizen.cpp
Source/WebCore/platform/audio/gstreamer/AudioSessionManagerGStreamerTizen.h
Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h

index 908e52b..c2b2706 100755 (executable)
@@ -177,7 +177,7 @@ void AudioDestinationGStreamer::finishBuildingPipelineAfterWavParserPadReady(Gst
         return;
     }
 
-    props = gst_structure_from_string("props,resource.set.id=pid,media.role=music", NULL);
+    props = gst_structure_from_string("props,resource.set.id=pid,media.role=browser", NULL);
     g_object_set(audioSink.get(), "stream-properties", props, NULL);
     gst_structure_free(props);
 
index a787f41..70ac0f8 100644 (file)
@@ -115,4 +115,10 @@ ASM_sound_events_t AudioSessionManagerGStreamerTizen::interpretSessionToEvent(MM
         return ASM_EVENT_NONE;
     }
 }
+
+int AudioSessionManagerGStreamerTizen::getAsmHandle()
+{
+   return m_handle;
+}
+
 #endif
index 073dbc8..0e5d738 100644 (file)
@@ -56,6 +56,7 @@ public:
     int getSoundState(ASM_sound_states_t*);
     bool setSoundState(ASM_sound_states_t);
     ASM_sound_events_t interpretSessionToEvent(MMSessionType);
+    int getAsmHandle();
 
 private:
     AudioSessionManagerGStreamerTizen();
index ccf63be..7df1ec3 100755 (executable)
@@ -243,6 +243,7 @@ static ASM_cb_result_t MediaPlayerAudioSessionEventSourcePause(ASM_event_sources
     case ASM_EVENT_SOURCE_OTHER_PLAYER_APP:
     case ASM_EVENT_SOURCE_RESOURCE_CONFLICT:
         player->pause();
+
         return ASM_CB_RES_PAUSE;
     default:
         return ASM_CB_RES_NONE;
@@ -527,6 +528,11 @@ void MediaPlayerPrivateGStreamer::play()
 #if ENABLE(TIZEN_GSTREAMER_AUDIO)
     if (m_audioSessionManager && !m_audioSessionManager->setSoundState(ASM_STATE_PLAYING))
         return;
+
+    if (m_playBin == NULL) {
+        m_player_deferred_state = 1; // play
+        return;
+    }
 #endif
     if (changePipelineState(GST_STATE_PLAYING)) {
         m_isEndReached = false;
@@ -539,6 +545,11 @@ void MediaPlayerPrivateGStreamer::pause()
 #if ENABLE(TIZEN_GSTREAMER_AUDIO)
     if (m_audioSessionManager && !m_audioSessionManager->setSoundState(ASM_STATE_PAUSE))
         return;
+
+    if (m_playBin == NULL) {
+        m_player_deferred_state = 0; // pause
+        return;
+    }
 #endif
     if (m_isEndReached)
         return;
@@ -1908,7 +1919,7 @@ void MediaPlayerPrivateGStreamer::setPreload(MediaPlayer::Preload preload)
 
 const char * MediaPlayerPrivateGStreamer::mediaClass() const
 {
-    static const gchar *default_media_class = "music";
+    static const gchar *default_media_class = "browser";
 
     return default_media_class;
 }
@@ -1917,22 +1928,45 @@ void MediaPlayerPrivateGStreamer::createGSTPlayBin()
 {
     ASSERT(!m_playBin);
     const gchar *media_class = mediaClass();
+    int asm_handle = 0;
+
+#if ENABLE(TIZEN_GSTREAMER_AUDIO)
+    if (m_audioSessionManager) {
+        m_playBin = NULL;
+       m_player_deferred_state = -1; // ignore
+        m_audioSessionManager->registerAudioSessionManager(MM_SESSION_TYPE_SHARE, mediaPlayerPrivateAudioSessionNotifyCallback, player());
+       asm_handle = m_audioSessionManager->getAsmHandle();
+    }
+#endif
 
     m_playBin = gst_element_factory_make(gPlaybinName, "play");
 
     GstElement *sink = gst_element_factory_make("pulsesink", "audio-sink");
     if (sink != NULL) {
         GstStructure *props;
-        gchar prop_str[256] = "props,resource.set.id=pid,media.role=";
+       FILE *f;
+       guint32 ids[256];
+       guint32 rsetid = 0;
+       gchar *fnam_str = g_strdup_printf("/tmp/murphy/mapping-file-%d", getpid());
+
+       if ((f = fopen(fnam_str, "r"))) {
+         if (fread((void *)ids, sizeof(guint32), 256, f) == 256)
+             rsetid = ids[(asm_handle & 0xff)];
+
+         fclose(f);
+       }
 
-        strncat(prop_str, media_class, sizeof(prop_str));
-       prop_str[sizeof(prop_str)-1] = 0;
+       g_free(fnam_str);
+
+       gchar *prop_str = g_strdup_printf("props,resource.set.id=(string)%u,media.role=%s", rsetid, media_class);
 
         props = gst_structure_from_string(prop_str, NULL);
         g_object_set(sink, "stream-properties", props, NULL);
         gst_structure_free(props);
 
         g_object_set(m_playBin, "audio-sink", sink, NULL);
+
+       g_free(prop_str);
     }
 
 #ifndef GST_API_VERSION_1
@@ -2065,8 +2099,10 @@ void MediaPlayerPrivateGStreamer::createGSTPlayBin()
         g_signal_connect(videoSinkPad.get(), "notify::caps", G_CALLBACK(mediaPlayerPrivateVideoSinkCapsChangedCallback), this);
 
 #if ENABLE(TIZEN_GSTREAMER_AUDIO)
-    if (m_audioSessionManager)
-        m_audioSessionManager->registerAudioSessionManager(MM_SESSION_TYPE_SHARE, mediaPlayerPrivateAudioSessionNotifyCallback, player());
+    if (m_player_deferred_state == 1)
+        play();
+    else if (m_player_deferred_state == 0)
+        pause();
 #endif
 }
 
index 7534986..d2b1dc6 100644 (file)
@@ -237,6 +237,7 @@ class MediaPlayerPrivateGStreamer : public MediaPlayerPrivateInterface
             mutable IntSize m_videoSize;
 #if ENABLE(TIZEN_GSTREAMER_AUDIO)
             RefPtr<AudioSessionManagerGStreamerTizen> m_audioSessionManager;
+           guint m_player_deferred_state; // -1 = ignore, 0 = pause, 1 = play
 #endif
     };
 }