[libcamera-devel] [PATCH v1 07/23] gst: libcamerasrc: Add camera-name property
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Tue Feb 11 20:28:16 CET 2020
Hi Nicolas,
Thank you for the patch.
On Tue, Jan 28, 2020 at 10:31:54PM -0500, Nicolas Dufresne wrote:
> From: Nicolas Dufresne <nicolas.dufresne at collabora.com>
>
> 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, 68 insertions(+)
>
> diff --git a/src/gstreamer/gstlibcamerasrc.cpp b/src/gstreamer/gstlibcamerasrc.cpp
> index 50bba39..74e1d7e 100644
> --- a/src/gstreamer/gstlibcamerasrc.cpp
> +++ b/src/gstreamer/gstlibcamerasrc.cpp
> @@ -8,10 +8,17 @@
>
> #include "gstlibcamerasrc.h"
> #include "gstlibcamerapad.h"
> +#include "gstlibcamera-utils.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,53 @@ 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)
> +{
> + GST_OBJECT_LOCKER(object);
> + GstLibcameraSrc *self = GST_LIBCAMERA_SRC(object);
> +
> + switch (prop_id) {
> + case PROP_CAMERA_NAME:
> + g_free (self->camera_name);
Extra space after g_free.
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> + 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)
> +{
> + GST_OBJECT_LOCKER(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)
> {
> @@ -41,6 +95,12 @@ static void
> gst_libcamera_src_class_init(GstLibcameraSrcClass *klass)
> {
> GstElementClass *element_class = (GstElementClass *)klass;
> + GObjectClass *object_class = (GObjectClass *)klass;
> + GParamSpec *spec;
> +
> + 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 +112,12 @@ gst_libcamera_src_class_init(GstLibcameraSrcClass *klass)
> gst_element_class_add_static_pad_template_with_gtype(element_class,
> &request_src_template,
> GST_TYPE_LIBCAMERA_PAD);
> +
> + spec = g_param_spec_string("camera-name", "Camera Name",
> + "Select by name which camera to use.", nullptr,
> + (GParamFlags)(GST_PARAM_MUTABLE_READY
> + | G_PARAM_CONSTRUCT
> + | G_PARAM_READWRITE
> + | G_PARAM_STATIC_STRINGS));
> + g_object_class_install_property(object_class, PROP_CAMERA_NAME, spec);
> }
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list