libcaca: allow per feature registration
authorStéphane Cerveau <scerveau@collabora.com>
Fri, 12 Feb 2021 09:26:26 +0000 (10:26 +0100)
committerStéphane Cerveau <scerveau@collabora.com>
Mon, 29 Mar 2021 10:45:21 +0000 (12:45 +0200)
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-good/-/merge_requests/876>

ext/libcaca/gstcacaplugin.c [new file with mode: 0644]
ext/libcaca/gstcacasink.c
ext/libcaca/gstcacasink.h
ext/libcaca/gstcacatv.c
ext/libcaca/gstcacatv.h
ext/libcaca/meson.build

diff --git a/ext/libcaca/gstcacaplugin.c b/ext/libcaca/gstcacaplugin.c
new file mode 100644 (file)
index 0000000..c73d617
--- /dev/null
@@ -0,0 +1,60 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * 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.
+ */
+/**
+ * SECTION:element-cacasink
+ * @title: cacasink
+ * @see_also: #GstAASink
+ *
+ * Displays video as color ascii art.
+ *
+ * ## Example launch line
+ * |[
+ * CACA_GEOMETRY=160x60 CACA_FONT=5x7 gst-launch-1.0 filesrc location=test.avi ! decodebin ! videoconvert ! cacasink
+ * ]| This pipeline renders a video to ascii art into a separate window using a
+ * small font and specifying the ascii resolution.
+ * |[
+ * CACA_DRIVER=ncurses gst-launch-1.0 filesrc location=test.avi ! decodebin ! videoconvert ! cacasink
+ * ]| This pipeline renders a video to ascii art into the current terminal.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include "gstcacasink.h"
+#include "gstcacatv.h"
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  gboolean ret = FALSE;
+
+  ret |= GST_ELEMENT_REGISTER (cacatv, plugin);
+  ret |= GST_ELEMENT_REGISTER (cacasink, plugin);
+
+  return ret;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    cacasink,
+    "Colored ASCII Art video sink & filter",
+    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
index b938e1c..93e2741 100644 (file)
@@ -40,8 +40,6 @@
 
 #include <string.h>
 #include "gstcacasink.h"
-#include "gstcacatv.h"
-
 
 //#define GST_CACA_DEFAULT_RED_MASK R_MASK_32_REVERSE_INT
 //#define GST_CACA_DEFAULT_GREEN_MASK G_MASK_32_REVERSE_INT
@@ -90,6 +88,8 @@ static GstStateChangeReturn gst_cacasink_change_state (GstElement * element,
 
 #define gst_cacasink_parent_class parent_class
 G_DEFINE_TYPE (GstCACASink, gst_cacasink, GST_TYPE_BASE_SINK);
+GST_ELEMENT_REGISTER_DEFINE (cacasink, "cacasink", GST_RANK_NONE,
+    GST_TYPE_CACASINK);
 
 #define GST_TYPE_CACADITHER (gst_cacasink_dither_get_type())
 static GType
@@ -404,23 +404,3 @@ gst_cacasink_change_state (GstElement * element, GstStateChange transition)
   }
   return ret;
 }
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-
-  if (!gst_element_register (plugin, "cacatv", GST_RANK_NONE, GST_TYPE_CACATV))
-    return FALSE;
-
-  if (!gst_element_register (plugin, "cacasink", GST_RANK_NONE,
-          GST_TYPE_CACASINK))
-    return FALSE;
-
-  return TRUE;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    cacasink,
-    "Colored ASCII Art video sink & filter",
-    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
index 53c9d18..862e744 100644 (file)
@@ -47,6 +47,8 @@ struct _GstCACASink {
   struct caca_bitmap *bitmap;
 };
 
+GST_ELEMENT_REGISTER_DECLARE (cacasink);
+
 G_END_DECLS
 
 #endif /* __GST_CACASINK_H__ */
index 0915a07..e960138 100644 (file)
@@ -33,6 +33,7 @@
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
+#include "gstcacasink.h"
 #include "gstcacatv.h"
 
 /* cacatv signals and args */
@@ -97,6 +98,7 @@ static void gst_cacatv_get_property (GObject * object, guint prop_id,
 
 #define gst_cacatv_parent_class parent_class
 G_DEFINE_TYPE (GstCACATv, gst_cacatv, GST_TYPE_VIDEO_FILTER);
+GST_ELEMENT_REGISTER_DEFINE (cacatv, "cacatv", GST_RANK_NONE, GST_TYPE_CACATV);
 
 #define GST_TYPE_CACADITHER (gst_cacatv_dither_get_type())
 static GType
index 5a574dc..2c0343c 100644 (file)
@@ -52,6 +52,8 @@ struct _GstCACATv {
   caca_font_t *font;
 };
 
+GST_ELEMENT_REGISTER_DECLARE (cacatv);
+
 G_END_DECLS
 
 #endif /* __GST_CACATV_H__ */
index b46607c..28fc4f4 100644 (file)
@@ -1,7 +1,7 @@
 libcaca_dep = dependency('caca', required : get_option('libcaca'))
 
 if libcaca_dep.found()
-  caca = library('gstcacasink', ['gstcacasink.c','gstcacatv.c'],
+  caca = library('gstcacasink', ['gstcacaplugin.c', 'gstcacasink.c','gstcacatv.c'],
     c_args : gst_plugins_good_args,
     link_args : noseh_link_args,
     include_directories : [configinc],