summaryrefslogtreecommitdiff
path: root/Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.cpp
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.cpp')
-rw-r--r--Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.cpp142
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)