[libcamera-devel] [PATCH v2 01/27] Add GStreamer plugin and element skeleton
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Sat Feb 29 14:05:43 CET 2020
Hi Nicolas,
Thank you for the patch.
On Thu, Feb 27, 2020 at 03:03:41PM -0500, Nicolas Dufresne wrote:
> This implements the GStreamer plugin interface and adds libcamerasrc
> element feature to it. This is just enough to allow plugin
> introspection.
>
> gst-inspect-1.0 build/src/gstreamer/libgstlibcamera.so
> Plugin Details:
> Name libcamera
> Description libcamera capture plugin
> Filename build/src/gstreamer/libgstlibcamera.so
> Version 0.0.0+1042-6c9f16d3-dirty
> License LGPL
> Source module libcamera
> Binary package libcamera
> Origin URL https://libcamera.org
>
> libcamerasrc: libcamera Source
>
> 1 features:
>
> GST_PLUGIN_PATH=$(pwd)/build/src/gstreamer gst-inspect-1.0 libcamerasrc
> Factory Details:
> Rank primary (256)
> Long-name libcamera Source
> Klass Source/Video
> Description Linux Camera source using libcamera
> Author Nicolas Dufresne <nicolas.dufresne at collabora.com
>
> Plugin Details:
> Name libcamera
> Description libcamera capture plugin
> Filename /home/nicolas/Sources/libcamera/build/src/gstreamer/libgstlibcamera.so
> Version 0.0.0+1042-6c9f16d3-dirty
> License LGPL
> Source module libcamera
> Binary package libcamera
> Origin URL https://libcamera.org
>
> GObject
> +----GInitiallyUnowned
> +----GstObject
> +----GstElement
> +----GstLibcameraSrc
>
> Pad Templates:
> none
>
> Element has no clocking capabilities.
> Element has no URI handling capabilities.
>
> Pads:
> none
>
> Element Properties:
> name : The name of the object
> flags: accès en lecture, accès en écriture, 0x2000
Localised content, sweet :-)
> String. Default: "libcamerasrc0"
> parent : The parent of the object
> flags: accès en lecture, accès en écriture, 0x2000
> Object of type "GstObject"
>
> Signed-off-by: Nicolas Dufresne <nicolas.dufresne at collabora.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
> meson_options.txt | 5 +++++
> src/gstreamer/gstlibcamera.c | 21 +++++++++++++++++++++
> src/gstreamer/gstlibcamerasrc.cpp | 31 +++++++++++++++++++++++++++++++
> src/gstreamer/gstlibcamerasrc.h | 22 ++++++++++++++++++++++
> src/gstreamer/meson.build | 22 ++++++++++++++++++++++
> src/meson.build | 2 ++
> 6 files changed, 103 insertions(+)
> create mode 100644 src/gstreamer/gstlibcamera.c
> create mode 100644 src/gstreamer/gstlibcamerasrc.cpp
> create mode 100644 src/gstreamer/gstlibcamerasrc.h
> create mode 100644 src/gstreamer/meson.build
>
> diff --git a/meson_options.txt b/meson_options.txt
> index 79ee4de..b17b6de 100644
> --- a/meson_options.txt
> +++ b/meson_options.txt
> @@ -7,6 +7,11 @@ option('documentation',
> type : 'boolean',
> description : 'Generate the project documentation')
>
> +option('gstreamer',
> + type : 'feature',
> + value : 'auto',
> + description : 'Compile libcamera GStreamer plugin')
> +
> option('test',
> type : 'boolean',
> description: 'Compile and include the tests')
> diff --git a/src/gstreamer/gstlibcamera.c b/src/gstreamer/gstlibcamera.c
> new file mode 100644
> index 0000000..7dd94ca
> --- /dev/null
> +++ b/src/gstreamer/gstlibcamera.c
> @@ -0,0 +1,21 @@
> +/* SPDX-License-Identifier: LGPL-2.1-or-later */
> +/*
> + * Copyright (C) 2019, Collabora Ltd.
> + * Author: Nicolas Dufresne <nicolas.dufresne at collabora.com>
> + *
> + * gstlibcamera.c - GStreamer plugin
> + */
> +
> +#include "gstlibcamerasrc.h"
> +
> +static gboolean
> +plugin_init(GstPlugin *plugin)
> +{
> + return gst_element_register(plugin, "libcamerasrc", GST_RANK_PRIMARY,
> + GST_TYPE_LIBCAMERA_SRC);
> + return TRUE;
> +}
> +
> +GST_PLUGIN_DEFINE(GST_VERSION_MAJOR, GST_VERSION_MINOR,
> + libcamera, "libcamera capture plugin",
> + plugin_init, VERSION, "LGPL", PACKAGE, "https://libcamera.org");
> diff --git a/src/gstreamer/gstlibcamerasrc.cpp b/src/gstreamer/gstlibcamerasrc.cpp
> new file mode 100644
> index 0000000..3807503
> --- /dev/null
> +++ b/src/gstreamer/gstlibcamerasrc.cpp
> @@ -0,0 +1,31 @@
> +/* SPDX-License-Identifier: LGPL-2.1-or-later */
> +/*
> + * Copyright (C) 2019, Collabora Ltd.
> + * Author: Nicolas Dufresne <nicolas.dufresne at collabora.com>
> + *
> + * gstlibcamerasrc.cpp - GStreamer Capture Element
> + */
> +
> +#include "gstlibcamerasrc.h"
> +
> +struct _GstLibcameraSrc {
> + GstElement parent;
> +};
> +
> +G_DEFINE_TYPE(GstLibcameraSrc, gst_libcamera_src, GST_TYPE_ELEMENT);
> +
> +static void
> +gst_libcamera_src_init(GstLibcameraSrc *self)
> +{
> +}
> +
> +static void
> +gst_libcamera_src_class_init(GstLibcameraSrcClass *klass)
> +{
> + GstElementClass *element_class = (GstElementClass *)klass;
> +
> + gst_element_class_set_metadata(element_class,
> + "libcamera Source", "Source/Video",
> + "Linux Camera source using libcamera",
> + "Nicolas Dufresne <nicolas.dufresne at collabora.com");
> +}
> diff --git a/src/gstreamer/gstlibcamerasrc.h b/src/gstreamer/gstlibcamerasrc.h
> new file mode 100644
> index 0000000..0144cbc
> --- /dev/null
> +++ b/src/gstreamer/gstlibcamerasrc.h
> @@ -0,0 +1,22 @@
> +/* SPDX-License-Identifier: LGPL-2.1-or-later */
> +/*
> + * Copyright (C) 2019, Collabora Ltd.
> + * Author: Nicolas Dufresne <nicolas.dufresne at collabora.com>
> + *
> + * gstlibcamerasrc.h - GStreamer Capture Element
> + */
> +
> +#ifndef __GST_LIBCAMERA_SRC_H__
> +#define __GST_LIBCAMERA_SRC_H__
> +
> +#include <gst/gst.h>
> +
> +G_BEGIN_DECLS
> +
> +#define GST_TYPE_LIBCAMERA_SRC gst_libcamera_src_get_type()
> +G_DECLARE_FINAL_TYPE(GstLibcameraSrc, gst_libcamera_src,
> + GST_LIBCAMERA, SRC, GstElement)
> +
> +G_END_DECLS
> +
> +#endif /* __GST_LIBCAMERA_SRC_H__ */
> diff --git a/src/gstreamer/meson.build b/src/gstreamer/meson.build
> new file mode 100644
> index 0000000..832b8a5
> --- /dev/null
> +++ b/src/gstreamer/meson.build
> @@ -0,0 +1,22 @@
> +libcamera_gst_sources = [
> + 'gstlibcamera.c',
> + 'gstlibcamerasrc.cpp',
> +]
> +
> +libcamera_gst_c_args = [
> + '-DVERSION="@0@"'.format(libcamera_git_version),
> + '-DPACKAGE="@0@"'.format(meson.project_name()),
> +]
> +
> +gst_dep = dependency('gstreamer-video-1.0', version : '>=1.16.1',
> + required : get_option('gstreamer'))
> +
> +if gst_dep.found()
> + libcamera_gst = shared_library('gstlibcamera',
> + libcamera_gst_sources,
> + c_args : libcamera_gst_c_args,
> + dependencies : [libcamera_dep, gst_dep],
> + install: true,
> + install_dir : '@0@/gstreamer-1.0'.format(get_option('libdir')),
> + )
> +endif
> diff --git a/src/meson.build b/src/meson.build
> index 5adcd61..d818d8b 100644
> --- a/src/meson.build
> +++ b/src/meson.build
> @@ -10,3 +10,5 @@ subdir('qcam')
> if get_option('v4l2')
> subdir('v4l2')
> endif
> +
> +subdir('gstreamer')
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list