From patchwork Wed Jan 29 03:31:48 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolas Dufresne X-Patchwork-Id: 2735 Return-Path: Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [IPv6:2a00:1098:0:82:1000:25:2eeb:e3e3]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 919806044C for ; Wed, 29 Jan 2020 04:35:12 +0100 (CET) Received: from nicolas-tpx395.localdomain (unknown [IPv6:2002:c0de:c115:0:66fc:8b:2a38:8313]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: nicolas) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 93DE1292988; Wed, 29 Jan 2020 03:35:11 +0000 (GMT) From: Nicolas Dufresne To: libcamera-devel@lists.libcamera.org Cc: Nicolas Dufresne Date: Tue, 28 Jan 2020 22:31:48 -0500 Message-Id: <20200129033210.278800-2-nicolas@ndufresne.ca> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200129033210.278800-1-nicolas@ndufresne.ca> References: <20200129033210.278800-1-nicolas@ndufresne.ca> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v1 01/23] Add GStreamer plugin and element skeleton X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 29 Jan 2020 03:35:12 -0000 From: Nicolas Dufresne Signed-off-by: Nicolas Dufresne --- meson_options.txt | 5 +++++ src/gstreamer/gstlibcamera.c | 21 +++++++++++++++++++++ src/gstreamer/gstlibcamerasrc.cpp | 31 +++++++++++++++++++++++++++++++ src/gstreamer/gstlibcamerasrc.h | 22 ++++++++++++++++++++++ src/gstreamer/meson.build | 23 +++++++++++++++++++++++ src/meson.build | 2 ++ 6 files changed, 104 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..1b78ed8 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -15,3 +15,8 @@ option('v4l2', type : 'boolean', value : false, description : 'Compile the V4L2 compatibility layer') + +option('gstreamer', + type : 'feature', + value : 'auto', + description : 'Compile libcamera GStreamer plugin') diff --git a/src/gstreamer/gstlibcamera.c b/src/gstreamer/gstlibcamera.c new file mode 100644 index 0000000..953fb29 --- /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 + * + * 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..39a06a4 --- /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 + * + * 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 + * + * gstlibcamerasrc.h - GStreamer Capture Element + */ + +#include + +#ifndef __GST_LIBCAMERA_SRC_H__ +#define __GST_LIBCAMERA_SRC_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..32d4233 --- /dev/null +++ b/src/gstreamer/meson.build @@ -0,0 +1,23 @@ +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, + include_directories : [], + 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')