diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.cpp | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.cpp')
-rw-r--r-- | Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.cpp | 142 |
1 files changed, 135 insertions, 7 deletions
diff --git a/Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.cpp b/Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.cpp index f7ef46dd8..0ed9b5633 100644 --- a/Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.cpp +++ b/Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.cpp @@ -27,7 +27,7 @@ namespace WTF { template <> GRefPtr<GstElement> adoptGRef(GstElement* ptr) { - ASSERT(!ptr || !g_object_is_floating(G_OBJECT(ptr))); + ASSERT(!ptr || !g_object_is_floating(ptr)); return GRefPtr<GstElement>(ptr, GRefPtrAdopt); } @@ -47,7 +47,7 @@ template <> void derefGPtr<GstElement>(GstElement* ptr) template <> GRefPtr<GstPad> adoptGRef(GstPad* ptr) { - ASSERT(!ptr || !g_object_is_floating(G_OBJECT(ptr))); + ASSERT(!ptr || !g_object_is_floating(ptr)); return GRefPtr<GstPad>(ptr, GRefPtrAdopt); } @@ -67,7 +67,7 @@ template <> void derefGPtr<GstPad>(GstPad* ptr) template <> GRefPtr<GstPadTemplate> adoptGRef(GstPadTemplate* ptr) { - ASSERT(!ptr || !g_object_is_floating(G_OBJECT(ptr))); + ASSERT(!ptr || !g_object_is_floating(ptr)); return GRefPtr<GstPadTemplate>(ptr, GRefPtrAdopt); } @@ -103,10 +103,28 @@ template <> void derefGPtr<GstCaps>(GstCaps* ptr) gst_caps_unref(ptr); } +template <> GRefPtr<GstContext> adoptGRef(GstContext* ptr) +{ + return GRefPtr<GstContext>(ptr, GRefPtrAdopt); +} + +template <> GstContext* refGPtr<GstContext>(GstContext* ptr) +{ + if (ptr) + gst_context_ref(ptr); + return ptr; +} + +template <> void derefGPtr<GstContext>(GstContext* ptr) +{ + if (ptr) + gst_context_unref(ptr); +} template <> GRefPtr<GstTask> adoptGRef(GstTask* ptr) { - ASSERT(!g_object_is_floating(G_OBJECT(ptr))); + // There is no need to check the object reference is floating here because + // gst_task_init() always sinks it. return GRefPtr<GstTask>(ptr, GRefPtrAdopt); } @@ -126,7 +144,7 @@ template <> void derefGPtr<GstTask>(GstTask* ptr) template <> GRefPtr<GstBus> adoptGRef(GstBus* ptr) { - ASSERT(!g_object_is_floating(G_OBJECT(ptr))); + ASSERT(!ptr || !g_object_is_floating(ptr)); return GRefPtr<GstBus>(ptr, GRefPtrAdopt); } @@ -146,7 +164,7 @@ template <> void derefGPtr<GstBus>(GstBus* ptr) template <> GRefPtr<GstElementFactory> adoptGRef(GstElementFactory* ptr) { - ASSERT(!g_object_is_floating(G_OBJECT(ptr))); + ASSERT(!ptr || !g_object_is_floating(ptr)); return GRefPtr<GstElementFactory>(ptr, GRefPtrAdopt); } @@ -183,6 +201,45 @@ template<> void derefGPtr<GstBuffer>(GstBuffer* ptr) gst_buffer_unref(ptr); } +template<> GRefPtr<GstBufferList> adoptGRef(GstBufferList* ptr) +{ + return GRefPtr<GstBufferList>(ptr, GRefPtrAdopt); +} + +template<> GstBufferList* refGPtr<GstBufferList>(GstBufferList* ptr) +{ + if (ptr) + gst_buffer_list_ref(ptr); + + return ptr; +} + +template<> void derefGPtr<GstBufferList>(GstBufferList* ptr) +{ + if (ptr) + gst_buffer_list_unref(ptr); +} + +template<> GRefPtr<GstBufferPool> adoptGRef(GstBufferPool* ptr) +{ + ASSERT(!ptr || !g_object_is_floating(ptr)); + return GRefPtr<GstBufferPool>(ptr, GRefPtrAdopt); +} + +template<> GstBufferPool* refGPtr<GstBufferPool>(GstBufferPool* ptr) +{ + if (ptr) + gst_object_ref_sink(GST_OBJECT(ptr)); + + return ptr; +} + +template<> void derefGPtr<GstBufferPool>(GstBufferPool* ptr) +{ + if (ptr) + gst_object_unref(ptr); +} + template<> GRefPtr<GstSample> adoptGRef(GstSample* ptr) { return GRefPtr<GstSample>(ptr, GRefPtrAdopt); @@ -248,7 +305,7 @@ template<> GRefPtr<GstToc> adoptGRef(GstToc* ptr) template<> GstToc* refGPtr<GstToc>(GstToc* ptr) { if (ptr) - gst_toc_ref(ptr); + return gst_toc_ref(ptr); return ptr; } @@ -258,5 +315,76 @@ template<> void derefGPtr<GstToc>(GstToc* ptr) if (ptr) gst_toc_unref(ptr); } + +template<> GRefPtr<GstMessage> adoptGRef(GstMessage* ptr) +{ + return GRefPtr<GstMessage>(ptr, GRefPtrAdopt); } + +template<> GstMessage* refGPtr<GstMessage>(GstMessage* ptr) +{ + if (ptr) + return gst_message_ref(ptr); + + return ptr; +} + +template<> void derefGPtr<GstMessage>(GstMessage* ptr) +{ + if (ptr) + gst_message_unref(ptr); +} + +template <> GRefPtr<WebKitVideoSink> adoptGRef(WebKitVideoSink* ptr) +{ + ASSERT(!ptr || !g_object_is_floating(ptr)); + return GRefPtr<WebKitVideoSink>(ptr, GRefPtrAdopt); +} + +template <> WebKitVideoSink* refGPtr<WebKitVideoSink>(WebKitVideoSink* ptr) +{ + if (ptr) + gst_object_ref_sink(GST_OBJECT(ptr)); + + return ptr; +} + +template <> void derefGPtr<WebKitVideoSink>(WebKitVideoSink* ptr) +{ + if (ptr) + gst_object_unref(GST_OBJECT(ptr)); +} + +template <> GRefPtr<WebKitWebSrc> adoptGRef(WebKitWebSrc* ptr) +{ + ASSERT(!ptr || !g_object_is_floating(ptr)); + return GRefPtr<WebKitWebSrc>(ptr, GRefPtrAdopt); +} + +// This method is only available for WebKitWebSrc and should not be used for any other type. +// This is only to work around a bug in GST where the URI downloader is not taking the ownership of WebKitWebSrc. +// See https://bugs.webkit.org/show_bug.cgi?id=144040. +GRefPtr<WebKitWebSrc> ensureGRef(WebKitWebSrc* ptr) +{ + if (ptr && g_object_is_floating(ptr)) + gst_object_ref_sink(GST_OBJECT(ptr)); + return GRefPtr<WebKitWebSrc>(ptr); +} + +template <> WebKitWebSrc* refGPtr<WebKitWebSrc>(WebKitWebSrc* ptr) +{ + if (ptr) + gst_object_ref_sink(GST_OBJECT(ptr)); + + return ptr; +} + +template <> void derefGPtr<WebKitWebSrc>(WebKitWebSrc* ptr) +{ + if (ptr) + gst_object_unref(GST_OBJECT(ptr)); +} + +} // namespace WTF + #endif // USE(GSTREAMER) |