[libcamera-devel] [PATCH v2 07/27] gst: libcamerasrc: Add camera-name property
Nicolas Dufresne
nicolas.dufresne at collabora.com
Fri Mar 6 17:48:35 CET 2020
Le samedi 29 février 2020 à 15:38 +0200, Laurent Pinchart a écrit :
> Hi Nicolas,
>
> Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Careful, I nearly missed your comment below ;-P
>
> On Thu, Feb 27, 2020 at 03:03:47PM -0500, Nicolas Dufresne wrote:
> > This property will be used to select by name the camera to use.
> >
> > Signed-off-by: Nicolas Dufresne <nicolas.dufresne at collabora.com>
> > ---
> > src/gstreamer/gstlibcamerasrc.cpp | 68 ++++++++++++++++++++++++++++++-
> > 1 file changed, 67 insertions(+), 1 deletion(-)
> >
> > diff --git a/src/gstreamer/gstlibcamerasrc.cpp
> > b/src/gstreamer/gstlibcamerasrc.cpp
> > index fb403cf..55ed174 100644
> > --- a/src/gstreamer/gstlibcamerasrc.cpp
> > +++ b/src/gstreamer/gstlibcamerasrc.cpp
> > @@ -6,12 +6,19 @@
> > * gstlibcamerasrc.cpp - GStreamer Capture Element
> > */
> >
> > +#include "gstlibcamera-utils.h"
> > #include "gstlibcamerapad.h"
> > #include "gstlibcamerasrc.h"
> >
> > struct _GstLibcameraSrc {
> > GstElement parent;
> > GstPad *srcpad;
> > + gchar *camera_name;
> > +};
> > +
> > +enum {
> > + PROP_0,
> > + PROP_CAMERA_NAME
> > };
> >
> > G_DEFINE_TYPE(GstLibcameraSrc, gst_libcamera_src, GST_TYPE_ELEMENT);
> > @@ -28,6 +35,52 @@ GstStaticPadTemplate request_src_template = {
> > "src_%s", GST_PAD_SRC, GST_PAD_REQUEST, TEMPLATE_CAPS
> > };
> >
> > +static void
> > +gst_libcamera_src_set_property(GObject *object, guint prop_id,
> > + const GValue *value, GParamSpec *pspec)
> > +{
> > + GLibLocker lock(GST_OBJECT(object));
> > + GstLibcameraSrc *self = GST_LIBCAMERA_SRC(object);
> > +
> > + switch (prop_id) {
> > + case PROP_CAMERA_NAME:
> > + g_free(self->camera_name);
> > + self->camera_name = g_value_dup_string(value);
> > + break;
> > + default:
> > + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
> > + break;
> > + }
> > +}
> > +
> > +static void
> > +gst_libcamera_src_get_property(GObject *object, guint prop_id, GValue
> > *value,
> > + GParamSpec *pspec)
> > +{
> > + GLibLocker lock(GST_OBJECT(object));
> > + GstLibcameraSrc *self = GST_LIBCAMERA_SRC(object);
> > +
> > + switch (prop_id) {
> > + case PROP_CAMERA_NAME:
> > + g_value_set_string(value, self->camera_name);
> > + break;
> > + default:
> > + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
> > + break;
> > + }
> > +}
> > +
> > +static void
> > +gst_libcamera_src_finalize(GObject *object)
> > +{
> > + GObjectClass *klass = G_OBJECT_CLASS(gst_libcamera_src_parent_class);
> > + GstLibcameraSrc *self = GST_LIBCAMERA_SRC(object);
> > +
> > + g_free(self->camera_name);
> > +
> > + return klass->finalize(object);
> > +}
> > +
> > static void
> > gst_libcamera_src_init(GstLibcameraSrc *self)
> > {
> > @@ -40,7 +93,12 @@ gst_libcamera_src_init(GstLibcameraSrc *self)
> > static void
> > gst_libcamera_src_class_init(GstLibcameraSrcClass *klass)
> > {
> > - GstElementClass *element_class = (GstElementClass *)klass;
> > + GstElementClass *element_class = GST_ELEMENT_CLASS(klass);
> > + GObjectClass *object_class = G_OBJECT_CLASS(klass);
> > +
> > + object_class->set_property = gst_libcamera_src_set_property;
> > + object_class->get_property = gst_libcamera_src_get_property;
> > + object_class->finalize = gst_libcamera_src_finalize;
> >
> > gst_element_class_set_metadata(element_class,
> > "libcamera Source", "Source/Video",
> > @@ -52,4 +110,12 @@ gst_libcamera_src_class_init(GstLibcameraSrcClass
> > *klass)
> > gst_element_class_add_static_pad_template_with_gtype(element_class,
> > &request_src_templa
> > te,
> > GST_TYPE_LIBCAMERA_
> > PAD);
> > +
> > + GParamSpec *spec = g_param_spec_string("camera-name", "Camera Name",
> > + "Select by name which camera to
> > use.", nullptr,
>
> Just one more space of indentation here and below and it's perfect :-)
Will fix, thanks for the catch.
>
> Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
>
> > + (GParamFlags)(GST_PARAM_MUTABLE_RE
> > ADY
> > + | G_PARAM_CONSTRUCT
> > + | G_PARAM_READWRITE
> > + |
> > G_PARAM_STATIC_STRINGS));
> > + g_object_class_install_property(object_class, PROP_CAMERA_NAME, spec);
> > }
More information about the libcamera-devel
mailing list