[SCM] WebKit Debian packaging branch, webkit-1.2, updated. upstream/1.1.90-6072-g9a69373

philn at webkit.org philn at webkit.org
Thu Apr 8 00:40:00 UTC 2010


The following commit has been merged in the webkit-1.2 branch:
commit 03f96b47ab316f0dfdf89c4e3ae18557b0b61b73
Author: philn at webkit.org <philn at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Thu Dec 17 12:13:04 2009 +0000

    2009-12-16  Philippe Normand  <pnormand at igalia.com>
    
            Reviewed by Gustavo Noronha Silva.
    
            [GTK] segfault during volume notification
            https://bugs.webkit.org/show_bug.cgi?id=32603
    
            Emit volumeChanged and durationChanged upon notification from
            GStreamer. Also don't reset the volume property on playbin, it is
            not needed as it is 1.0 by default both on playbin and in the
            MediaPlayer.
    
            * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
            (WebCore::mediaPlayerPrivateMessageCallback):
            (WebCore::mediaPlayerPrivateVolumeChangedCallback):
            (WebCore::notifyVolumeIdleCallback):
            (WebCore::doGstInit):
            (WebCore::MediaPlayerPrivate::isAvailable):
            (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
            (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
            (WebCore::MediaPlayerPrivate::volumeChanged):
            (WebCore::MediaPlayerPrivate::didEnd):
            (WebCore::MediaPlayerPrivate::durationChanged):
            (WebCore::mimeTypeCache):
            (WebCore::MediaPlayerPrivate::createGSTPlayBin):
            * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:
    
    2009-11-11  Philippe Normand  <pnormand at igalia.com>
    
            Reviewed by Gustavo Noronha Silva.
    
            [GStreamer] Should emit {networkState,readyState,volume,time,size,rate,duration}Changed signals
            https://bugs.webkit.org/show_bug.cgi?id=30377
    
            Emit volumeChanged and durationChanged upon notification from
            GStreamer.
    
            * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
            (WebCore::mediaPlayerPrivateMessageCallback):
            (WebCore::mediaPlayerPrivateVolumeCallback):
            (WebCore::notify_volume_idle_cb):
            (WebCore::MediaPlayerPrivate::didEnd):
            (WebCore::MediaPlayerPrivate::durationChanged):
            (WebCore::MediaPlayerPrivate::createGSTPlayBin):
            * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@52247 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index a982b10..a4ac754 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,49 @@
+2009-11-11  Philippe Normand  <pnormand at igalia.com>
+
+        Reviewed by Gustavo Noronha Silva.
+
+        [GStreamer] Should emit {networkState,readyState,volume,time,size,rate,duration}Changed signals
+        https://bugs.webkit.org/show_bug.cgi?id=30377
+
+        Emit volumeChanged and durationChanged upon notification from
+        GStreamer.
+
+        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
+        (WebCore::mediaPlayerPrivateMessageCallback):
+        (WebCore::mediaPlayerPrivateVolumeCallback):
+        (WebCore::notify_volume_idle_cb):
+        (WebCore::MediaPlayerPrivate::didEnd):
+        (WebCore::MediaPlayerPrivate::durationChanged):
+        (WebCore::MediaPlayerPrivate::createGSTPlayBin):
+        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:
+
+2009-12-16  Philippe Normand  <pnormand at igalia.com>
+
+        Reviewed by Gustavo Noronha Silva.
+
+        [GTK] segfault during volume notification
+        https://bugs.webkit.org/show_bug.cgi?id=32603
+
+        Emit volumeChanged and durationChanged upon notification from
+        GStreamer. Also don't reset the volume property on playbin, it is
+        not needed as it is 1.0 by default both on playbin and in the
+        MediaPlayer.
+
+        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
+        (WebCore::mediaPlayerPrivateMessageCallback):
+        (WebCore::mediaPlayerPrivateVolumeChangedCallback):
+        (WebCore::notifyVolumeIdleCallback):
+        (WebCore::doGstInit):
+        (WebCore::MediaPlayerPrivate::isAvailable):
+        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
+        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
+        (WebCore::MediaPlayerPrivate::volumeChanged):
+        (WebCore::MediaPlayerPrivate::didEnd):
+        (WebCore::MediaPlayerPrivate::durationChanged):
+        (WebCore::mimeTypeCache):
+        (WebCore::MediaPlayerPrivate::createGSTPlayBin):
+        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:
+
 2009-12-17  Martin Robinson  <martin.james.robinson at gmail.com>
 
         Reviewed by Gustavo Noronha.
diff --git a/WebCore/platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp b/WebCore/platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp
index 62397ca..3157c63 100644
--- a/WebCore/platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp
+++ b/WebCore/platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp
@@ -91,6 +91,10 @@ gboolean mediaPlayerPrivateMessageCallback(GstBus* bus, GstMessage* message, gpo
         gst_message_parse_buffering(message, &percent);
         LOG_VERBOSE(Media, "Buffering %d", percent);
         break;
+    case GST_MESSAGE_DURATION:
+        LOG_VERBOSE(Media, "Duration changed");
+        mp->durationChanged();
+        break;
     default:
         LOG_VERBOSE(Media, "Unhandled GStreamer message type: %s",
                     GST_MESSAGE_TYPE_NAME(message));
@@ -99,6 +103,18 @@ gboolean mediaPlayerPrivateMessageCallback(GstBus* bus, GstMessage* message, gpo
     return true;
 }
 
+void mediaPlayerPrivateVolumeChangedCallback(GObject *element, GParamSpec *pspec, gpointer data)
+{
+    MediaPlayerPrivate* mp = reinterpret_cast<MediaPlayerPrivate*>(data);
+    mp->volumeChanged();
+}
+
+gboolean notifyVolumeIdleCallback(MediaPlayer* mp)
+{
+    mp->volumeChanged();
+    return FALSE;
+}
+
 static float playbackPosition(GstElement* playbin)
 {
 
@@ -146,7 +162,7 @@ void MediaPlayerPrivate::registerMediaEngine(MediaEngineRegistrar registrar)
 
 static bool gstInitialized = false;
 
-static bool do_gst_init()
+static bool doGstInit()
 {
     // FIXME: We should pass the arguments from the command line
     if (!gstInitialized) {
@@ -165,7 +181,7 @@ static bool do_gst_init()
 
 bool MediaPlayerPrivate::isAvailable()
 {
-    if (!do_gst_init())
+    if (!doGstInit())
         return false;
 
     GstElementFactory* factory = gst_element_factory_find("playbin2");
@@ -193,12 +209,18 @@ MediaPlayerPrivate::MediaPlayerPrivate(MediaPlayer* player)
     , m_paused(true)
     , m_seeking(false)
     , m_errorOccured(false)
+    , m_volumeIdleId(-1)
 {
-    do_gst_init();
+    doGstInit();
 }
 
 MediaPlayerPrivate::~MediaPlayerPrivate()
 {
+    if (m_volumeIdleId) {
+        g_source_remove(m_volumeIdleId);
+        m_volumeIdleId = -1;
+    }
+
     if (m_buffer)
         gst_buffer_unref(m_buffer);
     m_buffer = 0;
@@ -404,6 +426,16 @@ void MediaPlayerPrivate::setVolume(float volume)
     g_object_set(G_OBJECT(m_playBin), "volume", static_cast<double>(volume), NULL);
 }
 
+void MediaPlayerPrivate::volumeChanged()
+{
+    if (m_volumeIdleId) {
+        g_source_remove(m_volumeIdleId);
+        m_volumeIdleId = -1;
+    }
+    m_volumeIdleId = g_idle_add((GSourceFunc) notifyVolumeIdleCallback, m_player);
+}
+
+
 void MediaPlayerPrivate::setRate(float rate)
 {
     GstState state;
@@ -663,14 +695,14 @@ void MediaPlayerPrivate::timeChanged()
     m_player->timeChanged();
 }
 
-void MediaPlayerPrivate::volumeChanged()
+void MediaPlayerPrivate::didEnd()
 {
-    m_player->volumeChanged();
+    timeChanged();
 }
 
-void MediaPlayerPrivate::didEnd()
+void MediaPlayerPrivate::durationChanged()
 {
-    timeChanged();
+    m_player->durationChanged();
 }
 
 void MediaPlayerPrivate::loadingFailed(MediaPlayer::NetworkState error)
@@ -751,7 +783,7 @@ void MediaPlayerPrivate::paint(GraphicsContext* context, const IntRect& rect)
 static HashSet<String> mimeTypeCache()
 {
 
-    do_gst_init();
+    doGstInit();
 
     static HashSet<String> cache;
     static bool typeListInitialized = false;
@@ -888,7 +920,9 @@ void MediaPlayerPrivate::createGSTPlayBin(String url)
     gst_object_unref(bus);
 
     g_object_set(G_OBJECT(m_playBin), "uri", url.utf8().data(),
-        "volume", static_cast<double>(m_player->volume()), NULL);
+                 NULL);
+
+    g_signal_connect(G_OBJECT(m_playBin), "notify::volume", G_CALLBACK(mediaPlayerPrivateVolumeChangedCallback), this);
 
     m_videoSink = webkit_video_sink_new();
 
diff --git a/WebCore/platform/graphics/gtk/MediaPlayerPrivateGStreamer.h b/WebCore/platform/graphics/gtk/MediaPlayerPrivateGStreamer.h
index 6ab8edb..4e121b6 100644
--- a/WebCore/platform/graphics/gtk/MediaPlayerPrivateGStreamer.h
+++ b/WebCore/platform/graphics/gtk/MediaPlayerPrivateGStreamer.h
@@ -39,14 +39,15 @@ typedef struct _GstBus GstBus;
 
 namespace WebCore {
 
-    class GraphicsContext;
-    class IntSize;
-    class IntRect;
-    class String;
+class GraphicsContext;
+class IntSize;
+class IntRect;
+class String;
 
-    gboolean mediaPlayerPrivateMessageCallback(GstBus* bus, GstMessage* message, gpointer data);
+gboolean mediaPlayerPrivateMessageCallback(GstBus* bus, GstMessage* message, gpointer data);
+void mediaPlayerPrivateVolumeChangedCallback(GObject *element, GParamSpec *pspec, gpointer data);
 
-    class MediaPlayerPrivate : public MediaPlayerPrivateInterface {
+class MediaPlayerPrivate : public MediaPlayerPrivateInterface {
         friend gboolean mediaPlayerPrivateMessageCallback(GstBus* bus, GstMessage* message, gpointer data);
         friend void mediaPlayerPrivateRepaintCallback(WebKitVideoSink*, GstBuffer *buffer, MediaPlayerPrivate* playerPrivate);
 
@@ -74,6 +75,7 @@ namespace WebCore {
 
             void setRate(float);
             void setVolume(float);
+            void volumeChanged();
 
             int dataRate() const;
 
@@ -92,8 +94,8 @@ namespace WebCore {
             void loadStateChanged();
             void sizeChanged();
             void timeChanged();
-            void volumeChanged();
             void didEnd();
+            void durationChanged();
             void loadingFailed(MediaPlayer::NetworkState);
 
             void repaint();
@@ -138,6 +140,7 @@ namespace WebCore {
             bool m_paused;
             bool m_seeking;
             bool m_errorOccured;
+            guint m_volumeIdleId;
     };
 }
 

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list