[{"id":3863,"web_url":"https://patchwork.libcamera.org/comment/3863/","msgid":"<20200229133853.GJ18738@pendragon.ideasonboard.com>","date":"2020-02-29T13:38:53","subject":"Re: [libcamera-devel] [PATCH v2 07/27] gst: libcamerasrc: Add\n\tcamera-name property","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Nicolas,\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nOn Thu, Feb 27, 2020 at 03:03:47PM -0500, Nicolas Dufresne wrote:\n> This property will be used to select by name the camera to use.\n> \n> Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>\n> ---\n>  src/gstreamer/gstlibcamerasrc.cpp | 68 ++++++++++++++++++++++++++++++-\n>  1 file changed, 67 insertions(+), 1 deletion(-)\n> \n> diff --git a/src/gstreamer/gstlibcamerasrc.cpp b/src/gstreamer/gstlibcamerasrc.cpp\n> index fb403cf..55ed174 100644\n> --- a/src/gstreamer/gstlibcamerasrc.cpp\n> +++ b/src/gstreamer/gstlibcamerasrc.cpp\n> @@ -6,12 +6,19 @@\n>   * gstlibcamerasrc.cpp - GStreamer Capture Element\n>   */\n>  \n> +#include \"gstlibcamera-utils.h\"\n>  #include \"gstlibcamerapad.h\"\n>  #include \"gstlibcamerasrc.h\"\n>  \n>  struct _GstLibcameraSrc {\n>  \tGstElement parent;\n>  \tGstPad *srcpad;\n> +\tgchar *camera_name;\n> +};\n> +\n> +enum {\n> +\tPROP_0,\n> +\tPROP_CAMERA_NAME\n>  };\n>  \n>  G_DEFINE_TYPE(GstLibcameraSrc, gst_libcamera_src, GST_TYPE_ELEMENT);\n> @@ -28,6 +35,52 @@ GstStaticPadTemplate request_src_template = {\n>  \t\"src_%s\", GST_PAD_SRC, GST_PAD_REQUEST, TEMPLATE_CAPS\n>  };\n>  \n> +static void\n> +gst_libcamera_src_set_property(GObject *object, guint prop_id,\n> +\t\t\t       const GValue *value, GParamSpec *pspec)\n> +{\n> +\tGLibLocker lock(GST_OBJECT(object));\n> +\tGstLibcameraSrc *self = GST_LIBCAMERA_SRC(object);\n> +\n> +\tswitch (prop_id) {\n> +\tcase PROP_CAMERA_NAME:\n> +\t\tg_free(self->camera_name);\n> +\t\tself->camera_name = g_value_dup_string(value);\n> +\t\tbreak;\n> +\tdefault:\n> +\t\tG_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);\n> +\t\tbreak;\n> +\t}\n> +}\n> +\n> +static void\n> +gst_libcamera_src_get_property(GObject *object, guint prop_id, GValue *value,\n> +\t\t\t       GParamSpec *pspec)\n> +{\n> +\tGLibLocker lock(GST_OBJECT(object));\n> +\tGstLibcameraSrc *self = GST_LIBCAMERA_SRC(object);\n> +\n> +\tswitch (prop_id) {\n> +\tcase PROP_CAMERA_NAME:\n> +\t\tg_value_set_string(value, self->camera_name);\n> +\t\tbreak;\n> +\tdefault:\n> +\t\tG_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);\n> +\t\tbreak;\n> +\t}\n> +}\n> +\n> +static void\n> +gst_libcamera_src_finalize(GObject *object)\n> +{\n> +\tGObjectClass *klass = G_OBJECT_CLASS(gst_libcamera_src_parent_class);\n> +\tGstLibcameraSrc *self = GST_LIBCAMERA_SRC(object);\n> +\n> +\tg_free(self->camera_name);\n> +\n> +\treturn klass->finalize(object);\n> +}\n> +\n>  static void\n>  gst_libcamera_src_init(GstLibcameraSrc *self)\n>  {\n> @@ -40,7 +93,12 @@ gst_libcamera_src_init(GstLibcameraSrc *self)\n>  static void\n>  gst_libcamera_src_class_init(GstLibcameraSrcClass *klass)\n>  {\n> -\tGstElementClass *element_class = (GstElementClass *)klass;\n> +\tGstElementClass *element_class = GST_ELEMENT_CLASS(klass);\n> +\tGObjectClass *object_class = G_OBJECT_CLASS(klass);\n> +\n> +\tobject_class->set_property = gst_libcamera_src_set_property;\n> +\tobject_class->get_property = gst_libcamera_src_get_property;\n> +\tobject_class->finalize = gst_libcamera_src_finalize;\n>  \n>  \tgst_element_class_set_metadata(element_class,\n>  \t\t\t\t       \"libcamera Source\", \"Source/Video\",\n> @@ -52,4 +110,12 @@ gst_libcamera_src_class_init(GstLibcameraSrcClass *klass)\n>  \tgst_element_class_add_static_pad_template_with_gtype(element_class,\n>  \t\t\t\t\t\t\t     &request_src_template,\n>  \t\t\t\t\t\t\t     GST_TYPE_LIBCAMERA_PAD);\n> +\n> +\tGParamSpec *spec = g_param_spec_string(\"camera-name\", \"Camera Name\",\n> +\t\t\t\t\t      \"Select by name which camera to use.\", nullptr,\n\nJust one more space of indentation here and below and it's perfect :-)\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> +\t\t\t\t\t      (GParamFlags)(GST_PARAM_MUTABLE_READY\n> +\t\t\t\t\t\t\t    | G_PARAM_CONSTRUCT\n> +\t\t\t\t\t\t\t    | G_PARAM_READWRITE\n> +\t\t\t\t\t\t\t    | G_PARAM_STATIC_STRINGS));\n> +\tg_object_class_install_property(object_class, PROP_CAMERA_NAME, spec);\n>  }","headers":{"Return-Path":"<laurent.pinchart@ideasonboard.com>","Received":["from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 72D9962689\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 29 Feb 2020 14:39:17 +0100 (CET)","from pendragon.ideasonboard.com (81-175-216-236.bb.dnainternet.fi\n\t[81.175.216.236])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id DEEC52AF;\n\tSat, 29 Feb 2020 14:39:16 +0100 (CET)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1582983557;\n\tbh=jVLwfif8JR/gEPbgQczzoq39f130oBi/NA9g/tR1Os4=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=M2X7eCs8qMXDYYcS5DCDhQSWwpuRjVX4hE8JW6YnbjhJ/84/n5+eZ++Cs487U50Ao\n\tIpckTOewikWLUcoJJ8A6aNd2wDW58bro7H/Ai4JVPQxYGYV6fDWXPET1vUCDpBnPx8\n\t1YZLfGUwH5YzQa9fTl7Cn8skfvTslq1PWkWu8R58=","Date":"Sat, 29 Feb 2020 15:38:53 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Nicolas Dufresne <nicolas.dufresne@collabora.com>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20200229133853.GJ18738@pendragon.ideasonboard.com>","References":"<20200227200407.490616-1-nicolas.dufresne@collabora.com>\n\t<20200227200407.490616-8-nicolas.dufresne@collabora.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20200227200407.490616-8-nicolas.dufresne@collabora.com>","User-Agent":"Mutt/1.10.1 (2018-07-13)","Subject":"Re: [libcamera-devel] [PATCH v2 07/27] gst: libcamerasrc: Add\n\tcamera-name property","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Sat, 29 Feb 2020 13:39:17 -0000"}},{"id":3965,"web_url":"https://patchwork.libcamera.org/comment/3965/","msgid":"<d06ae6c92743fa3064d719535c7a87dc5c6b2f38.camel@collabora.com>","date":"2020-03-06T16:48:35","subject":"Re: [libcamera-devel] [PATCH v2 07/27] gst: libcamerasrc: Add\n\tcamera-name property","submitter":{"id":31,"url":"https://patchwork.libcamera.org/api/people/31/","name":"Nicolas Dufresne","email":"nicolas.dufresne@collabora.com"},"content":"Le samedi 29 février 2020 à 15:38 +0200, Laurent Pinchart a écrit :\n> Hi Nicolas,\n> \n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nCareful, I nearly missed your comment below ;-P\n\n> \n> On Thu, Feb 27, 2020 at 03:03:47PM -0500, Nicolas Dufresne wrote:\n> > This property will be used to select by name the camera to use.\n> > \n> > Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>\n> > ---\n> >  src/gstreamer/gstlibcamerasrc.cpp | 68 ++++++++++++++++++++++++++++++-\n> >  1 file changed, 67 insertions(+), 1 deletion(-)\n> > \n> > diff --git a/src/gstreamer/gstlibcamerasrc.cpp\n> > b/src/gstreamer/gstlibcamerasrc.cpp\n> > index fb403cf..55ed174 100644\n> > --- a/src/gstreamer/gstlibcamerasrc.cpp\n> > +++ b/src/gstreamer/gstlibcamerasrc.cpp\n> > @@ -6,12 +6,19 @@\n> >   * gstlibcamerasrc.cpp - GStreamer Capture Element\n> >   */\n> >  \n> > +#include \"gstlibcamera-utils.h\"\n> >  #include \"gstlibcamerapad.h\"\n> >  #include \"gstlibcamerasrc.h\"\n> >  \n> >  struct _GstLibcameraSrc {\n> >  \tGstElement parent;\n> >  \tGstPad *srcpad;\n> > +\tgchar *camera_name;\n> > +};\n> > +\n> > +enum {\n> > +\tPROP_0,\n> > +\tPROP_CAMERA_NAME\n> >  };\n> >  \n> >  G_DEFINE_TYPE(GstLibcameraSrc, gst_libcamera_src, GST_TYPE_ELEMENT);\n> > @@ -28,6 +35,52 @@ GstStaticPadTemplate request_src_template = {\n> >  \t\"src_%s\", GST_PAD_SRC, GST_PAD_REQUEST, TEMPLATE_CAPS\n> >  };\n> >  \n> > +static void\n> > +gst_libcamera_src_set_property(GObject *object, guint prop_id,\n> > +\t\t\t       const GValue *value, GParamSpec *pspec)\n> > +{\n> > +\tGLibLocker lock(GST_OBJECT(object));\n> > +\tGstLibcameraSrc *self = GST_LIBCAMERA_SRC(object);\n> > +\n> > +\tswitch (prop_id) {\n> > +\tcase PROP_CAMERA_NAME:\n> > +\t\tg_free(self->camera_name);\n> > +\t\tself->camera_name = g_value_dup_string(value);\n> > +\t\tbreak;\n> > +\tdefault:\n> > +\t\tG_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);\n> > +\t\tbreak;\n> > +\t}\n> > +}\n> > +\n> > +static void\n> > +gst_libcamera_src_get_property(GObject *object, guint prop_id, GValue\n> > *value,\n> > +\t\t\t       GParamSpec *pspec)\n> > +{\n> > +\tGLibLocker lock(GST_OBJECT(object));\n> > +\tGstLibcameraSrc *self = GST_LIBCAMERA_SRC(object);\n> > +\n> > +\tswitch (prop_id) {\n> > +\tcase PROP_CAMERA_NAME:\n> > +\t\tg_value_set_string(value, self->camera_name);\n> > +\t\tbreak;\n> > +\tdefault:\n> > +\t\tG_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);\n> > +\t\tbreak;\n> > +\t}\n> > +}\n> > +\n> > +static void\n> > +gst_libcamera_src_finalize(GObject *object)\n> > +{\n> > +\tGObjectClass *klass = G_OBJECT_CLASS(gst_libcamera_src_parent_class);\n> > +\tGstLibcameraSrc *self = GST_LIBCAMERA_SRC(object);\n> > +\n> > +\tg_free(self->camera_name);\n> > +\n> > +\treturn klass->finalize(object);\n> > +}\n> > +\n> >  static void\n> >  gst_libcamera_src_init(GstLibcameraSrc *self)\n> >  {\n> > @@ -40,7 +93,12 @@ gst_libcamera_src_init(GstLibcameraSrc *self)\n> >  static void\n> >  gst_libcamera_src_class_init(GstLibcameraSrcClass *klass)\n> >  {\n> > -\tGstElementClass *element_class = (GstElementClass *)klass;\n> > +\tGstElementClass *element_class = GST_ELEMENT_CLASS(klass);\n> > +\tGObjectClass *object_class = G_OBJECT_CLASS(klass);\n> > +\n> > +\tobject_class->set_property = gst_libcamera_src_set_property;\n> > +\tobject_class->get_property = gst_libcamera_src_get_property;\n> > +\tobject_class->finalize = gst_libcamera_src_finalize;\n> >  \n> >  \tgst_element_class_set_metadata(element_class,\n> >  \t\t\t\t       \"libcamera Source\", \"Source/Video\",\n> > @@ -52,4 +110,12 @@ gst_libcamera_src_class_init(GstLibcameraSrcClass\n> > *klass)\n> >  \tgst_element_class_add_static_pad_template_with_gtype(element_class,\n> >  \t\t\t\t\t\t\t     &request_src_templa\n> > te,\n> >  \t\t\t\t\t\t\t     GST_TYPE_LIBCAMERA_\n> > PAD);\n> > +\n> > +\tGParamSpec *spec = g_param_spec_string(\"camera-name\", \"Camera Name\",\n> > +\t\t\t\t\t      \"Select by name which camera to\n> > use.\", nullptr,\n> \n> Just one more space of indentation here and below and it's perfect :-)\n\nWill fix, thanks for the catch.\n\n> \n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> \n> > +\t\t\t\t\t      (GParamFlags)(GST_PARAM_MUTABLE_RE\n> > ADY\n> > +\t\t\t\t\t\t\t    | G_PARAM_CONSTRUCT\n> > +\t\t\t\t\t\t\t    | G_PARAM_READWRITE\n> > +\t\t\t\t\t\t\t    |\n> > G_PARAM_STATIC_STRINGS));\n> > +\tg_object_class_install_property(object_class, PROP_CAMERA_NAME, spec);\n> >  }","headers":{"Return-Path":"<nicolas.dufresne@collabora.com>","Received":["from bhuna.collabora.co.uk (bhuna.collabora.co.uk\n\t[IPv6:2a00:1098:0:82:1000:25:2eeb:e3e3])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id E632360430\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  6 Mar 2020 17:48:45 +0100 (CET)","from nicolas-tpx395.localdomain (unknown [IPv6:2610:98:8005::527])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits))\n\t(No client certificate requested) (Authenticated sender: nicolas)\n\tby bhuna.collabora.co.uk (Postfix) with ESMTPSA id 49AE929707C;\n\tFri,  6 Mar 2020 16:48:45 +0000 (GMT)"],"Message-ID":"<d06ae6c92743fa3064d719535c7a87dc5c6b2f38.camel@collabora.com>","From":"Nicolas Dufresne <nicolas.dufresne@collabora.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Date":"Fri, 06 Mar 2020 11:48:35 -0500","In-Reply-To":"<20200229133853.GJ18738@pendragon.ideasonboard.com>","References":"<20200227200407.490616-1-nicolas.dufresne@collabora.com>\n\t<20200227200407.490616-8-nicolas.dufresne@collabora.com>\n\t<20200229133853.GJ18738@pendragon.ideasonboard.com>","Content-Type":"text/plain; charset=\"UTF-8\"","User-Agent":"Evolution 3.34.4 (3.34.4-1.fc31) ","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Subject":"Re: [libcamera-devel] [PATCH v2 07/27] gst: libcamerasrc: Add\n\tcamera-name property","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Fri, 06 Mar 2020 16:48:46 -0000"}}]