[GStreamer] Convert GLVideoSink and WebKitWebSrc to WEBKIT_DEFINE_TYPE
authorphiln@webkit.org <philn@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 28 Nov 2019 12:52:36 +0000 (12:52 +0000)
committerphiln@webkit.org <philn@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 28 Nov 2019 12:52:36 +0000 (12:52 +0000)
https://bugs.webkit.org/show_bug.cgi?id=204674

Reviewed by Carlos Garcia Campos.

This is mostly a refactoring, simplifying the code-base a bit.

* platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:
(webKitGLVideoSinkConstructed):
(webKitGLVideoSinkFinalize):
(webkit_gl_video_sink_class_init):
* platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
(webkit_web_src_class_init):
(webKitWebSrcConstructed):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@252918 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp
Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp

index 3cfcaeb..84ef1db 100644 (file)
@@ -1,5 +1,22 @@
 2019-11-28  Philippe Normand  <pnormand@igalia.com>
 
+        [GStreamer] Convert GLVideoSink and WebKitWebSrc to WEBKIT_DEFINE_TYPE
+        https://bugs.webkit.org/show_bug.cgi?id=204674
+
+        Reviewed by Carlos Garcia Campos.
+
+        This is mostly a refactoring, simplifying the code-base a bit.
+
+        * platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:
+        (webKitGLVideoSinkConstructed):
+        (webKitGLVideoSinkFinalize):
+        (webkit_gl_video_sink_class_init):
+        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
+        (webkit_web_src_class_init):
+        (webKitWebSrcConstructed):
+
+2019-11-28  Philippe Normand  <pnormand@igalia.com>
+
         [GStreamer] Move GL video sink to its own GstBin sub-class
         https://bugs.webkit.org/show_bug.cgi?id=204624
 
index 8b00162..db13e88 100644 (file)
@@ -25,6 +25,8 @@
 #include "GLContext.h"
 #include "GStreamerCommon.h"
 #include "MediaPlayerPrivateGStreamer.h"
+#include <gst/app/gstappsink.h>
+#include <wtf/glib/WTFGType.h>
 
 #if USE(GLX)
 #include "GLContextGLX.h"
@@ -54,8 +56,6 @@
 #undef None
 #endif // PLATFORM(X11) && GST_GL_HAVE_PLATFORM_EGL
 
-#include <gst/app/gstappsink.h>
-
 using namespace WebCore;
 
 struct _WebKitGLVideoSinkPrivate {
@@ -73,16 +73,15 @@ GST_DEBUG_CATEGORY_STATIC(webkit_gl_video_sink_debug);
 #define GST_GL_CAPS_FORMAT "{ RGBx, RGBA, I420, Y444, YV12, Y41B, Y42B, NV12, NV21, VUYA }"
 static GstStaticPadTemplate sinkTemplate = GST_STATIC_PAD_TEMPLATE("sink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS_ANY);
 
-#define WEBKIT_GL_VIDEO_SINK_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_GL_VIDEO_SINK, WebKitGLVideoSinkPrivate))
-
 #define webkit_gl_video_sink_parent_class parent_class
-#define WEBKIT_GL_VIDEO_SINK_CATEGORY_INIT GST_DEBUG_CATEGORY_INIT(webkit_gl_video_sink_debug, "webkitglvideosink", 0, "GL video sink element");
-G_DEFINE_TYPE_WITH_CODE(WebKitGLVideoSink, webkit_gl_video_sink, GST_TYPE_BIN, WEBKIT_GL_VIDEO_SINK_CATEGORY_INIT);
+WEBKIT_DEFINE_TYPE_WITH_CODE(WebKitGLVideoSink, webkit_gl_video_sink, GST_TYPE_BIN,
+    GST_DEBUG_CATEGORY_INIT(webkit_gl_video_sink_debug, "webkitglvideosink", 0, "GL video sink element"))
 
-static void webkit_gl_video_sink_init(WebKitGLVideoSink* sink)
+static void webKitGLVideoSinkConstructed(GObject* object)
 {
-    sink->priv = WEBKIT_GL_VIDEO_SINK_GET_PRIVATE(sink);
-    new (sink->priv) WebKitGLVideoSinkPrivate();
+    GST_CALL_PARENT(G_OBJECT_CLASS, constructed, (object));
+
+    WebKitGLVideoSink* sink = WEBKIT_GL_VIDEO_SINK(object);
 
     sink->priv->appSink = gst_element_factory_make("appsink", "webkit-gl-video-appsink");
     ASSERT(sink->priv->appSink);
@@ -124,7 +123,7 @@ static void webkit_gl_video_sink_init(WebKitGLVideoSink* sink)
 
 void webKitGLVideoSinkFinalize(GObject* object)
 {
-    ASSERT(WTF::isMainThread());
+    ASSERT(isMainThread());
 
     WebKitGLVideoSink* sink = WEBKIT_GL_VIDEO_SINK(object);
     WebKitGLVideoSinkPrivate* priv = sink->priv;
@@ -132,9 +131,6 @@ void webKitGLVideoSinkFinalize(GObject* object)
     if (priv->mediaPlayerPrivate)
         g_signal_handlers_disconnect_by_data(priv->appSink.get(), priv->mediaPlayerPrivate);
 
-    // We used a placement new for construction, the destructor won't be called automatically.
-    priv->~_WebKitGLVideoSinkPrivate();
-
     GST_CALL_PARENT(G_OBJECT_CLASS, finalize, (object));
 }
 
@@ -294,14 +290,13 @@ static void webkit_gl_video_sink_class_init(WebKitGLVideoSinkClass* klass)
     GObjectClass* objectClass = G_OBJECT_CLASS(klass);
     GstElementClass* elementClass = GST_ELEMENT_CLASS(klass);
 
+    objectClass->constructed = webKitGLVideoSinkConstructed;
     objectClass->finalize = webKitGLVideoSinkFinalize;
 
     gst_element_class_add_pad_template(elementClass, gst_static_pad_template_get(&sinkTemplate));
-
     gst_element_class_set_static_metadata(elementClass, "WebKit GL video sink", "Sink/Video", "Renders video", "Philippe Normand <philn@igalia.com>");
 
     elementClass->change_state = GST_DEBUG_FUNCPTR(webKitGLVideoSinkChangeState);
-    g_type_class_add_private(klass, sizeof(WebKitGLVideoSinkPrivate));
 }
 
 void webKitGLVideoSinkSetMediaPlayerPrivate(WebKitGLVideoSink* sink, MediaPlayerPrivateGStreamer* player)
index b0fe319..aedbf68 100644 (file)
@@ -34,6 +34,7 @@
 #include <cstdint>
 #include <wtf/Condition.h>
 #include <wtf/Scope.h>
+#include <wtf/glib/WTFGType.h>
 #include <wtf/text/CString.h>
 
 using namespace WebCore;
@@ -90,7 +91,6 @@ enum MainThreadSourceNotification {
     Dispose = 1 << 2,
 };
 
-#define WEBKIT_WEB_SRC_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_WEB_SRC, WebKitWebSrcPrivate))
 struct _WebKitWebSrcPrivate {
     ~_WebKitWebSrcPrivate()
     {
@@ -164,7 +164,7 @@ GST_DEBUG_CATEGORY_STATIC(webkit_web_src_debug);
 
 static void webKitWebSrcUriHandlerInit(gpointer gIface, gpointer ifaceData);
 
-static void webKitWebSrcDispose(GObject*);
+static void webKitWebSrcConstructed(GObject*);
 static void webKitWebSrcSetProperty(GObject*, guint propertyID, const GValue*, GParamSpec*);
 static void webKitWebSrcGetProperty(GObject*, guint propertyID, GValue*, GParamSpec*);
 static GstStateChangeReturn webKitWebSrcChangeState(GstElement*, GstStateChange);
@@ -181,17 +181,16 @@ static gboolean webKitWebSrcUnLockStop(GstBaseSrc*);
 static void webKitWebSrcSetContext(GstElement*, GstContext*);
 
 #define webkit_web_src_parent_class parent_class
-// We split this out into another macro to avoid a check-webkit-style error.
-#define WEBKIT_WEB_SRC_CATEGORY_INIT GST_DEBUG_CATEGORY_INIT(webkit_web_src_debug, "webkitwebsrc", 0, "websrc element");
-G_DEFINE_TYPE_WITH_CODE(WebKitWebSrc, webkit_web_src, GST_TYPE_PUSH_SRC,
+WEBKIT_DEFINE_TYPE_WITH_CODE(WebKitWebSrc, webkit_web_src, GST_TYPE_PUSH_SRC,
     G_IMPLEMENT_INTERFACE(GST_TYPE_URI_HANDLER, webKitWebSrcUriHandlerInit);
-    WEBKIT_WEB_SRC_CATEGORY_INIT);
+    GST_DEBUG_CATEGORY_INIT(webkit_web_src_debug, "webkitwebsrc", 0, "websrc element");
+)
 
 static void webkit_web_src_class_init(WebKitWebSrcClass* klass)
 {
     GObjectClass* oklass = G_OBJECT_CLASS(klass);
 
-    oklass->dispose = webKitWebSrcDispose;
+    oklass->constructed = webKitWebSrcConstructed;
     oklass->set_property = webKitWebSrcSetProperty;
     oklass->get_property = webKitWebSrcGetProperty;
 
@@ -242,14 +241,11 @@ static void webkit_web_src_class_init(WebKitWebSrcClass* klass)
 
     GstPushSrcClass* pushSrcClass = GST_PUSH_SRC_CLASS(klass);
     pushSrcClass->create = GST_DEBUG_FUNCPTR(webKitWebSrcCreate);
-
-    g_type_class_add_private(klass, sizeof(WebKitWebSrcPrivate));
 }
 
-
 static void webkitWebSrcReset(WebKitWebSrc* src)
 {
-    WebKitWebSrcPrivate* priv = WEBKIT_WEB_SRC_GET_PRIVATE(src);
+    WebKitWebSrcPrivate* priv = src->priv;
 
     GST_DEBUG_OBJECT(src, "Resetting internal state");
     priv->haveSize = false;
@@ -261,12 +257,12 @@ static void webkitWebSrcReset(WebKitWebSrc* src)
     priv->size = 0;
 }
 
-static void webkit_web_src_init(WebKitWebSrc* src)
+static void webKitWebSrcConstructed(GObject* object)
 {
-    WebKitWebSrcPrivate* priv = WEBKIT_WEB_SRC_GET_PRIVATE(src);
+    GST_CALL_PARENT(G_OBJECT_CLASS, constructed, (object));
 
-    src->priv = priv;
-    new (priv) WebKitWebSrcPrivate();
+    WebKitWebSrc* src = WEBKIT_WEB_SRC(object);
+    WebKitWebSrcPrivate* priv = src->priv;
 
     priv->notifier = MainThreadNotifier<MainThreadSourceNotification>::create();
     priv->adapter = adoptGRef(gst_adapter_new());
@@ -277,15 +273,6 @@ static void webkit_web_src_init(WebKitWebSrc* src)
     gst_base_src_set_async(GST_BASE_SRC_CAST(src), TRUE);
 }
 
-static void webKitWebSrcDispose(GObject* object)
-{
-    WebKitWebSrcPrivate* priv = WEBKIT_WEB_SRC(object)->priv;
-
-    priv->~WebKitWebSrcPrivate();
-
-    GST_CALL_PARENT(G_OBJECT_CLASS, dispose, (object));
-}
-
 static void webKitWebSrcSetProperty(GObject* object, guint propID, const GValue* value, GParamSpec* pspec)
 {
     WebKitWebSrc* src = WEBKIT_WEB_SRC(object);