Message ID | 20200227200407.490616-8-nicolas.dufresne@collabora.com |
---|---|
State | Accepted |
Headers | show |
Series |
|
Related | show |
Hi Nicolas, Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> 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@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_template, > 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 :-) Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > + (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); > }
Le samedi 29 février 2020 à 15:38 +0200, Laurent Pinchart a écrit : > Hi Nicolas, > > Reviewed-by: Laurent Pinchart <laurent.pinchart@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@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@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); > > }
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_template, GST_TYPE_LIBCAMERA_PAD); + + GParamSpec *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); }
This property will be used to select by name the camera to use. Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com> --- src/gstreamer/gstlibcamerasrc.cpp | 68 ++++++++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-)