gl: allow per feature registration
authorStéphane Cerveau <scerveau@collabora.com>
Fri, 11 Dec 2020 14:42:32 +0000 (15:42 +0100)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Tue, 16 Mar 2021 17:58:59 +0000 (17:58 +0000)
Split plugin into features including
dynamic types which can be indiviually
registered during a static build.

More details here:

https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1029>

35 files changed:
ext/gl/caopengllayersink.m
ext/gl/gstglalpha.c
ext/gl/gstglbumper.c
ext/gl/gstglcolorbalance.c
ext/gl/gstglcolorconvertelement.c
ext/gl/gstglcolorscale.c
ext/gl/gstgldeinterlace.c
ext/gl/gstgldifferencematte.c
ext/gl/gstgldownloadelement.c
ext/gl/gstgleffects.c
ext/gl/gstglelement.c [new file with mode: 0644]
ext/gl/gstglelements.h [new file with mode: 0644]
ext/gl/gstglfilterapp.c
ext/gl/gstglfilterbin.c
ext/gl/gstglfiltercube.c
ext/gl/gstglfilterglass.c
ext/gl/gstglfilterreflectedscreen.c
ext/gl/gstglfiltershader.c
ext/gl/gstglimagesink.c
ext/gl/gstglmixerbin.c
ext/gl/gstglmosaic.c
ext/gl/gstgloverlay.c
ext/gl/gstgloverlaycompositorelement.c
ext/gl/gstglsinkbin.c
ext/gl/gstglsrcbin.c
ext/gl/gstglstereomix.c
ext/gl/gstglstereosplit.c
ext/gl/gstgltestsrc.c
ext/gl/gstgltransformation.c
ext/gl/gstgluploadelement.c
ext/gl/gstglvideoflip.c
ext/gl/gstglvideomixer.c
ext/gl/gstglviewconvert.c
ext/gl/gstopengl.c
ext/gl/meson.build

index 5c7b476..864dd1a 100644 (file)
@@ -30,6 +30,7 @@
 #include "config.h"
 #endif
 
+#include "gstglelements.h"
 #include "caopengllayersink.h"
 #include "gstglsinkbin.h"
 #include <QuartzCore/QuartzCore.h>
@@ -43,6 +44,11 @@ typedef GstGLSinkBinClass GstCAOpenGLLayerSinkBinClass;
 G_DEFINE_TYPE (GstCAOpenGLLayerSinkBin, gst_ca_opengl_layer_sink_bin,
     GST_TYPE_GL_SINK_BIN);
 
+#define _do_init \
+    gl_element_init (plugin);
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (caopengllayersink, "caopengllayersink",
+    GST_RANK_NONE, GST_TYPE_CA_OPENGL_LAYER_SINK, _do_init);
+
 enum
 {
   PROP_BIN_0,
index ad1e0a8..c8f5a87 100644 (file)
@@ -45,6 +45,7 @@
 #include "config.h"
 #endif
 
+#include "gstglelements.h"
 #include "gstglalpha.h"
 #include <string.h>
 #include <math.h>
@@ -222,6 +223,8 @@ static void gst_gl_alpha_get_property (GObject * object, guint prop_id,
 
 #define gst_gl_alpha_parent_class parent_class
 G_DEFINE_TYPE (GstGLAlpha, gst_gl_alpha, GST_TYPE_GL_FILTER);
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (glalpha, "glalpha",
+    GST_RANK_NONE, GST_TYPE_GL_ALPHA, gl_element_init (plugin));
 
 static gboolean
 gst_gl_alpha_is_passthrough (GstGLAlpha * glalpha)
index dbf01ba..56152a6 100644 (file)
@@ -39,6 +39,8 @@
 
 #include <stdlib.h>
 #include <png.h>
+
+#include "gstglelements.h"
 #include "gstglbumper.h"
 
 #if PNG_LIBPNG_VER >= 10400
@@ -60,6 +62,8 @@ enum
 
 G_DEFINE_TYPE_WITH_CODE (GstGLBumper, gst_gl_bumper, GST_TYPE_GL_FILTER,
     DEBUG_INIT);
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (glbumper, "glbumper",
+    GST_RANK_NONE, GST_TYPE_GL_BUMPER, gl_element_init (plugin));
 
 static void gst_gl_bumper_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec);
index acee623..f543a4c 100644 (file)
@@ -43,6 +43,7 @@
 #include <gst/math-compat.h>
 #include <gst/video/colorbalance.h>
 
+#include "gstglelements.h"
 #include "gstglcolorbalance.h"
 
 GST_DEBUG_CATEGORY_STATIC (glcolorbalance_debug);
@@ -131,6 +132,8 @@ G_DEFINE_TYPE_WITH_CODE (GstGLColorBalance, gst_gl_color_balance,
     GST_TYPE_GL_FILTER,
     G_IMPLEMENT_INTERFACE (GST_TYPE_COLOR_BALANCE,
         gst_gl_color_balance_colorbalance_init));
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (glcolorbalance, "glcolorbalance",
+    GST_RANK_NONE, GST_TYPE_GL_COLOR_BALANCE, gl_element_init (plugin));
 
 static GstCaps *
 gcb_transform_internal_caps (GstGLFilter * filter,
index f9f0ad7..f4b3176 100644 (file)
@@ -24,6 +24,8 @@
 #endif
 
 #include <gst/gl/gl.h>
+
+#include "gstglelements.h"
 #include "gstglcolorconvertelement.h"
 
 GST_DEBUG_CATEGORY_STATIC (gst_gl_color_convert_element_debug);
@@ -35,6 +37,8 @@ G_DEFINE_TYPE_WITH_CODE (GstGLColorConvertElement, gst_gl_color_convert_element,
     GST_DEBUG_CATEGORY_INIT (gst_gl_color_convert_element_debug,
         "glconvertelement", 0, "convert");
     );
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (glcolorconvert, "glcolorconvert",
+    GST_RANK_NONE, GST_TYPE_GL_COLOR_CONVERT_ELEMENT, gl_element_init (plugin));
 
 static gboolean gst_gl_color_convert_element_gl_set_caps (GstGLBaseFilter *
     base_filter, GstCaps * in_caps, GstCaps * out_caps);
index 26fff8e..93284bb 100644 (file)
@@ -44,6 +44,7 @@
 #include "config.h"
 #endif
 
+#include "gstglelements.h"
 #include "gstglcolorscale.h"
 
 #define GST_CAT_DEFAULT gst_gl_colorscale_debug
@@ -60,6 +61,8 @@ enum
 #define gst_gl_colorscale_parent_class parent_class
 G_DEFINE_TYPE_WITH_CODE (GstGLColorscale, gst_gl_colorscale,
     GST_TYPE_GL_FILTER, DEBUG_INIT);
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (glcolorscale, "glcolorscale",
+    GST_RANK_NONE, GST_TYPE_GL_COLORSCALE, gl_element_init (plugin));
 
 static void gst_gl_colorscale_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec);
index d98b7c9..e65496f 100644 (file)
@@ -38,6 +38,7 @@
 
 #include <gst/gl/gstglfuncs.h>
 
+#include "gstglelements.h"
 #include "gstgldeinterlace.h"
 
 #define GST_CAT_DEFAULT gst_gl_deinterlace_debug
@@ -54,6 +55,8 @@ enum
 #define gst_gl_deinterlace_parent_class parent_class
 G_DEFINE_TYPE_WITH_CODE (GstGLDeinterlace, gst_gl_deinterlace,
     GST_TYPE_GL_FILTER, DEBUG_INIT);
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (gldeinterlace, "gldeinterlace",
+    GST_RANK_NONE, GST_TYPE_GL_DEINTERLACE, gl_element_init (plugin));
 
 static void gst_gl_deinterlace_set_property (GObject * object,
     guint prop_id, const GValue * value, GParamSpec * pspec);
index 69ac291..ff376ec 100644 (file)
@@ -41,6 +41,7 @@
 
 #include <gst/gl/gstglfuncs.h>
 
+#include "gstglelements.h"
 #include "gstgldifferencematte.h"
 #include "effects/gstgleffectssources.h"
 
@@ -58,6 +59,8 @@ GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
 #define gst_gl_differencematte_parent_class parent_class
 G_DEFINE_TYPE_WITH_CODE (GstGLDifferenceMatte, gst_gl_differencematte,
     GST_TYPE_GL_FILTER, DEBUG_INIT);
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (gldifferencematte, "gldifferencematte",
+    GST_RANK_NONE, GST_TYPE_GL_DIFFERENCEMATTE, gl_element_init (plugin));
 
 static void gst_gl_differencematte_set_property (GObject * object,
     guint prop_id, const GValue * value, GParamSpec * pspec);
index dd8840e..2b65088 100644 (file)
@@ -28,6 +28,7 @@
 #include <gst/allocators/gstdmabuf.h>
 #endif
 
+#include "gstglelements.h"
 #include "gstgldownloadelement.h"
 
 GST_DEBUG_CATEGORY_STATIC (gst_gl_download_element_debug);
@@ -38,6 +39,8 @@ G_DEFINE_TYPE_WITH_CODE (GstGLDownloadElement, gst_gl_download_element,
     GST_TYPE_GL_BASE_FILTER,
     GST_DEBUG_CATEGORY_INIT (gst_gl_download_element_debug, "gldownloadelement",
         0, "download element"););
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (gldownload, "gldownload",
+    GST_RANK_NONE, GST_TYPE_GL_DOWNLOAD_ELEMENT, gl_element_init (plugin));
 
 static gboolean gst_gl_download_element_start (GstBaseTransform * bt);
 static gboolean gst_gl_download_element_stop (GstBaseTransform * bt);
index 70f727a..1c2c821 100644 (file)
@@ -36,6 +36,7 @@
 #include "config.h"
 #endif
 
+#include "gstglelements.h"
 #include "gstgleffects.h"
 
 #define GST_CAT_DEFAULT gst_gl_effects_debug
@@ -56,6 +57,15 @@ enum
 G_DEFINE_TYPE_WITH_CODE (GstGLEffects, gst_gl_effects, GST_TYPE_GL_FILTER,
     DEBUG_INIT);
 
+static gboolean
+gst_element_init_gleffects (GstPlugin * plugin)
+{
+  gl_element_init (plugin);
+  return gst_gl_effects_register_filters (plugin, GST_RANK_NONE);
+}
+
+GST_ELEMENT_REGISTER_DEFINE_CUSTOM (gleffects, gst_element_init_gleffects);
+
 static void gst_gl_effects_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec);
 static void gst_gl_effects_get_property (GObject * object, guint prop_id,
diff --git a/ext/gl/gstglelement.c b/ext/gl/gstglelement.c
new file mode 100644 (file)
index 0000000..1662b73
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * GStreamer
+ * Copyright (C) 2003 Julien Moutte <julien@moutte.net>
+ * Copyright (C) 2005,2006,2007 David A. Schleef <ds@schleef.org>
+ * Copyright (C) 2008 Julien Isorce <julien.isorce@gmail.com>
+ * Copyright (C) 2008 Filippo Argiolas <filippo.argiolas@gmail.com>
+ * Copyright (C) 2020 Huawei Technologies Co., Ltd.
+ *   @Author: Stéphane Cerveau <scerveau@collabora.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstglelements.h"
+
+#include "gstglmixerbin.h"
+#include "gstglvideomixer.h"
+#include "gstglstereomix.h"
+
+#if GST_GL_HAVE_WINDOW_COCOA
+/* avoid including Cocoa/CoreFoundation from a C file... */
+extern GType gst_ca_opengl_layer_sink_bin_get_type (void);
+#endif
+
+#if GST_GL_HAVE_WINDOW_DISPMANX
+extern void bcm_host_init (void);
+#endif
+
+#if GST_GL_HAVE_WINDOW_X11
+#include <X11/Xlib.h>
+#endif
+
+#define GST_CAT_DEFAULT gst_gl_gstgl_debug
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
+
+void
+gl_element_init (GstPlugin * plugin)
+{
+  static gsize res = FALSE;
+  if (g_once_init_enter (&res)) {
+    GST_DEBUG_CATEGORY_INIT (gst_gl_gstgl_debug, "gstopengl", 0, "gstopengl");
+
+#if GST_GL_HAVE_WINDOW_DISPMANX
+    GST_DEBUG ("Initialize BCM host");
+    bcm_host_init ();
+#endif
+
+#if GST_GL_HAVE_WINDOW_X11
+    if (g_getenv ("GST_GL_XINITTHREADS"))
+      XInitThreads ();
+#endif
+    g_once_init_leave (&res, TRUE);
+  }
+}
diff --git a/ext/gl/gstglelements.h b/ext/gl/gstglelements.h
new file mode 100644 (file)
index 0000000..7f560e4
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2003 Julien Moutte <julien@moutte.net>
+ * Copyright (C) 2005,2006,2007 David A. Schleef <ds@schleef.org>
+ * Copyright (C) 2008 Julien Isorce <julien.isorce@gmail.com>
+ * Copyright (C) 2008 Filippo Argiolas <filippo.argiolas@gmail.com>
+ * Copyright (C) 2020 Huawei Technologies Co., Ltd.
+ *   @Author: Julian Bouzas <julian.bouzas@collabora.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_GL_ELEMENTS_H__
+#define __GST_GL_ELEMENTS_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+G_GNUC_INTERNAL void gl_element_init (GstPlugin * plugin);
+
+GST_ELEMENT_REGISTER_DECLARE (glimagesink);
+GST_ELEMENT_REGISTER_DECLARE (glimagesinkelement);
+GST_ELEMENT_REGISTER_DECLARE (glupload);
+GST_ELEMENT_REGISTER_DECLARE (gldownload);
+GST_ELEMENT_REGISTER_DECLARE (glcolorconvert);
+GST_ELEMENT_REGISTER_DECLARE (glcolorbalance);
+GST_ELEMENT_REGISTER_DECLARE (glfilterbin);
+GST_ELEMENT_REGISTER_DECLARE (glsinkbin);
+GST_ELEMENT_REGISTER_DECLARE (glsrcbin);
+GST_ELEMENT_REGISTER_DECLARE (glmixerbin);
+GST_ELEMENT_REGISTER_DECLARE (glfiltercube);
+GST_ELEMENT_REGISTER_DECLARE (gltransformation);
+GST_ELEMENT_REGISTER_DECLARE (glvideoflip);
+GST_ELEMENT_REGISTER_DECLARE (gleffects);
+GST_ELEMENT_REGISTER_DECLARE (glcolorscale);
+GST_ELEMENT_REGISTER_DECLARE (glvideomixer);
+GST_ELEMENT_REGISTER_DECLARE (glvideomixerelement);
+GST_ELEMENT_REGISTER_DECLARE (glshader);
+GST_ELEMENT_REGISTER_DECLARE (glfilterapp);
+GST_ELEMENT_REGISTER_DECLARE (glviewconvert);
+GST_ELEMENT_REGISTER_DECLARE (glstereosplit);
+GST_ELEMENT_REGISTER_DECLARE (glstereomix);
+GST_ELEMENT_REGISTER_DECLARE (gltestsrc);
+GST_ELEMENT_REGISTER_DECLARE (gldeinterlace);
+GST_ELEMENT_REGISTER_DECLARE (glalpha);
+GST_ELEMENT_REGISTER_DECLARE (gloverlaycompositor);
+GST_ELEMENT_REGISTER_DECLARE (gloverlay);
+GST_ELEMENT_REGISTER_DECLARE (glfilterglass);
+GST_ELEMENT_REGISTER_DECLARE (glfilterreflectedscreen);
+GST_ELEMENT_REGISTER_DECLARE (glmosaic);
+GST_ELEMENT_REGISTER_DECLARE (gldifferencematte);
+GST_ELEMENT_REGISTER_DECLARE (glbumper);
+GST_ELEMENT_REGISTER_DECLARE (caopengllayersink);
+
+G_END_DECLS
+
+#endif /* __GST_GL_ELEMENTS_H__ */
index 042645b..8150810 100644 (file)
@@ -38,6 +38,7 @@
 #include "config.h"
 #endif
 
+#include "gstglelements.h"
 #include "gstglfilterapp.h"
 
 #define GST_CAT_DEFAULT gst_gl_filter_app_debug
@@ -58,6 +59,8 @@ static guint gst_gl_filter_app_signals[LAST_SIGNAL] = { 0 };
 #define gst_gl_filter_app_parent_class parent_class
 G_DEFINE_TYPE_WITH_CODE (GstGLFilterApp, gst_gl_filter_app,
     GST_TYPE_GL_FILTER, DEBUG_INIT);
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (glfilterapp, "glfilterapp",
+    GST_RANK_NONE, GST_TYPE_GL_FILTER_APP, gl_element_init (plugin));
 
 static void gst_gl_filter_app_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec);
index 46b6187..0c2607e 100644 (file)
@@ -22,6 +22,7 @@
 #include "config.h"
 #endif
 
+#include "gstglelements.h"
 #include "gstglfilterbin.h"
 
 #define GST_CAT_DEFAULT gst_gl_filter_bin_debug
@@ -47,6 +48,8 @@ static guint gst_gl_filter_bin_signals[LAST_SIGNAL] = { 0 };
 G_DEFINE_TYPE_WITH_CODE (GstGLFilterBin, gst_gl_filter_bin,
     GST_TYPE_BIN, GST_DEBUG_CATEGORY_INIT (gst_gl_filter_bin_debug,
         "glfilterbin", 0, "glfilterbin element"););
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (glfilterbin, "glfilterbin",
+    GST_RANK_NONE, GST_TYPE_GL_FILTER_BIN, gl_element_init (plugin));
 
 static void gst_gl_filter_bin_finalize (GObject * object);
 static void gst_gl_filter_bin_get_property (GObject * object, guint prop_id,
index d82c37d..1729a06 100644 (file)
@@ -45,6 +45,8 @@
 #endif
 
 #include <gst/gl/gstglapi.h>
+
+#include "gstglelements.h"
 #include "gstglfiltercube.h"
 #include "gstglutils.h"
 
@@ -68,6 +70,8 @@ enum
 #define gst_gl_filter_cube_parent_class parent_class
 G_DEFINE_TYPE_WITH_CODE (GstGLFilterCube, gst_gl_filter_cube,
     GST_TYPE_GL_FILTER, DEBUG_INIT);
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (glfiltercube, "glfiltercube",
+    GST_RANK_NONE, GST_TYPE_GL_FILTER_CUBE, gl_element_init (plugin));
 
 static void gst_gl_filter_cube_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec);
index fef81fc..7cb1b96 100644 (file)
@@ -43,6 +43,7 @@
 #include <math.h>
 #include <gst/gl/gstglfuncs.h>
 
+#include "gstglelements.h"
 #include "gstglfilterglass.h"
 
 #include "gstglutils.h"
@@ -60,6 +61,8 @@ enum
 #define gst_gl_filter_glass_parent_class parent_class
 G_DEFINE_TYPE_WITH_CODE (GstGLFilterGlass, gst_gl_filter_glass,
     GST_TYPE_GL_FILTER, DEBUG_INIT);
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (glfilterglass, "glfilterglass",
+    GST_RANK_NONE, GST_TYPE_GL_FILTER_GLASS, gl_element_init (plugin));
 
 static void gst_gl_filter_glass_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec);
index 566b28c..961b6e7 100644 (file)
@@ -36,6 +36,8 @@
 #endif
 
 #include <math.h>
+
+#include "gstglelements.h"
 #include "gstglfilterreflectedscreen.h"
 
 #define GST_CAT_DEFAULT gst_gl_filter_reflected_screen_debug
@@ -58,6 +60,9 @@ enum
 
 G_DEFINE_TYPE_WITH_CODE (GstGLFilterReflectedScreen,
     gst_gl_filter_reflected_screen, GST_TYPE_GL_FILTER, DEBUG_INIT);
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (glfilterreflectedscreen,
+    "glfilterreflectedscreen", GST_RANK_NONE,
+    GST_TYPE_GL_FILTER_REFLECTED_SCREEN, gl_element_init (plugin));
 
 static void gst_gl_filter_reflected_screen_set_property (GObject * object,
     guint prop_id, const GValue * value, GParamSpec * pspec);
index 71a1a02..543a27f 100644 (file)
@@ -58,6 +58,7 @@
 
 #include <gst/gl/gstglfuncs.h>
 
+#include "gstglelements.h"
 #include "gstglfiltershader.h"
 #ifdef HAVE_GRAPHENE
 #include <graphene-gobject.h>
@@ -91,6 +92,8 @@ GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
 #define gst_gl_filtershader_parent_class parent_class
 G_DEFINE_TYPE_WITH_CODE (GstGLFilterShader, gst_gl_filtershader,
     GST_TYPE_GL_FILTER, DEBUG_INIT);
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (glshader, "glshader",
+    GST_RANK_NONE, GST_TYPE_GL_FILTERSHADER, gl_element_init (plugin));
 
 static void gst_gl_filtershader_finalize (GObject * object);
 static void gst_gl_filtershader_set_property (GObject * object, guint prop_id,
index 72d8ac6..aca3932 100644 (file)
@@ -87,6 +87,7 @@
 #include <gst/video/navigation.h>
 #include <gst/video/gstvideoaffinetransformationmeta.h>
 
+#include "gstglelements.h"
 #include "gstglimagesink.h"
 #include "gstglsinkbin.h"
 #include "gstglutils.h"
@@ -109,6 +110,9 @@ typedef GstGLSinkBin GstGLImageSinkBin;
 typedef GstGLSinkBinClass GstGLImageSinkBinClass;
 
 G_DEFINE_TYPE (GstGLImageSinkBin, gst_gl_image_sink_bin, GST_TYPE_GL_SINK_BIN);
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (glimagesink, "glimagesink",
+    GST_RANK_SECONDARY, gst_gl_image_sink_bin_get_type (),
+    gl_element_init (plugin));
 
 enum
 {
@@ -665,6 +669,8 @@ G_DEFINE_TYPE_WITH_CODE (GstGLImageSink, gst_glimage_sink,
         gst_glimage_sink_navigation_interface_init);
     GST_DEBUG_CATEGORY_INIT (gst_debug_glimage_sink, "glimagesink", 0,
         "OpenGL Video Sink"));
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (glimagesinkelement, "glimagesinkelement",
+    GST_RANK_NONE, gst_glimage_sink_get_type (), gl_element_init (plugin));
 
 static void
 gst_glimage_sink_class_init (GstGLImageSinkClass * klass)
index 4314a60..e5c4d23 100644 (file)
@@ -25,6 +25,7 @@
 
 #include <gst/gst.h>
 
+#include "gstglelements.h"
 #include "gstglmixerbin.h"
 
 #define GST_CAT_DEFAULT gst_gl_mixer_bin_debug
@@ -139,6 +140,8 @@ G_DEFINE_TYPE_WITH_CODE (GstGLMixerBin, gst_gl_mixer_bin, GST_TYPE_BIN,
     G_ADD_PRIVATE (GstGLMixerBin)
     G_IMPLEMENT_INTERFACE (GST_TYPE_CHILD_PROXY,
         gst_gl_mixer_bin_child_proxy_init));
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (glmixerbin, "glmixerbin",
+    GST_RANK_NONE, GST_TYPE_GL_MIXER_BIN, gl_element_init (plugin));
 
 static guint gst_gl_mixer_bin_signals[LAST_SIGNAL] = { 0 };
 
index baf5cfc..5057829 100644 (file)
@@ -42,6 +42,7 @@
 #include "config.h"
 #endif
 
+#include "gstglelements.h"
 #include "gstglmosaic.h"
 #include "gstglutils.h"
 
@@ -63,6 +64,8 @@ G_DEFINE_TYPE_WITH_CODE (GstGLMosaic, gst_gl_mosaic, GST_TYPE_GL_MIXER,
     G_IMPLEMENT_INTERFACE (GST_TYPE_CHILD_PROXY,
         gst_gl_mosaic_child_proxy_init);
     DEBUG_INIT);
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (glmosaic, "glmosaic",
+    GST_RANK_NONE, GST_TYPE_GL_MOSAIC, gl_element_init (plugin));
 
 static GstPad *gst_gl_mosaic_request_new_pad (GstElement * element,
     GstPadTemplate * temp, const gchar * req_name, const GstCaps * caps);
index 55ce4bc..7fcd8e7 100644 (file)
@@ -39,6 +39,7 @@
 #include <gst/base/gsttypefindhelper.h>
 #include <gst/gl/gstglconfig.h>
 
+#include "gstglelements.h"
 #include "gstgloverlay.h"
 #include "effects/gstgleffectssources.h"
 #include "gstglutils.h"
@@ -65,6 +66,8 @@ GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
 #define gst_gl_overlay_parent_class parent_class
 G_DEFINE_TYPE_WITH_CODE (GstGLOverlay, gst_gl_overlay, GST_TYPE_GL_FILTER,
     DEBUG_INIT);
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (gloverlay, "gloverlay",
+    GST_RANK_NONE, GST_TYPE_GL_OVERLAY, gl_element_init (plugin));
 
 static gboolean gst_gl_overlay_set_caps (GstGLFilter * filter,
     GstCaps * incaps, GstCaps * outcaps);
index 946cf98..80ba9f3 100644 (file)
@@ -30,6 +30,7 @@
 #include <gst/gl/gstglfuncs.h>
 #include <gst/video/video.h>
 
+#include "gstglelements.h"
 #include "gstgloverlaycompositorelement.h"
 
 enum
@@ -46,6 +47,9 @@ GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
 #define gst_gl_overlay_compositor_element_parent_class parent_class
 G_DEFINE_TYPE_WITH_CODE (GstGLOverlayCompositorElement,
     gst_gl_overlay_compositor_element, GST_TYPE_GL_FILTER, DEBUG_INIT);
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (gloverlaycompositor,
+    "gloverlaycompositor", GST_RANK_NONE,
+    GST_TYPE_GL_OVERLAY_COMPOSITOR_ELEMENT, gl_element_init (plugin));
 
 static GstStaticPadTemplate overlay_sink_pad_template =
     GST_STATIC_PAD_TEMPLATE ("sink",
index a4d3bfd..70a2570 100644 (file)
@@ -26,6 +26,7 @@
 #include <gst/video/navigation.h>
 #include <gst/controller/gstproxycontrolbinding.h>
 
+#include "gstglelements.h"
 #include "gstglsinkbin.h"
 
 GST_DEBUG_CATEGORY (gst_debug_gl_sink_bin);
@@ -105,6 +106,8 @@ G_DEFINE_TYPE_WITH_CODE (GstGLSinkBin, gst_gl_sink_bin,
         gst_gl_sink_bin_color_balance_init)
     GST_DEBUG_CATEGORY_INIT (gst_debug_gl_sink_bin, "glimagesink", 0,
         "OpenGL Video Sink Bin"));
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (glsinkbin, "glsinkbin",
+    GST_RANK_NONE, GST_TYPE_GL_SINK_BIN, gl_element_init (plugin));
 
 static void
 gst_gl_sink_bin_class_init (GstGLSinkBinClass * klass)
index fe9a040..5872270 100644 (file)
@@ -22,6 +22,7 @@
 #include "config.h"
 #endif
 
+#include "gstglelements.h"
 #include "gstglsrcbin.h"
 
 GST_DEBUG_CATEGORY (gst_debug_gl_src_bin);
@@ -62,6 +63,8 @@ G_DEFINE_TYPE_WITH_CODE (GstGLSrcBin, gst_gl_src_bin,
     GST_TYPE_BIN,
     GST_DEBUG_CATEGORY_INIT (gst_debug_gl_src_bin, "glsrcbin", 0,
         "OpenGL Video Src Bin"));
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (glsrcbin, "glsrcbin",
+    GST_RANK_NONE, GST_TYPE_GL_SRC_BIN, gl_element_init (plugin));
 
 static void
 gst_gl_src_bin_class_init (GstGLSrcBinClass * klass)
index fd9b5c3..bb71a2c 100644 (file)
@@ -61,6 +61,7 @@
 #include "config.h"
 #endif
 
+#include "gstglelements.h"
 #include "gstglstereomix.h"
 
 #define GST_CAT_DEFAULT gst_gl_stereo_mix_debug
@@ -85,6 +86,8 @@ static void gst_gl_stereo_mix_child_proxy_init (gpointer g_iface,
 G_DEFINE_TYPE_WITH_CODE (GstGLStereoMix, gst_gl_stereo_mix, GST_TYPE_GL_MIXER,
     G_IMPLEMENT_INTERFACE (GST_TYPE_CHILD_PROXY,
         gst_gl_stereo_mix_child_proxy_init));
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (glstereomix, "glstereomix",
+    GST_RANK_NONE, GST_TYPE_GL_STEREO_MIX, gl_element_init (plugin));
 
 static GstCaps *_update_caps (GstVideoAggregator * vagg, GstCaps * caps);
 static gboolean _negotiated_caps (GstAggregator * aggregator, GstCaps * caps);
index d7d0ef9..283e450 100644 (file)
@@ -36,6 +36,7 @@
 #include "config.h"
 #endif
 
+#include "gstglelements.h"
 #include "gstglstereosplit.h"
 
 #define GST_CAT_DEFAULT gst_gl_stereosplit_debug
@@ -47,6 +48,8 @@ GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
 
 G_DEFINE_TYPE_WITH_CODE (GstGLStereoSplit, gst_gl_stereosplit,
     GST_TYPE_ELEMENT, DEBUG_INIT);
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (glstereosplit, "glstereosplit",
+    GST_RANK_NONE, GST_TYPE_GL_STEREOSPLIT, gl_element_init (plugin));
 
 static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK, GST_PAD_ALWAYS,
index a959b7d..b3cc83f 100644 (file)
@@ -45,6 +45,7 @@
 #include <gst/gl/gstglfuncs.h>
 #include <gst/gst-i18n-plugin.h>
 
+#include "gstglelements.h"
 #include "gstgltestsrc.h"
 #include "gltestsrc.h"
 
@@ -74,6 +75,8 @@ static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
 
 #define gst_gl_test_src_parent_class parent_class
 G_DEFINE_TYPE (GstGLTestSrc, gst_gl_test_src, GST_TYPE_GL_BASE_SRC);
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (gltestsrc, "gltestsrc",
+    GST_RANK_NONE, GST_TYPE_GL_TEST_SRC, gl_element_init (plugin));
 
 static void gst_gl_test_src_set_pattern (GstGLTestSrc * gltestsrc,
     int pattern_type);
index 66858a6..a5ca200 100644 (file)
@@ -45,6 +45,7 @@
 #include "config.h"
 #endif
 
+#include "gstglelements.h"
 #include "gstgltransformation.h"
 
 #include <gst/gl/gstglapi.h>
@@ -89,6 +90,8 @@ enum
 
 G_DEFINE_TYPE_WITH_CODE (GstGLTransformation, gst_gl_transformation,
     GST_TYPE_GL_FILTER, DEBUG_INIT);
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (gltransformation, "gltransformation",
+    GST_RANK_NONE, GST_TYPE_GL_TRANSFORMATION, gl_element_init (plugin));
 
 static void gst_gl_transformation_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec);
index 1cda4c2..2a28ed7 100644 (file)
@@ -25,6 +25,8 @@
 #include <stdio.h>
 
 #include <gst/gl/gl.h>
+
+#include "gstglelements.h"
 #include "gstgluploadelement.h"
 
 GST_DEBUG_CATEGORY_STATIC (gst_gl_upload_element_debug);
@@ -35,6 +37,8 @@ G_DEFINE_TYPE_WITH_CODE (GstGLUploadElement, gst_gl_upload_element,
     GST_TYPE_GL_BASE_FILTER,
     GST_DEBUG_CATEGORY_INIT (gst_gl_upload_element_debug, "gluploadelement", 0,
         "glupload Element"););
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (glupload, "glupload",
+    GST_RANK_NONE, GST_TYPE_GL_UPLOAD_ELEMENT, gl_element_init (plugin));
 
 static gboolean gst_gl_upload_element_get_unit_size (GstBaseTransform * trans,
     GstCaps * caps, gsize * size);
index ab4b2cd..5ace518 100644 (file)
@@ -35,6 +35,7 @@
 #include "config.h"
 #endif
 
+#include "gstglelements.h"
 #include "gstglvideoflip.h"
 
 #define GST_CAT_DEFAULT gst_gl_video_flip_debug
@@ -120,6 +121,8 @@ G_DEFINE_TYPE_WITH_CODE (GstGLVideoFlip, gst_gl_video_flip,
         "glvideoflip", 0, "glvideoflip element");
     G_IMPLEMENT_INTERFACE (GST_TYPE_VIDEO_DIRECTION,
         gst_gl_video_flip_video_direction_interface_init););
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (glvideoflip, "glvideoflip",
+    GST_RANK_NONE, GST_TYPE_GL_VIDEO_FLIP, gl_element_init (plugin));
 
 static void
 gst_gl_video_flip_video_direction_interface_init (GstVideoDirectionInterface
index 580598c..8516286 100644 (file)
@@ -48,6 +48,7 @@
 #include <gst/gl/gstglfuncs.h>
 #include <gst/video/gstvideoaffinetransformationmeta.h>
 
+#include "gstglelements.h"
 #include "gstglvideomixer.h"
 
 #include "gstglmixerbin.h"
@@ -390,6 +391,9 @@ typedef GstGLMixerBinClass GstGLVideoMixerBinClass;
 
 G_DEFINE_TYPE (GstGLVideoMixerBin, gst_gl_video_mixer_bin,
     GST_TYPE_GL_MIXER_BIN);
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (glvideomixer, "glvideomixer",
+    GST_RANK_NONE, gst_gl_video_mixer_bin_get_type (),
+    gl_element_init (plugin));
 
 static void
 gst_gl_video_mixer_bin_init (GstGLVideoMixerBin * self)
@@ -458,6 +462,9 @@ static void gst_gl_video_mixer_child_proxy_init (gpointer g_iface,
 G_DEFINE_TYPE_WITH_CODE (GstGLVideoMixer, gst_gl_video_mixer, GST_TYPE_GL_MIXER,
     G_IMPLEMENT_INTERFACE (GST_TYPE_CHILD_PROXY,
         gst_gl_video_mixer_child_proxy_init); DEBUG_INIT);
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (glvideomixerelement,
+    "glvideomixerelement", GST_RANK_NONE, gst_gl_video_mixer_get_type (),
+    gl_element_init (plugin));
 
 static void gst_gl_video_mixer_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec);
index 86cacd6..ad89c99 100644 (file)
@@ -48,6 +48,7 @@
 
 #include <gst/base/gstbasetransform.h>
 
+#include "gstglelements.h"
 #include "gstglviewconvert.h"
 
 #define GST_CAT_DEFAULT gst_gl_view_convert_element_debug
@@ -68,9 +69,11 @@ enum
 #define DEBUG_INIT \
   GST_DEBUG_CATEGORY_INIT (gst_gl_view_convert_element_debug, "glview_convertelement", 0, "glview_convert element");
 
+#define parent_class gst_gl_view_convert_element_parent_class
 G_DEFINE_TYPE_WITH_CODE (GstGLViewConvertElement, gst_gl_view_convert_element,
     GST_TYPE_GL_FILTER, DEBUG_INIT);
-#define parent_class gst_gl_view_convert_element_parent_class
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (glviewconvert, "glviewconvert",
+    GST_RANK_NONE, GST_TYPE_GL_VIEW_CONVERT_ELEMENT, gl_element_init (plugin));
 
 static void gst_gl_view_convert_dispose (GObject * object);
 static void gst_gl_view_convert_element_set_property (GObject * object,
index 302e845..e3a8275 100644 (file)
 #include "config.h"
 #endif
 
-#include "gstglimagesink.h"
-#include "gstgluploadelement.h"
-#include "gstgldownloadelement.h"
-#include "gstglcolorconvertelement.h"
-#include "gstglcolorbalance.h"
-#include "gstglfilterbin.h"
-#include "gstglsinkbin.h"
-#include "gstglsrcbin.h"
-
-#include "gstglfiltercube.h"
-#include "gstgleffects.h"
-#include "gstglcolorscale.h"
+#include "gstglelements.h"
 
 #include "gstglmixerbin.h"
 #include "gstglvideomixer.h"
 #include "gstglstereomix.h"
 
-#include "gstglfiltershader.h"
-#include "gstglfilterapp.h"
-#include "gstglstereosplit.h"
-#include "gstglviewconvert.h"
-#include "gstgltestsrc.h"
-#include "gstgldeinterlace.h"
-#include "gstglalpha.h"
-#include "gstgloverlaycompositorelement.h"
-
-#ifdef HAVE_GRAPHENE
-#include "gstgltransformation.h"
-#include "gstglvideoflip.h"
-#endif
-#if defined(HAVE_JPEG) && defined(HAVE_PNG)
-#include "gstgloverlay.h"
-#endif
-
-#include "gstglmixerbin.h"
-#include "gstglvideomixer.h"
-#include "gstglstereomix.h"
-
-#if GST_GL_HAVE_OPENGL
-#endif /* GST_GL_HAVE_OPENGL */
-
-#if GST_GL_HAVE_OPENGL
-#include "gstglfilterglass.h"
-/* #include "gstglfilterreflectedscreen.h" */
-#include "gstglmosaic.h"
-#ifdef HAVE_PNG
-#include "gstgldifferencematte.h"
-/* #include "gstglbumper.h" */
-#endif /* HAVE_PNG */
-#endif /* GST_GL_HAVE_OPENGL */
-
-#if GST_GL_HAVE_WINDOW_COCOA
-/* avoid including Cocoa/CoreFoundation from a C file... */
-extern GType gst_ca_opengl_layer_sink_bin_get_type (void);
-#endif
-
-#if GST_GL_HAVE_WINDOW_DISPMANX
-extern void bcm_host_init (void);
-#endif
-
-#if GST_GL_HAVE_WINDOW_X11
-#include <X11/Xlib.h>
-#endif
-
-#define GST_CAT_DEFAULT gst_gl_gstgl_debug
-GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
-
 /* Register filters that make up the gstgl plugin */
 static gboolean
 plugin_init (GstPlugin * plugin)
 {
-  GST_DEBUG_CATEGORY_INIT (gst_gl_gstgl_debug, "gstopengl", 0, "gstopengl");
-
-#if GST_GL_HAVE_WINDOW_DISPMANX
-  GST_DEBUG ("Initialize BCM host");
-  bcm_host_init ();
-#endif
-
-#if GST_GL_HAVE_WINDOW_X11
-  if (g_getenv ("GST_GL_XINITTHREADS"))
-    XInitThreads ();
-#endif
-
-  if (!gst_element_register (plugin, "glimagesink",
-          GST_RANK_SECONDARY, gst_gl_image_sink_bin_get_type ())) {
-    return FALSE;
-  }
-
-  if (!gst_element_register (plugin, "glimagesinkelement",
-          GST_RANK_NONE, gst_glimage_sink_get_type ())) {
-    return FALSE;
-  }
-
-  if (!gst_element_register (plugin, "glupload",
-          GST_RANK_NONE, GST_TYPE_GL_UPLOAD_ELEMENT)) {
-    return FALSE;
-  }
-
-  if (!gst_element_register (plugin, "gldownload",
-          GST_RANK_NONE, GST_TYPE_GL_DOWNLOAD_ELEMENT)) {
-    return FALSE;
-  }
-
-  if (!gst_element_register (plugin, "glcolorconvert",
-          GST_RANK_NONE, GST_TYPE_GL_COLOR_CONVERT_ELEMENT)) {
-    return FALSE;
-  }
-
-  if (!gst_element_register (plugin, "glcolorbalance",
-          GST_RANK_NONE, GST_TYPE_GL_COLOR_BALANCE)) {
-    return FALSE;
-  }
-
-  if (!gst_element_register (plugin, "glfilterbin",
-          GST_RANK_NONE, GST_TYPE_GL_FILTER_BIN)) {
-    return FALSE;
-  }
-
-  if (!gst_element_register (plugin, "glsinkbin",
-          GST_RANK_NONE, GST_TYPE_GL_SINK_BIN)) {
-    return FALSE;
-  }
-
-  if (!gst_element_register (plugin, "glsrcbin",
-          GST_RANK_NONE, GST_TYPE_GL_SRC_BIN)) {
-    return FALSE;
-  }
-
-  if (!gst_element_register (plugin, "glmixerbin",
-          GST_RANK_NONE, GST_TYPE_GL_MIXER_BIN)) {
-    return FALSE;
-  }
-
-  if (!gst_element_register (plugin, "glfiltercube",
-          GST_RANK_NONE, GST_TYPE_GL_FILTER_CUBE)) {
-    return FALSE;
-  }
+  gboolean ret = FALSE;
+
+  ret |= GST_ELEMENT_REGISTER (glimagesink, plugin);
+  ret |= GST_ELEMENT_REGISTER (glimagesinkelement, plugin);
+  ret |= GST_ELEMENT_REGISTER (glupload, plugin);
+  ret |= GST_ELEMENT_REGISTER (gldownload, plugin);
+  ret |= GST_ELEMENT_REGISTER (glcolorconvert, plugin);
+  ret |= GST_ELEMENT_REGISTER (glcolorbalance, plugin);
+  ret |= GST_ELEMENT_REGISTER (glfilterbin, plugin);
+  ret |= GST_ELEMENT_REGISTER (glsinkbin, plugin);
+  ret |= GST_ELEMENT_REGISTER (glsrcbin, plugin);
+  ret |= GST_ELEMENT_REGISTER (glmixerbin, plugin);
+  ret |= GST_ELEMENT_REGISTER (glfiltercube, plugin);
 #ifdef HAVE_GRAPHENE
-  if (!gst_element_register (plugin, "gltransformation",
-          GST_RANK_NONE, GST_TYPE_GL_TRANSFORMATION)) {
-    return FALSE;
-  }
-
-  if (!gst_element_register (plugin, "glvideoflip",
-          GST_RANK_NONE, GST_TYPE_GL_VIDEO_FLIP)) {
-    return FALSE;
-  }
+  ret |= GST_ELEMENT_REGISTER (gltransformation, plugin);
+  ret |= GST_ELEMENT_REGISTER (glvideoflip, plugin);
 #endif
-
-  if (!gst_gl_effects_register_filters (plugin, GST_RANK_NONE)) {
-    return FALSE;
-  };
-
-  if (!gst_element_register (plugin, "glcolorscale",
-          GST_RANK_NONE, GST_TYPE_GL_COLORSCALE)) {
-    return FALSE;
-  }
-
-  if (!gst_element_register (plugin, "glvideomixer",
-          GST_RANK_NONE, gst_gl_video_mixer_bin_get_type ())) {
-    return FALSE;
-  }
-
-  if (!gst_element_register (plugin, "glvideomixerelement",
-          GST_RANK_NONE, gst_gl_video_mixer_get_type ())) {
-    return FALSE;
-  }
-
-  if (!gst_element_register (plugin, "glshader",
-          GST_RANK_NONE, gst_gl_filtershader_get_type ())) {
-    return FALSE;
-  }
-
-  if (!gst_element_register (plugin, "glfilterapp",
-          GST_RANK_NONE, GST_TYPE_GL_FILTER_APP)) {
-    return FALSE;
-  }
-
-  if (!gst_element_register (plugin, "glviewconvert",
-          GST_RANK_NONE, GST_TYPE_GL_VIEW_CONVERT_ELEMENT)) {
-    return FALSE;
-  }
-
-  if (!gst_element_register (plugin, "glstereosplit",
-          GST_RANK_NONE, GST_TYPE_GL_STEREOSPLIT)) {
-    return FALSE;
-  }
-
-  if (!gst_element_register (plugin, "glstereomix",
-          GST_RANK_NONE, GST_TYPE_GL_STEREO_MIX)) {
-    return FALSE;
-  }
-
-  if (!gst_element_register (plugin, "gltestsrc",
-          GST_RANK_NONE, GST_TYPE_GL_TEST_SRC)) {
-    return FALSE;
-  }
-
-  if (!gst_element_register (plugin, "gldeinterlace",
-          GST_RANK_NONE, GST_TYPE_GL_DEINTERLACE)) {
-    return FALSE;
-  }
-
-  if (!gst_element_register (plugin, "glalpha",
-          GST_RANK_NONE, GST_TYPE_GL_ALPHA)) {
-    return FALSE;
-  }
-
-  if (!gst_element_register (plugin, "gloverlaycompositor",
-          GST_RANK_NONE, GST_TYPE_GL_OVERLAY_COMPOSITOR_ELEMENT)) {
-    return FALSE;
-  }
+  ret |= GST_ELEMENT_REGISTER (gleffects, plugin);
+  ret |= GST_ELEMENT_REGISTER (glcolorscale, plugin);
+  ret |= GST_ELEMENT_REGISTER (glvideomixer, plugin);
+  ret |= GST_ELEMENT_REGISTER (glvideomixerelement, plugin);
+  ret |= GST_ELEMENT_REGISTER (glshader, plugin);
+  ret |= GST_ELEMENT_REGISTER (glfilterapp, plugin);
+  ret |= GST_ELEMENT_REGISTER (glviewconvert, plugin);
+  ret |= GST_ELEMENT_REGISTER (glstereosplit, plugin);
+  ret |= GST_ELEMENT_REGISTER (glstereomix, plugin);
+  ret |= GST_ELEMENT_REGISTER (gltestsrc, plugin);
+  ret |= GST_ELEMENT_REGISTER (gldeinterlace, plugin);
+  ret |= GST_ELEMENT_REGISTER (glalpha, plugin);
+  ret |= GST_ELEMENT_REGISTER (gloverlaycompositor, plugin);
 #if defined(HAVE_JPEG) && defined(HAVE_PNG)
-  if (!gst_element_register (plugin, "gloverlay",
-          GST_RANK_NONE, gst_gl_overlay_get_type ())) {
-    return FALSE;
-  }
+  ret |= GST_ELEMENT_REGISTER (gloverlay, plugin);
 #endif
 #if GST_GL_HAVE_OPENGL
-  if (!gst_element_register (plugin, "glfilterglass",
-          GST_RANK_NONE, GST_TYPE_GL_FILTER_GLASS)) {
-    return FALSE;
-  }
+  ret |= GST_ELEMENT_REGISTER (glfilterglass, plugin);
 #if 0
-  if (!gst_element_register (plugin, "glfilterreflectedscreen",
-          GST_RANK_NONE, GST_TYPE_GL_FILTER_REFLECTED_SCREEN)) {
-    return FALSE;
-  }
+  ret |= GST_ELEMENT_REGISTER (glfilterreflectedscreen, plugin);
 #endif
-
-  if (!gst_element_register (plugin, "glmosaic",
-          GST_RANK_NONE, GST_TYPE_GL_MOSAIC)) {
-    return FALSE;
-  }
+  ret |= GST_ELEMENT_REGISTER (glmosaic, plugin);
 #ifdef HAVE_PNG
-  if (!gst_element_register (plugin, "gldifferencematte",
-          GST_RANK_NONE, gst_gl_differencematte_get_type ())) {
-    return FALSE;
-  }
+  ret |= GST_ELEMENT_REGISTER (gldifferencematte, plugin);
 #if 0
-  if (!gst_element_register (plugin, "glbumper",
-          GST_RANK_NONE, gst_gl_bumper_get_type ())) {
-    return FALSE;
-  }
+  ret |= GST_ELEMENT_REGISTER (glbumper, plugin);
 #endif
 #endif /* HAVE_PNG */
 #endif /* GST_GL_HAVE_OPENGL */
 #if GST_GL_HAVE_WINDOW_COCOA
-  if (!gst_element_register (plugin, "caopengllayersink",
-          GST_RANK_NONE, gst_ca_opengl_layer_sink_bin_get_type ())) {
-    return FALSE;
-  }
+  ret |= GST_ELEMENT_REGISTER (caopengllayersink, plugin);
 #endif
 
-  return TRUE;
+  return ret;
 }
 
 GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
index 7a06426..a001214 100644 (file)
@@ -1,5 +1,6 @@
 opengl_sources = [
   'gstopengl.c',
+  'gstglelement.c',
   'gstglalpha.c',
   'gstgluploadelement.c',
   'gstgldownloadelement.c',