diff options
-rw-r--r-- | meson_options.txt | 5 | ||||
-rw-r--r-- | src/gstreamer/gstlibcamera.c | 21 | ||||
-rw-r--r-- | src/gstreamer/gstlibcamerasrc.cpp | 31 | ||||
-rw-r--r-- | src/gstreamer/gstlibcamerasrc.h | 22 | ||||
-rw-r--r-- | src/gstreamer/meson.build | 32 | ||||
-rw-r--r-- | src/meson.build | 2 |
6 files changed, 113 insertions, 0 deletions
diff --git a/meson_options.txt b/meson_options.txt index 79ee4de6..b17b6de6 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 00000000..7dd94ca0 --- /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 00000000..38075032 --- /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 00000000..0144cbc4 --- /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 00000000..490e030e --- /dev/null +++ b/src/gstreamer/meson.build @@ -0,0 +1,32 @@ +libcamera_gst_sources = [ + 'gstlibcamera.c', + 'gstlibcamerasrc.cpp', +] + +libcamera_gst_c_args = [ + '-DVERSION="@0@"'.format(libcamera_git_version), + '-DPACKAGE="@0@"'.format(meson.project_name()), +] + +glib_dep = dependency('glib', required : get_option('gstreamer')) + +gst_dep = dependency('gstreamer-video-1.0', version : '>=1.14.0', + required : get_option('gstreamer')) + +if glib_dep.found() and gst_dep.found() + # The G_DECLARE_FINAL_TYPE macro creates static inline functions that were + # not marked as possibly unused prior to GLib v2.63.0. This causes clang to + # complain about the ones we are not using. Silence the -Wunused-function + # warning in that case. + if cc.get_id() == 'clang' and glib_dep.version().version_compare('<2.63.0') + libcamera_gst_c_args += [ '-Wno-unused-function' ] + endif + + 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 5adcd61f..d818d8b8 100644 --- a/src/meson.build +++ b/src/meson.build @@ -10,3 +10,5 @@ subdir('qcam') if get_option('v4l2') subdir('v4l2') endif + +subdir('gstreamer') |