Hello community,

here is the log from the commit of package libQtWebKit4 for openSUSE:Factory 
checked in at 2013-04-05 09:28:09
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libQtWebKit4 (Old)
 and      /work/SRC/openSUSE:Factory/.libQtWebKit4.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libQtWebKit4", Maintainer is "dmuel...@suse.com"

Changes:
--------
--- /work/SRC/openSUSE:Factory/libQtWebKit4/libQtWebKit4.changes        
2013-04-03 13:01:49.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.libQtWebKit4.new/libQtWebKit4.changes   
2013-04-05 09:28:09.000000000 +0200
@@ -1,0 +2,8 @@
+Tue Apr  2 14:06:42 UTC 2013 - hrvoje.sen...@gmail.com
+
+- Added buffer-ranges.patch, fixes buffering with gstreamer 1.0 
+  (webkit#105319)
+  and MediaPlayerPrivateGStreamer-should-take-ownership-of-the-playbin.patch 
+  (webkit#107445) 
+
+-------------------------------------------------------------------

New:
----
  MediaPlayerPrivateGStreamer-should-take-ownership-of-the-playbin.patch
  buffer-ranges.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libQtWebKit4.spec ++++++
--- /var/tmp/diff_new_pack.Hc4jnM/_old  2013-04-05 09:28:14.000000000 +0200
+++ /var/tmp/diff_new_pack.Hc4jnM/_new  2013-04-05 09:28:14.000000000 +0200
@@ -44,6 +44,10 @@
 Patch8:         qwebview-buildfixes.diff
 # PATCH-FEATURE-UPSTREAM
 Patch9:         gstreamer-1.0.diff
+# PATCH-FIX-UPSTREAM buffer-ranges.patch hrvoje.sen...@gmail.com -- Use 
different method for buffering with gstreamer 1.0
+Patch10:        buffer-ranges.patch
+# PATCH-FIX-UPSTREAM hrvoje.sen...@gmail.com -- Call gst_object_ref_sink() on 
the playbin object to take ownership of it
+Patch11:        
MediaPlayerPrivateGStreamer-should-take-ownership-of-the-playbin.patch
 BuildRequires:  bison
 BuildRequires:  fdupes
 BuildRequires:  flex
@@ -113,6 +117,8 @@
 %patch8
 %if 0%{?suse_version} >= 1230
 %patch9 -p1
+%patch10 -p1
+%patch11 -p1
 %endif
 
 %build

++++++ MediaPlayerPrivateGStreamer-should-take-ownership-of-the-playbin.patch 
++++++
>From e387c506a0dfe4b62a9e8beedc76d1abcc177c24 Mon Sep 17 00:00:00 2001
From: christophe.dumez <christophe.du...@intel.com>
Date: Mon, 4 Mar 2013 11:26:04 +0100
Subject: [PATCH] [gstreamer] MediaPlayerPrivateGStreamer should take ownership 
of the playbin

https://bugs.webkit.org/show_bug.cgi?id=107445

Reviewed by Philippe Normand.

In gstreamer 1.0, gst_element_factory_make() now returns a floating reference.
MediaPlayerPrivateGStreamer calls gst_element_factory_make() to create the
playbin object but does not take ownership of the object. As a consequence,
the object keeps floating until it is unref'd in the
MediaPlayerPrivateGStreamer destructor.

This patch uses a GRefPtr<GstElement> to store the playbin object and only
adopt the object returned by gst_element_factory_make() if gstreamer 0.10
is used. When gstreamer 1.0 is used, the returned object will not be adopted,
which will remove the floating reference. This way, we ensure that the
playbin object is owned by MediaPlayerPrivateGStreamer.

No new tests, no behavior change for layout tests.

* platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
(WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
(WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
(WebCore::MediaPlayerPrivateGStreamer::load):
(WebCore::MediaPlayerPrivateGStreamer::playbackPosition):
(WebCore::MediaPlayerPrivateGStreamer::changePipelineState):
(WebCore::MediaPlayerPrivateGStreamer::duration):
(WebCore::MediaPlayerPrivateGStreamer::seek):
(WebCore::MediaPlayerPrivateGStreamer::paused):
(WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo):
(WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudio):
(WebCore::MediaPlayerPrivateGStreamer::setVolume):
(WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVolumeChange):
(WebCore::MediaPlayerPrivateGStreamer::setRate):
(WebCore::MediaPlayerPrivateGStreamer::buffered):
(WebCore::MediaPlayerPrivateGStreamer::handleMessage):
(WebCore::MediaPlayerPrivateGStreamer::fillTimerFired):
* platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
(MediaPlayerPrivateGStreamer):

Change-Id: I441285d33189c4afc26e9608bc0993716c24d7ed
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@140414 
268f45cc-cd09-0410-ab3c-d52691b4dbfc
Reviewed-by: Jocelyn Turcotte <jocelyn.turco...@digia.com>
---
 .../gstreamer/MediaPlayerPrivateGStreamer.cpp      |  128 ++++++++++----------
 .../gstreamer/MediaPlayerPrivateGStreamer.h        |    2 +-
 2 files changed, 66 insertions(+), 64 deletions(-)

diff --git 
a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp 
b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
index 736fd5a..cd34c18 100644
--- a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
+++ b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
@@ -204,7 +204,6 @@ bool MediaPlayerPrivateGStreamer::isAvai
 
 MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer(MediaPlayer* player)
     : m_player(player)
-    , m_playBin(0)
     , m_webkitVideoSink(0)
     , m_fpsSink(0)
     , m_source(0)
@@ -270,8 +269,7 @@ MediaPlayerPrivateGStreamer::~MediaPlaye
 #endif
 
     if (m_playBin) {
-        gst_element_set_state(m_playBin, GST_STATE_NULL);
-        gst_object_unref(GST_OBJECT(m_playBin));
+        gst_element_set_state(m_playBin.get(), GST_STATE_NULL);
         m_playBin = 0;
     }
 
@@ -301,7 +299,7 @@ void MediaPlayerPrivateGStreamer::load(c
         cleanUrl = cleanUrl.substring(0, kurl.pathEnd());
 
     m_url = KURL(KURL(), cleanUrl);
-    g_object_set(m_playBin, "uri", cleanUrl.utf8().data(), NULL);
+    g_object_set(m_playBin.get(), "uri", cleanUrl.utf8().data(), NULL);
 
     LOG_MEDIA_MESSAGE("Load %s", cleanUrl.utf8().data());
 
@@ -319,7 +317,7 @@ void MediaPlayerPrivateGStreamer::load(c
 
     // GStreamer needs to have the pipeline set to a paused state to
     // start providing anything useful.
-    gst_element_set_state(m_playBin, GST_STATE_PAUSED);
+    gst_element_set_state(m_playBin.get(), GST_STATE_PAUSED);
 
     if (!m_delayingLoad)
         commitLoad();
@@ -348,7 +346,7 @@ float MediaPlayerPrivateGStreamer::playb
     float ret = 0.0f;
 
     GstQuery* query = gst_query_new_position(GST_FORMAT_TIME);
-    if (!gst_element_query(m_playBin, query)) {
+    if (!gst_element_query(m_playBin.get(), query)) {
         LOG_MEDIA_MESSAGE("Position query failed...");
         gst_query_unref(query);
         return ret;
@@ -376,12 +374,12 @@ bool MediaPlayerPrivateGStreamer::change
     GstState currentState;
     GstState pending;
 
-    gst_element_get_state(m_playBin, &currentState, &pending, 0);
+    gst_element_get_state(m_playBin.get(), &currentState, &pending, 0);
     LOG_MEDIA_MESSAGE("Current state: %s, pending: %s", 
gst_element_state_get_name(currentState), gst_element_state_get_name(pending));
     if (currentState == newState || pending == newState)
         return true;
 
-    GstStateChangeReturn setStateResult = gst_element_set_state(m_playBin, 
newState);
+    GstStateChangeReturn setStateResult = 
gst_element_set_state(m_playBin.get(), newState);
     GstState pausedOrPlaying = newState == GST_STATE_PLAYING ? 
GST_STATE_PAUSED : GST_STATE_PLAYING;
     if (currentState != pausedOrPlaying && setStateResult == 
GST_STATE_CHANGE_FAILURE) {
         loadingFailed(MediaPlayer::Empty);
@@ -437,9 +435,9 @@ float MediaPlayerPrivateGStreamer::durat
     gint64 timeLength = 0;
 
 #ifdef GST_API_VERSION_1
-    bool failure = !gst_element_query_duration(m_playBin, timeFormat, 
&timeLength) || static_cast<guint64>(timeLength) == GST_CLOCK_TIME_NONE;
+    bool failure = !gst_element_query_duration(m_playBin.get(), timeFormat, 
&timeLength) || static_cast<guint64>(timeLength) == GST_CLOCK_TIME_NONE;
 #else
-    bool failure = !gst_element_query_duration(m_playBin, &timeFormat, 
&timeLength) || timeFormat != GST_FORMAT_TIME || 
static_cast<guint64>(timeLength) == GST_CLOCK_TIME_NONE;
+    bool failure = !gst_element_query_duration(m_playBin.get(), &timeFormat, 
&timeLength) || timeFormat != GST_FORMAT_TIME || 
static_cast<guint64>(timeLength) == GST_CLOCK_TIME_NONE;
 #endif
     if (failure) {
         LOG_MEDIA_MESSAGE("Time duration query failed for %s", 
m_url.string().utf8().data());
@@ -502,7 +500,7 @@ void MediaPlayerPrivateGStreamer::seek(f
     GstClockTime clockTime = GST_TIMEVAL_TO_TIME(timeValue);
     LOG_MEDIA_MESSAGE("Seek: %" GST_TIME_FORMAT, GST_TIME_ARGS(clockTime));
 
-    if (!gst_element_seek(m_playBin, m_player->rate(),
+    if (!gst_element_seek(m_playBin.get(), m_player->rate(),
             GST_FORMAT_TIME,
             (GstSeekFlags)(GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE),
             GST_SEEK_TYPE_SET, clockTime,
@@ -522,7 +520,7 @@ bool MediaPlayerPrivateGStreamer::paused
     }
 
     GstState state;
-    gst_element_get_state(m_playBin, &state, 0, 0);
+    gst_element_get_state(m_playBin.get(), &state, 0, 0);
     return state == GST_STATE_PAUSED;
 }
 
@@ -604,7 +602,7 @@ void MediaPlayerPrivateGStreamer::notify
 
     gint videoTracks = 0;
     if (m_playBin)
-        g_object_get(m_playBin, "n-video", &videoTracks, NULL);
+        g_object_get(m_playBin.get(), "n-video", &videoTracks, NULL);
 
     m_hasVideo = videoTracks > 0;
 
@@ -626,7 +624,7 @@ void MediaPlayerPrivateGStreamer::notify
 
     gint audioTracks = 0;
     if (m_playBin)
-        g_object_get(m_playBin, "n-audio", &audioTracks, NULL);
+        g_object_get(m_playBin.get(), "n-audio", &audioTracks, NULL);
     m_hasAudio = audioTracks > 0;
     m_player->mediaPlayerClient()->mediaPlayerEngineUpdated(m_player);
 }
@@ -636,7 +634,7 @@ void MediaPlayerPrivateGStreamer::setVol
     if (!m_playBin)
         return;
 
-    gst_stream_volume_set_volume(GST_STREAM_VOLUME(m_playBin), 
GST_STREAM_VOLUME_FORMAT_CUBIC,
+    gst_stream_volume_set_volume(GST_STREAM_VOLUME(m_playBin.get()), 
GST_STREAM_VOLUME_FORMAT_CUBIC,
                                  static_cast<double>(volume));
 }
 
@@ -647,7 +645,7 @@ void MediaPlayerPrivateGStreamer::notify
     if (!m_player || !m_playBin)
         return;
     double volume;
-    volume = gst_stream_volume_get_volume(GST_STREAM_VOLUME(m_playBin), 
GST_STREAM_VOLUME_FORMAT_CUBIC);
+    volume = gst_stream_volume_get_volume(GST_STREAM_VOLUME(m_playBin.get()), 
GST_STREAM_VOLUME_FORMAT_CUBIC);
     // get_volume() can return values superior to 1.0 if the user
     // applies software user gain via third party application (GNOME
     // volume control for instance).
@@ -671,7 +669,7 @@ void MediaPlayerPrivateGStreamer::setRat
     GstState state;
     GstState pending;
 
-    gst_element_get_state(m_playBin, &state, &pending, 0);
+    gst_element_get_state(m_playBin.get(), &state, &pending, 0);
     if ((state != GST_STATE_PLAYING && state != GST_STATE_PAUSED)
         || (pending == GST_STATE_PAUSED))
         return;
@@ -683,7 +681,7 @@ void MediaPlayerPrivateGStreamer::setRat
     m_changingRate = true;
 
     if (!rate) {
-        gst_element_set_state(m_playBin, GST_STATE_PAUSED);
+        gst_element_set_state(m_playBin.get(), GST_STATE_PAUSED);
         return;
     }
 
@@ -713,12 +711,12 @@ void MediaPlayerPrivateGStreamer::setRat
 
     LOG_MEDIA_MESSAGE("Need to mute audio: %d", (int) mute);
 
-    if (!gst_element_seek(m_playBin, rate, GST_FORMAT_TIME, flags,
+    if (!gst_element_seek(m_playBin.get(), rate, GST_FORMAT_TIME, flags,
                           GST_SEEK_TYPE_SET, start,
                           GST_SEEK_TYPE_SET, end))
         LOG_MEDIA_MESSAGE("Set rate to %f failed", rate);
     else
-        g_object_set(m_playBin, "mute", mute, NULL);
+        g_object_set(m_playBin.get(), "mute", mute, NULL);
 }
 
 MediaPlayer::NetworkState MediaPlayerPrivateGStreamer::networkState() const
@@ -744,7 +742,7 @@ PassRefPtr<TimeRanges> MediaPlayerPrivat
 
     GstQuery* query = gst_query_new_buffering(GST_FORMAT_PERCENT);
 
-    if (!gst_element_query(m_playBin, query)) {
+    if (!gst_element_query(m_playBin.get(), query)) {
         gst_query_unref(query);
         return timeRanges.release();
     }
@@ -799,7 +797,7 @@ gboolean MediaPlayerPrivateGStreamer::ha
         gst_message_parse_error(message, &err.outPtr(), &debug.outPtr());
         LOG_MEDIA_MESSAGE("Error %d: %s (url=%s)", err->code, err->message, 
m_url.string().utf8().data());
 
-        GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(GST_BIN(m_playBin), 
GST_DEBUG_GRAPH_SHOW_ALL, "webkit-video.error");
+        GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(GST_BIN(m_playBin.get()), 
GST_DEBUG_GRAPH_SHOW_ALL, "webkit-video.error");
 
         error = MediaPlayer::Empty;
         if (err->code == GST_STREAM_ERROR_CODEC_NOT_FOUND
@@ -840,7 +838,7 @@ gboolean MediaPlayerPrivateGStreamer::ha
 
         // Ignore state changes from internal elements. They are
         // forwarded to playbin2 anyway.
-        if (GST_MESSAGE_SRC(message) == 
reinterpret_cast<GstObject*>(m_playBin)) {
+        if (GST_MESSAGE_SRC(message) == 
reinterpret_cast<GstObject*>(m_playBin.get())) {
             updateStates();
 
             // Construct a filename for the graphviz dot file output.
@@ -851,7 +849,7 @@ gboolean MediaPlayerPrivateGStreamer::ha
                                                  
gst_element_state_get_name(oldState),
                                                  
gst_element_state_get_name(newState)).utf8();
 
-            GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(GST_BIN(m_playBin), 
GST_DEBUG_GRAPH_SHOW_ALL, dotFileName.data());
+            GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(GST_BIN(m_playBin.get()), 
GST_DEBUG_GRAPH_SHOW_ALL, dotFileName.data());
         }
         break;
     case GST_MESSAGE_BUFFERING:
@@ -908,7 +906,7 @@ void MediaPlayerPrivateGStreamer::fillTi
 {
     GstQuery* query = gst_query_new_buffering(GST_FORMAT_PERCENT);
 
-    if (!gst_element_query(m_playBin, query)) {
+    if (!gst_element_query(m_playBin.get(), query)) {
         gst_query_unref(query);
         return;
     }
@@ -1107,7 +1105,7 @@ void MediaPlayerPrivateGStreamer::update
 
     GstElement* sinkPtr = 0;
 
-    g_object_get(m_playBin, "audio-sink", &sinkPtr, NULL);
+    g_object_get(m_playBin.get(), "audio-sink", &sinkPtr, NULL);
     m_webkitAudioSink = adoptGRef(sinkPtr);
 
 }
@@ -1117,7 +1115,7 @@ void MediaPlayerPrivateGStreamer::source
 {
     GstElement* srcPtr = 0;
 
-    g_object_get(m_playBin, "source", &srcPtr, NULL);
+    g_object_get(m_playBin.get(), "source", &srcPtr, NULL);
     m_source = adoptGRef(srcPtr);
 
     if (WEBKIT_IS_WEB_SRC(m_source.get()))
@@ -1130,7 +1128,7 @@ void MediaPlayerPrivateGStreamer::cancel
         return;
 
     if (m_playBin)
-        gst_element_set_state(m_playBin, GST_STATE_NULL);
+        gst_element_set_state(m_playBin.get(), GST_STATE_NULL);
 }
 
 void MediaPlayerPrivateGStreamer::updateStates()
@@ -1146,7 +1144,7 @@ void MediaPlayerPrivateGStreamer::update
     GstState state;
     GstState pending;
 
-    GstStateChangeReturn ret = gst_element_get_state(m_playBin,
+    GstStateChangeReturn ret = gst_element_get_state(m_playBin.get(),
         &state, &pending, 250 * GST_NSECOND);
 
     bool shouldUpdateAfterSeek = false;
@@ -1195,7 +1193,7 @@ void MediaPlayerPrivateGStreamer::update
 
                 if (!m_paused) {
                     LOG_MEDIA_MESSAGE("[Buffering] Restarting playback.");
-                    gst_element_set_state(m_playBin, GST_STATE_PLAYING);
+                    gst_element_set_state(m_playBin.get(), GST_STATE_PLAYING);
                 }
             } else if (!m_buffering && (currentTime() < duration())) {
                 m_paused = true;
@@ -1210,7 +1208,7 @@ void MediaPlayerPrivateGStreamer::update
 
                 LOG_MEDIA_MESSAGE("[Buffering] Pausing stream for buffering.");
 
-                gst_element_set_state(m_playBin, GST_STATE_PAUSED);
+                gst_element_set_state(m_playBin.get(), GST_STATE_PAUSED);
             }
         } else
             m_paused = true;
@@ -1241,14 +1239,14 @@ void MediaPlayerPrivateGStreamer::update
         // pipeline.
         if (state == GST_STATE_READY && isLiveStream() && m_preload == 
MediaPlayer::Auto) {
             setPreload(MediaPlayer::None);
-            gst_element_set_state(m_playBin, GST_STATE_NULL);
-            gst_element_set_state(m_playBin, GST_STATE_PAUSED);
+            gst_element_set_state(m_playBin.get(), GST_STATE_NULL);
+            gst_element_set_state(m_playBin.get(), GST_STATE_PAUSED);
         }
 
         // A live stream was paused, reset the pipeline.
         if (state == GST_STATE_PAUSED && pending == GST_STATE_PLAYING && 
isLiveStream()) {
-            gst_element_set_state(m_playBin, GST_STATE_NULL);
-            gst_element_set_state(m_playBin, GST_STATE_PLAYING);
+            gst_element_set_state(m_playBin.get(), GST_STATE_NULL);
+            gst_element_set_state(m_playBin.get(), GST_STATE_PLAYING);
         }
 
         if (!isLiveStream() && !m_buffering)
@@ -1284,9 +1282,9 @@ void MediaPlayerPrivateGStreamer::update
             shouldUpdateAfterSeek = true;
             m_seeking = false;
             if (!m_paused)
-                gst_element_set_state(m_playBin, GST_STATE_PLAYING);
+                gst_element_set_state(m_playBin.get(), GST_STATE_PLAYING);
         } else if (!m_paused)
-            gst_element_set_state(m_playBin, GST_STATE_PLAYING);
+            gst_element_set_state(m_playBin.get(), GST_STATE_PLAYING);
 
         m_networkState = MediaPlayer::Loading;
         break;
@@ -1372,7 +1370,7 @@ bool MediaPlayerPrivateGStreamer::loadNe
         // append the value of new-location to it.
 
         gchar* currentLocation = 0;
-        g_object_get(m_playBin, "uri", &currentLocation, NULL);
+        g_object_get(m_playBin.get(), "uri", &currentLocation, NULL);
 
         KURL currentUrl(KURL(), currentLocation);
         g_free(currentLocation);
@@ -1396,14 +1394,14 @@ bool MediaPlayerPrivateGStreamer::loadNe
 
             // Reset pipeline state.
             m_resetPipeline = true;
-            gst_element_set_state(m_playBin, GST_STATE_READY);
+            gst_element_set_state(m_playBin.get(), GST_STATE_READY);
 
             GstState state;
-            gst_element_get_state(m_playBin, &state, 0, 0);
+            gst_element_get_state(m_playBin.get(), &state, 0, 0);
             if (state <= GST_STATE_READY) {
                 // Set the new uri and start playing.
-                g_object_set(m_playBin, "uri", newUrl.string().utf8().data(), 
NULL);
-                gst_element_set_state(m_playBin, GST_STATE_PLAYING);
+                g_object_set(m_playBin.get(), "uri", 
newUrl.string().utf8().data(), NULL);
+                gst_element_set_state(m_playBin.get(), GST_STATE_PLAYING);
                 return true;
             }
         }
@@ -1446,7 +1444,7 @@ void MediaPlayerPrivateGStreamer::didEnd
 
     if (!m_player->mediaPlayerClient()->mediaPlayerIsLooping()) {
         m_paused = true;
-        gst_element_set_state(m_playBin, GST_STATE_NULL);
+        gst_element_set_state(m_playBin.get(), GST_STATE_NULL);
     }
 }
 
@@ -1457,7 +1455,7 @@ void MediaPlayerPrivateGStreamer::cacheD
 
     // And re-cache it if possible.
     GstState state;
-    gst_element_get_state(m_playBin, &state, 0, 0);
+    gst_element_get_state(m_playBin.get(), &state, 0, 0);
     float newDuration = duration();
 
     if (state <= GST_STATE_READY) {
@@ -1491,8 +1489,8 @@ void MediaPlayerPrivateGStreamer::durati
         m_totalBytes = -1;
         if (totalBytes() && !isLiveStream()) {
             setPreload(MediaPlayer::Auto);
-            gst_element_set_state(m_playBin, GST_STATE_NULL);
-            gst_element_set_state(m_playBin, GST_STATE_PAUSED);
+            gst_element_set_state(m_playBin.get(), GST_STATE_NULL);
+            gst_element_set_state(m_playBin.get(), GST_STATE_PAUSED);
         }
     }
 }
@@ -1507,7 +1505,7 @@ void MediaPlayerPrivateGStreamer::setMut
     if (!m_playBin)
         return;
 
-    g_object_set(m_playBin, "mute", muted, NULL);
+    g_object_set(m_playBin.get(), "mute", muted, NULL);
 }
 
 void MediaPlayerPrivateGStreamer::notifyPlayerOfMute()
@@ -1518,7 +1516,7 @@ void MediaPlayerPrivateGStreamer::notify
         return;
 
     gboolean muted;
-    g_object_get(m_playBin, "mute", &muted, NULL);
+    g_object_get(m_playBin.get(), "mute", &muted, NULL);
     m_player->muteChanged(static_cast<bool>(muted));
 }
 
@@ -1744,13 +1742,13 @@ void MediaPlayerPrivateGStreamer::setPre
     ASSERT(m_playBin);
 
     GstPlayFlags flags;
-    g_object_get(m_playBin, "flags", &flags, NULL);
+    g_object_get(m_playBin.get(), "flags", &flags, NULL);
     if (m_preload == MediaPlayer::Auto) {
         LOG_MEDIA_MESSAGE("Enabling on-disk buffering");
-        g_object_set(m_playBin, "flags", flags | GST_PLAY_FLAG_DOWNLOAD, NULL);
+        g_object_set(m_playBin.get(), "flags", flags | GST_PLAY_FLAG_DOWNLOAD, 
NULL);
     } else {
         LOG_MEDIA_MESSAGE("Disabling on-disk buffering");
-        g_object_set(m_playBin, "flags", flags & ~GST_PLAY_FLAG_DOWNLOAD, 
NULL);
+        g_object_set(m_playBin.get(), "flags", flags & 
~GST_PLAY_FLAG_DOWNLOAD, NULL);
     }
 
     if (m_delayingLoad && m_preload != MediaPlayer::None) {
@@ -1762,24 +1760,27 @@ void MediaPlayerPrivateGStreamer::setPre
 void MediaPlayerPrivateGStreamer::createGSTPlayBin()
 {
     ASSERT(!m_playBin);
+
+    // gst_element_factory_make() returns a floating reference so
+    // we should not adopt.
     m_playBin = gst_element_factory_make(gPlaybinName, "play");
 
 #ifndef GST_API_VERSION_1
-    m_gstGWorld = GStreamerGWorld::createGWorld(m_playBin);
+    m_gstGWorld = GStreamerGWorld::createGWorld(m_playBin.get());
 #endif
 
-    GstBus* bus = gst_pipeline_get_bus(GST_PIPELINE(m_playBin));
+    GstBus* bus = gst_pipeline_get_bus(GST_PIPELINE(m_playBin.get()));
     gst_bus_add_signal_watch(bus);
     g_signal_connect(bus, "message", 
G_CALLBACK(mediaPlayerPrivateMessageCallback), this);
     gst_object_unref(bus);
 
-    g_object_set(m_playBin, "mute", m_player->muted(), NULL);
+    g_object_set(m_playBin.get(), "mute", m_player->muted(), NULL);
 
-    g_signal_connect(m_playBin, "notify::volume", 
G_CALLBACK(mediaPlayerPrivateVolumeChangedCallback), this);
-    g_signal_connect(m_playBin, "notify::source", 
G_CALLBACK(mediaPlayerPrivateSourceChangedCallback), this);
-    g_signal_connect(m_playBin, "notify::mute", 
G_CALLBACK(mediaPlayerPrivateMuteChangedCallback), this);
-    g_signal_connect(m_playBin, "video-changed", 
G_CALLBACK(mediaPlayerPrivateVideoChangedCallback), this);
-    g_signal_connect(m_playBin, "audio-changed", 
G_CALLBACK(mediaPlayerPrivateAudioChangedCallback), this);
+    g_signal_connect(m_playBin.get(), "notify::volume", 
G_CALLBACK(mediaPlayerPrivateVolumeChangedCallback), this);
+    g_signal_connect(m_playBin.get(), "notify::source", 
G_CALLBACK(mediaPlayerPrivateSourceChangedCallback), this);
+    g_signal_connect(m_playBin.get(), "notify::mute", 
G_CALLBACK(mediaPlayerPrivateMuteChangedCallback), this);
+    g_signal_connect(m_playBin.get(), "video-changed", 
G_CALLBACK(mediaPlayerPrivateVideoChangedCallback), this);
+    g_signal_connect(m_playBin.get(), "audio-changed", 
G_CALLBACK(mediaPlayerPrivateAudioChangedCallback), this);
 
 #ifndef GST_API_VERSION_1
     m_webkitVideoSink = webkitVideoSinkNew(m_gstGWorld.get());
@@ -1862,9 +1863,9 @@ void MediaPlayerPrivateGStreamer::create
     gst_element_add_pad(m_videoSinkBin, gst_ghost_pad_new("sink", pad.get()));
 
     // Set the bin as video sink of playbin.
-    g_object_set(m_playBin, "video-sink", m_videoSinkBin, NULL);
+    g_object_set(m_playBin.get(), "video-sink", m_videoSinkBin, NULL);
 #else
-    g_object_set(m_playBin, "video-sink", actualVideoSink, NULL);
+    g_object_set(m_playBin.get(), "video-sink", actualVideoSink, NULL);
 #endif
 
     GRefPtr<GstPad> videoSinkPad = 
adoptGRef(gst_element_get_static_pad(m_webkitVideoSink, "sink"));
diff --git 
a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h 
b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h
index d14d004..1f7b3f3 100644
--- a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h
+++ b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h
@@ -157,7 +157,7 @@ class MediaPlayerPrivateGStreamer : public 
MediaPlayerPrivateInterface {
 
         private:
             MediaPlayer* m_player;
-            GstElement* m_playBin;
+            GRefPtr<GstElement> m_playBin;
             GstElement* m_webkitVideoSink;
             GstElement* m_videoSinkBin;
             GstElement* m_fpsSink;
-- 
1.7.1

++++++ buffer-ranges.patch ++++++
>From c3934e3270b74e95b3d15657c0b34e0ff3aa6a13 Mon Sep 17 00:00:00 2001
From: Xabier Rodriguez Calvar <calva...@igalia.com>
Date: Mon, 4 Mar 2013 11:25:18 +0100
Subject: [PATCH] [GStreamer] Buffering ranges are reported incorrectly with 
GStreamer 1.0

https://bugs.webkit.org/show_bug.cgi?id=105319

Patch by Xabier Rodriguez Calvar <calva...@igalia.com> on 2012-12-21
Reviewed by Philippe Normand.

We add the gPercentMax constant to select between 100 and
GST_FORMAT_PERCENT_MAX depending if we are compiling against
GStreamer 0.10 or 1.0 and we use that in the corresponding method.

Current tests should suffice.

* platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
(WebCore::MediaPlayerPrivateGStreamer::buffered): Added the use of
gPercentMax constant instead of 100 to have the different code
paths for GStreamer 0.10 and 1.0.

Change-Id: I04d57303e683353b8734c62ef5016fa965a9627b
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@138364 
268f45cc-cd09-0410-ab3c-d52691b4dbfc
Reviewed-by: Jocelyn Turcotte <jocelyn.turco...@digia.com>
---
 .../gstreamer/MediaPlayerPrivateGStreamer.cpp      |   13 ++++++++++---
 1 files changed, 10 insertions(+), 3 deletions(-)

diff --git 
a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp 
b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
index f2bd292..736fd5a 100644
--- a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
+++ b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
@@ -74,10 +74,17 @@ typedef enum {
     GST_PLAY_FLAG_BUFFERING     = 0x000000100
 } GstPlayFlags;
 
+// gPercentMax is used when parsing buffering ranges with
+// gst_query_parse_nth_buffering_range as there was a bug in GStreamer
+// 0.10 that was using 100 instead of GST_FORMAT_PERCENT_MAX. This was
+// corrected in 1.0. gst_query_parse_buffering_range worked as
+// expected with GST_FORMAT_PERCENT_MAX in both cases.
 #ifdef GST_API_VERSION_1
 static const char* gPlaybinName = "playbin";
+static const gint64 gPercentMax = GST_FORMAT_PERCENT_MAX;
 #else
 static const char* gPlaybinName = "playbin2";
+static const gint64 gPercentMax = 100;
 #endif
 
 GST_DEBUG_CATEGORY_STATIC(webkit_media_player_debug);
@@ -749,11 +756,11 @@ PassRefPtr<TimeRanges> 
MediaPlayerPrivateGStreamer::buffered() const
         return timeRanges.release();
     }
 
-    gint64 rangeStart = 0, rangeStop = 0;
     for (guint index = 0; index < gst_query_get_n_buffering_ranges(query); 
index++) {
+        gint64 rangeStart = 0, rangeStop = 0;
         if (gst_query_parse_nth_buffering_range(query, index, &rangeStart, 
&rangeStop))
-            timeRanges->add(static_cast<float>((rangeStart * mediaDuration) / 
100),
-                            static_cast<float>((rangeStop * mediaDuration) / 
100));
+            timeRanges->add(static_cast<float>((rangeStart * mediaDuration) / 
gPercentMax),
+                static_cast<float>((rangeStop * mediaDuration) / gPercentMax));
     }
 
     // Fallback to the more general maxTimeLoaded() if no range has
-- 
1.7.1
 
-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to