[libcamera-devel] [PATCH v3 01/27] Add GStreamer plugin and element skeleton
Nicolas Dufresne
nicolas at ndufresne.ca
Fri Mar 6 21:26:11 CET 2020
From: Nicolas Dufresne <nicolas.dufresne at collabora.com>
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
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..25350f2
--- /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.14.0',
+ 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')
--
2.24.1
More information about the libcamera-devel
mailing list