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:
Nicolas Dufresne 2019-11-23 17:00:53 -05:00 committed by Laurent Pinchart
parent 2cc90af8c7
commit 17cccc68a8
6 changed files with 113 additions and 0 deletions

View file

@ -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')

View 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");

View 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");
}

View 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
View 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

View file

@ -10,3 +10,5 @@ subdir('qcam')
if get_option('v4l2')
subdir('v4l2')
endif
subdir('gstreamer')