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