Skip to content

Commit

Permalink
Merge r221781 - [GStreamer] Add GRefPtr specializations for GstGLDisp…
Browse files Browse the repository at this point in the history
…lay, 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<GstGLDisplay>):
(WTF::derefGPtr<GstGLDisplay>):
(WTF::refGPtr<GstGLContext>):
(WTF::derefGPtr<GstGLContext>):
* platform/graphics/gstreamer/GRefPtrGStreamer.h:
  • Loading branch information
zdobersek authored and carlosgcampos committed Oct 16, 2017
1 parent 4ade207 commit 7028475
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 0 deletions.
22 changes: 22 additions & 0 deletions Source/WebCore/ChangeLog
@@ -1,3 +1,25 @@
2017-09-08 Zan Dobersek <zdobersek@igalia.com>

[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<GstGLDisplay>):
(WTF::derefGPtr<GstGLDisplay>):
(WTF::refGPtr<GstGLContext>):
(WTF::derefGPtr<GstGLContext>):
* platform/graphics/gstreamer/GRefPtrGStreamer.h:

2017-09-07 Joseph Pecoraro <pecoraro@apple.com>

WebKit should claim that it can show responses for a broader range of JSON MIMETypes
Expand Down
44 changes: 44 additions & 0 deletions Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.cpp
Expand Up @@ -403,6 +403,50 @@ template <> void derefGPtr<WebKitWebSrc>(WebKitWebSrc* ptr)
gst_object_unref(GST_OBJECT(ptr));
}

#if USE(GSTREAMER_GL)

template<> GRefPtr<GstGLDisplay> adoptGRef(GstGLDisplay* ptr)
{
ASSERT(!ptr || !g_object_is_floating(ptr));
return GRefPtr<GstGLDisplay>(ptr, GRefPtrAdopt);
}

template<> GstGLDisplay* refGPtr<GstGLDisplay>(GstGLDisplay* ptr)
{
if (ptr)
gst_object_ref_sink(GST_OBJECT(ptr));

return ptr;
}

template<> void derefGPtr<GstGLDisplay>(GstGLDisplay* ptr)
{
if (ptr)
gst_object_unref(GST_OBJECT(ptr));
}

template<> GRefPtr<GstGLContext> adoptGRef(GstGLContext* ptr)
{
ASSERT(!ptr || !g_object_is_floating(ptr));
return GRefPtr<GstGLContext>(ptr, GRefPtrAdopt);
}

template<> GstGLContext* refGPtr<GstGLContext>(GstGLContext* ptr)
{
if (ptr)
gst_object_ref_sink(GST_OBJECT(ptr));

return ptr;
}

template<> void derefGPtr<GstGLContext>(GstGLContext* ptr)
{
if (ptr)
gst_object_unref(GST_OBJECT(ptr));
}

#endif // USE(GSTREAMER_GL)

} // namespace WTF

#endif // USE(GSTREAMER)
15 changes: 15 additions & 0 deletions Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.h
Expand Up @@ -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<GstElement> adoptGRef(GstElement* ptr);
Expand Down Expand Up @@ -122,6 +127,16 @@ GRefPtr<WebKitWebSrc> ensureGRef(WebKitWebSrc* ptr);
template<> WebKitWebSrc* refGPtr<WebKitWebSrc>(WebKitWebSrc* ptr);
template<> void derefGPtr<WebKitWebSrc>(WebKitWebSrc* ptr);

#if USE(GSTREAMER_GL)
template<> GRefPtr<GstGLDisplay> adoptGRef(GstGLDisplay* ptr);
template<> GstGLDisplay* refGPtr<GstGLDisplay>(GstGLDisplay* ptr);
template<> void derefGPtr<GstGLDisplay>(GstGLDisplay* ptr);

template<> GRefPtr<GstGLContext> adoptGRef(GstGLContext* ptr);
template<> GstGLContext* refGPtr<GstGLContext>(GstGLContext* ptr);
template<> void derefGPtr<GstGLContext>(GstGLContext* ptr);
#endif

} // namespace WTF

#endif // USE(GSTREAMER)
Expand Down

0 comments on commit 7028475

Please sign in to comment.