Message ID | 20200227200407.490616-2-nicolas.dufresne@collabora.com |
---|---|
State | Accepted |
Headers | show |
Series |
|
Related | show |
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@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@collabora.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@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@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@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@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@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')
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@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@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@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@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')
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@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 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@collabora.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