Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP1:GA
libQtWebKit4
MediaPlayerPrivateGStreamer-should-take-ownersh...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File MediaPlayerPrivateGStreamer-should-take-ownership-of-the-playbin.patch of Package libQtWebKit4
From e387c506a0dfe4b62a9e8beedc76d1abcc177c24 Mon Sep 17 00:00:00 2001 From: christophe.dumez <christophe.dumez@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.turcotte@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, ¤tState, &pending, 0); + gst_element_get_state(m_playBin.get(), ¤tState, &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", ¤tLocation, NULL); + g_object_get(m_playBin.get(), "uri", ¤tLocation, 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
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor