Luma -> Alpha with v1.18
Nicolas Dufresne
nicolas at ndufresne.ca
Tue Jan 11 18:51:47 UTC 2022
Le mardi 11 janvier 2022 à 02:52 -0800, amindfv at mailbox.org a écrit :
> On Mon, Jan 10, 2022 at 09:27:01PM -0500, Nicolas Dufresne wrote:
>
> > To help a little, alphacombibe is a feature (of type GstElement), it needs
> > to be registered in a plugin. Make sure to keep enough of plugin.c so this
> > feature is registered. Notice the original plugin is named codecalpha,
> > plugins .so files needs to be strictly named, since the entry function are
> > deduced from it.
> >
>
> Thank you, this helped me find and correct a few points of confusion.
>
> After quite a lot of struggling, I'm still hitting an issue though. I suspect it might be related to different macros in different versions of GStreamer (the plugin's written for 1.20, while my local version is 1.18).
>
> The error:
>
> $ make
> gcc -I. -pthread -I/usr/include/gstreamer-1.0 -I/usr/include/orc-0.4 -I/usr/include/gstreamer-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -Wall -g -O2 -Wall -c gstplugin.c -fPIC -DPIC -o gstplugin.o
> In file included from gstplugin.c:47:
> gstalphacombine.h:32:1: warning: data definition has no type or storage class
> 32 | GST_ELEMENT_REGISTER_DECLARE (alpha_combine);
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
> gstalphacombine.h:32:1: warning: type defaults to ‘int’ in declaration of ‘GST_ELEMENT_REGISTER_DECLARE’ [-Wimplicit-int]
> gstalphacombine.h:32:1: warning: parameter names (without types) in function declaration
> gstplugin.c: In function ‘plugin_init’:
> gstplugin.c:73:32: error: ‘alpha_combine’ undeclared (first use in this function)
> 73 | return gst_element_register (alpha_combine, "alphacombine", GST_RANK_NONE, GST_TYPE_ALPHA_COMBINE);
Indeed, all the GST_ELEMENT_REGISTER* macros are unreleased. Remove all calls to
GST_ELEMENT_REGISTER*, and use
gst_element_register (plugin, "alphacombine", GST_RANK_NONE, GST_TYPE_ALPHA_COMBINE);
Inside the plugin_init function.
> | ^~~~~~~~~~~~~
>
> Below is my full diff from the plugin as defined in the GStreamer monorepo.
>
> As always, any help would be greatly appreciated!
>
> Thanks,
> Tom
>
> The diff:
>
> diff --git a/subprojects/gst-plugins-bad/gst/codecalpha/gstalphacombine.c b/subprojects/gst-plugins-bad/gst/codecalpha/gstalphacombine.c
> index aeefeb94f8..baee45f44a 100644
> --- a/subprojects/gst-plugins-bad/gst/codecalpha/gstalphacombine.c
> +++ b/subprojects/gst-plugins-bad/gst/codecalpha/gstalphacombine.c
> @@ -46,10 +46,9 @@
>
> #include "gstalphacombine.h"
>
> -
> -#define SUPPORTED_SINK_FORMATS "{ I420, NV12 }"
> -#define SUPPORTED_ALPHA_FORMATS "{ GRAY8, I420, NV12 }"
> -#define SUPPORTED_SRC_FORMATS "{ A420, AV12 }"
> +#define SUPPORTED_SINK_FORMATS "{ I420 }"
> +#define SUPPORTED_ALPHA_FORMATS "{ GRAY8, I420 }"
> +#define SUPPORTED_SRC_FORMATS "{ A420 }"
>
> /* *INDENT-OFF* */
> struct {
> @@ -69,7 +68,7 @@ struct {
> .sink = GST_VIDEO_FORMAT_I420,
> .alpha = GST_VIDEO_FORMAT_NV12,
> .src = GST_VIDEO_FORMAT_A420
> - }, {
> + }, /* {
> .sink = GST_VIDEO_FORMAT_NV12,
> .alpha = GST_VIDEO_FORMAT_NV12,
> .src = GST_VIDEO_FORMAT_AV12,
> @@ -81,7 +80,7 @@ struct {
> .sink = GST_VIDEO_FORMAT_NV12,
> .alpha = GST_VIDEO_FORMAT_I420,
> .src = GST_VIDEO_FORMAT_AV12
> - },
> + }, */
> };
> /* *INDENT-ON* */
>
> @@ -117,8 +116,7 @@ G_DEFINE_TYPE_WITH_CODE (GstAlphaCombine, gst_alpha_combine,
> GST_DEBUG_CATEGORY_INIT (alphacombine_debug, "alphacombine", 0,
> "Alpha Combiner"));
>
> -GST_ELEMENT_REGISTER_DEFINE (alpha_combine, "alphacombine",
> - GST_RANK_NONE, GST_TYPE_ALPHA_COMBINE);
> +GST_ELEMENT_REGISTER_DEFINE (alpha_combine);
>
> static GstStaticPadTemplate gst_alpha_combine_sink_template =
> GST_STATIC_PAD_TEMPLATE ("sink",
> diff --git a/subprojects/gst-plugins-bad/gst/codecalpha/gstplugin.c b/subprojects/gst-plugins-bad/gst/codecalpha/gstplugin.c
> index ff061c58f9..1fbe127665 100644
> --- a/subprojects/gst-plugins-bad/gst/codecalpha/gstplugin.c
> +++ b/subprojects/gst-plugins-bad/gst/codecalpha/gstplugin.c
> @@ -43,10 +43,10 @@
>
> #include <gst/gst.h>
>
> -#include "gstcodecalphademux.h"
> +// #include "gstcodecalphademux.h"
> #include "gstalphacombine.h"
> -#include "gstvp8alphadecodebin.h"
> -#include "gstvp9alphadecodebin.h"
> +// #include "gstvp8alphadecodebin.h"
> +// #include "gstvp9alphadecodebin.h"
>
> /* When wrapping, use the original rank plus this offset. The ad-hoc rules is
> * that hardware implementation will use PRIMARY+1 or +2 to override the
> @@ -59,6 +59,7 @@
> static gboolean
> plugin_init (GstPlugin * plugin)
> {
> +/*
> gboolean ret = FALSE;
>
> ret |= GST_ELEMENT_REGISTER (codec_alpha_demux, plugin);
> @@ -67,10 +68,21 @@ plugin_init (GstPlugin * plugin)
> ret |= GST_ELEMENT_REGISTER (vp9_alpha_decode_bin, plugin);
>
> return ret;
> +*/
> +
> + return gst_element_register (alpha_combine, "alphacombine", GST_RANK_NONE, GST_TYPE_ALPHA_COMBINE);
> }
>
> +#ifndef PACKAGE
> +#define PACKAGE "codecalpha"
> +#endif
> +
> +#ifndef GST_PACKAGE_NAME
> +#define GST_PACKAGE_NAME "codecalpha"
> +#endif
> +
> GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
> GST_VERSION_MINOR,
> codecalpha,
> "CODEC Alpha Utilities",
> - plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
> + plugin_init, "1.0.0", "LGPL", GST_PACKAGE_NAME, "http://gstreamer.net/")
> \ No newline at end of file
>
More information about the gstreamer-devel
mailing list