diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog index 8e45c1305034..ff34ec1580a5 100644 --- a/Source/WebCore/ChangeLog +++ b/Source/WebCore/ChangeLog @@ -1,3 +1,25 @@ +2017-09-08 Zan Dobersek + + [GStreamer] Add GRefPtr specializations for GstGLDisplay, GstGLContext + https://bugs.webkit.org/show_bug.cgi?id=176543 + + Reviewed by Xabier Rodriguez-Calvar. + + Both GstGLDisplay and GstGLContext inherit from GstObject, meaning + gst_object_ref_sink() and gst_object_unref() should be used for + incrementing and decrementing reference count. Template specializations + for the adoptGRef(), refGPtr() and derefGPtr() are added for both types, + preventing GRefPtr<> from falling back to using g_object_ref() and + g_object_unref() for reference count modification purposes. + + * platform/graphics/gstreamer/GRefPtrGStreamer.cpp: + (WTF::adoptGRef): + (WTF::refGPtr): + (WTF::derefGPtr): + (WTF::refGPtr): + (WTF::derefGPtr): + * platform/graphics/gstreamer/GRefPtrGStreamer.h: + 2017-09-07 Joseph Pecoraro WebKit should claim that it can show responses for a broader range of JSON MIMETypes diff --git a/Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.cpp b/Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.cpp index d870fce721c7..a7654cc46c60 100644 --- a/Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.cpp +++ b/Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.cpp @@ -403,6 +403,50 @@ template <> void derefGPtr(WebKitWebSrc* ptr) gst_object_unref(GST_OBJECT(ptr)); } +#if USE(GSTREAMER_GL) + +template<> GRefPtr adoptGRef(GstGLDisplay* ptr) +{ + ASSERT(!ptr || !g_object_is_floating(ptr)); + return GRefPtr(ptr, GRefPtrAdopt); +} + +template<> GstGLDisplay* refGPtr(GstGLDisplay* ptr) +{ + if (ptr) + gst_object_ref_sink(GST_OBJECT(ptr)); + + return ptr; +} + +template<> void derefGPtr(GstGLDisplay* ptr) +{ + if (ptr) + gst_object_unref(GST_OBJECT(ptr)); +} + +template<> GRefPtr adoptGRef(GstGLContext* ptr) +{ + ASSERT(!ptr || !g_object_is_floating(ptr)); + return GRefPtr(ptr, GRefPtrAdopt); +} + +template<> GstGLContext* refGPtr(GstGLContext* ptr) +{ + if (ptr) + gst_object_ref_sink(GST_OBJECT(ptr)); + + return ptr; +} + +template<> void derefGPtr(GstGLContext* ptr) +{ + if (ptr) + gst_object_unref(GST_OBJECT(ptr)); +} + +#endif // USE(GSTREAMER_GL) + } // namespace WTF #endif // USE(GSTREAMER) diff --git a/Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.h b/Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.h index 49b24c952f04..a388ca36c758 100644 --- a/Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.h +++ b/Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.h @@ -43,6 +43,11 @@ typedef struct _GstQuery GstQuery; typedef struct _WebKitVideoSink WebKitVideoSink; typedef struct _WebKitWebSrc WebKitWebSrc; +#if USE(GSTREAMER_GL) +typedef struct _GstGLDisplay GstGLDisplay; +typedef struct _GstGLContext GstGLContext; +#endif + namespace WTF { template<> GRefPtr adoptGRef(GstElement* ptr); @@ -122,6 +127,16 @@ GRefPtr ensureGRef(WebKitWebSrc* ptr); template<> WebKitWebSrc* refGPtr(WebKitWebSrc* ptr); template<> void derefGPtr(WebKitWebSrc* ptr); +#if USE(GSTREAMER_GL) +template<> GRefPtr adoptGRef(GstGLDisplay* ptr); +template<> GstGLDisplay* refGPtr(GstGLDisplay* ptr); +template<> void derefGPtr(GstGLDisplay* ptr); + +template<> GRefPtr adoptGRef(GstGLContext* ptr); +template<> GstGLContext* refGPtr(GstGLContext* ptr); +template<> void derefGPtr(GstGLContext* ptr); +#endif + } // namespace WTF #endif // USE(GSTREAMER)