Add GStreamer plugin and element skeleton
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> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> [Silence -Wunused-function warning for older GLib versions] Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
2cc90af8c7
commit
17cccc68a8
6 changed files with 113 additions and 0 deletions
|
@ -7,6 +7,11 @@ option('documentation',
|
||||||
type : 'boolean',
|
type : 'boolean',
|
||||||
description : 'Generate the project documentation')
|
description : 'Generate the project documentation')
|
||||||
|
|
||||||
|
option('gstreamer',
|
||||||
|
type : 'feature',
|
||||||
|
value : 'auto',
|
||||||
|
description : 'Compile libcamera GStreamer plugin')
|
||||||
|
|
||||||
option('test',
|
option('test',
|
||||||
type : 'boolean',
|
type : 'boolean',
|
||||||
description: 'Compile and include the tests')
|
description: 'Compile and include the tests')
|
||||||
|
|
21
src/gstreamer/gstlibcamera.c
Normal file
21
src/gstreamer/gstlibcamera.c
Normal file
|
@ -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");
|
31
src/gstreamer/gstlibcamerasrc.cpp
Normal file
31
src/gstreamer/gstlibcamerasrc.cpp
Normal file
|
@ -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");
|
||||||
|
}
|
22
src/gstreamer/gstlibcamerasrc.h
Normal file
22
src/gstreamer/gstlibcamerasrc.h
Normal file
|
@ -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__ */
|
32
src/gstreamer/meson.build
Normal file
32
src/gstreamer/meson.build
Normal file
|
@ -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
|
|
@ -10,3 +10,5 @@ subdir('qcam')
|
||||||
if get_option('v4l2')
|
if get_option('v4l2')
|
||||||
subdir('v4l2')
|
subdir('v4l2')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
subdir('gstreamer')
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue