[{"id":3662,"web_url":"https://patchwork.libcamera.org/comment/3662/","msgid":"<20200211192124.GA2129@pendragon.ideasonboard.com>","date":"2020-02-11T19:21:24","subject":"Re: [libcamera-devel] [PATCH v1 05/23] gst: Add pads to the source","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Nicolas,\n\nThank you for the patch.\n\nOn Tue, Jan 28, 2020 at 10:31:52PM -0500, Nicolas Dufresne wrote:\n> From: Nicolas Dufresne <nicolas.dufresne@collabora.com>\n> \n> This simply add the boiler plate for pads on the source element. The\n\ns/add/adds/\n\n> design is that we have one pad, called \"src\", that will always be\n> present, and then more pads can be requested prior in READY or less\n> state. Initially pads have one property \"stream-role\" that let you\n> decide which role this pad will have.\n> \n> Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>\n> ---\n>  src/gstreamer/gstlibcamerapad.cpp | 101 ++++++++++++++++++++++++++++++\n>  src/gstreamer/gstlibcamerapad.h   |  19 ++++++\n>  src/gstreamer/gstlibcamerasrc.cpp |  19 ++++++\n>  src/gstreamer/meson.build         |   1 +\n>  4 files changed, 140 insertions(+)\n>  create mode 100644 src/gstreamer/gstlibcamerapad.cpp\n>  create mode 100644 src/gstreamer/gstlibcamerapad.h\n> \n> diff --git a/src/gstreamer/gstlibcamerapad.cpp b/src/gstreamer/gstlibcamerapad.cpp\n> new file mode 100644\n> index 0000000..c6c22e4\n> --- /dev/null\n> +++ b/src/gstreamer/gstlibcamerapad.cpp\n> @@ -0,0 +1,101 @@\n> +/* SPDX-License-Identifier: LGPL-2.1-or-later */\n> +/*\n> + * Copyright (C) 2019, Collabora Ltd.\n> + *     Author: Nicolas Dufresne <nicolas.dufresne@collabora.com>\n> + *\n> + * gstlibcamerapad.cpp - GStreamer Capture Pad\n> + */\n> +\n> +#include \"gstlibcamerapad.h\"\n> +#include \"gstlibcamera-utils.h\"\n> +\n> +#include <libcamera/stream.h>\n> +\n> +using namespace libcamera;\n> +\n> +struct _GstLibcameraPad {\n> +\tGstPad parent;\n> +\tStreamRole role;\n> +};\n> +\n> +enum {\n> +\tPROP_0,\n> +\tPROP_STREAM_ROLE\n> +};\n> +\n> +G_DEFINE_TYPE(GstLibcameraPad, gst_libcamera_pad, GST_TYPE_PAD);\n> +\n> +static void\n> +gst_libcamera_pad_set_property(GObject *object, guint prop_id,\n> +\t\t\t       const GValue *value, GParamSpec *pspec)\n> +{\n> +\tauto *self = GST_LIBCAMERA_PAD(object);\n> +\tGST_OBJECT_LOCKER(self);\n> +\n> +\tswitch (prop_id) {\n> +\tcase PROP_STREAM_ROLE:\n> +\t\tself->role = (StreamRole)g_value_get_enum(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_pad_get_property(GObject *object, guint prop_id, GValue *value,\n> +\t\t\t       GParamSpec *pspec)\n> +{\n> +\tauto *self = GST_LIBCAMERA_PAD(object);\n> +\tGST_OBJECT_LOCKER(self);\n> +\n> +\tswitch (prop_id) {\n> +\tcase PROP_STREAM_ROLE:\n> +\t\tg_value_set_enum(value, self->role);\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_pad_init(GstLibcameraPad *self)\n> +{\n> +}\n> +\n> +static GType\n> +gst_libcamera_stream_role_get_type(void)\n> +{\n> +\tstatic GType type = 0;\n> +\tstatic const GEnumValue values[] = {\n> +\t\t{ StillCapture, \"libcamera::StillCapture\", \"still-capture\" },\n> +\t\t{ VideoRecording, \"libcamera::VideoRecording\", \"video-recording\" },\n> +\t\t{ Viewfinder, \"libcamera::Viewfinder\", \"view-finder\" },\n> +\t\t{ 0, NULL, NULL }\n> +\t};\n> +\n> +\tif (!type)\n> +\t\ttype = g_enum_register_static(\"GstLibcameraStreamRole\", values);\n> +\n> +\treturn type;\n> +}\n> +\n> +static void\n> +gst_libcamera_pad_class_init(GstLibcameraPadClass *klass)\n> +{\n> +\tauto *object_class = G_OBJECT_CLASS(klass);\n> +\n> +\tobject_class->set_property = gst_libcamera_pad_set_property;\n> +\tobject_class->get_property = gst_libcamera_pad_get_property;\n> +\n> +\tauto *spec = g_param_spec_enum(\"stream-role\", \"Stream Role\",\n> +\t\t\t\t       \"The selected stream role\",\n> +\t\t\t\t       gst_libcamera_stream_role_get_type(),\n> +\t\t\t\t       VideoRecording,\n> +\t\t\t\t       (GParamFlags)(GST_PARAM_MUTABLE_READY\n> +\t\t\t\t\t             | G_PARAM_CONSTRUCT\n> +\t\t\t\t\t\t     | G_PARAM_READWRITE\n> +\t\t\t\t\t\t     | G_PARAM_STATIC_STRINGS));\n> +\tg_object_class_install_property(object_class, PROP_STREAM_ROLE, spec);\n> +}\n> diff --git a/src/gstreamer/gstlibcamerapad.h b/src/gstreamer/gstlibcamerapad.h\n> new file mode 100644\n> index 0000000..2e745f1\n> --- /dev/null\n> +++ b/src/gstreamer/gstlibcamerapad.h\n> @@ -0,0 +1,19 @@\n> +/* SPDX-License-Identifier: LGPL-2.1-or-later */\n> +/*\n> + * Copyright (C) 2019, Collabora Ltd.\n> + *     Author: Nicolas Dufresne <nicolas.dufresne@collabora.com>\n> + *\n> + * gstlibcamerapad.h - GStreamer Capture Element\n> + */\n> +\n> +#include <gst/gst.h>\n> +\n> +#ifndef __GST_LIBCAMERA_PAD_H__\n> +#define __GST_LIBCAMERA_PAD_H__\n> +\n> +#define GST_TYPE_LIBCAMERA_PAD gst_libcamera_pad_get_type()\n> +G_DECLARE_FINAL_TYPE(GstLibcameraPad, gst_libcamera_pad,\n> +\t\t     GST_LIBCAMERA, PAD, GstPad)\n> +\n> +\n> +#endif /* __GST_LIBCAMERA_PAD_H__ */\n> diff --git a/src/gstreamer/gstlibcamerasrc.cpp b/src/gstreamer/gstlibcamerasrc.cpp\n> index 39a06a4..a8bcede 100644\n> --- a/src/gstreamer/gstlibcamerasrc.cpp\n> +++ b/src/gstreamer/gstlibcamerasrc.cpp\n> @@ -7,6 +7,7 @@\n>   */\n>  \n>  #include \"gstlibcamerasrc.h\"\n> +#include \"gstlibcamerapad.h\"\n\nAlphabetical order here too (I'll stop saying it now :-)).\n\n>  \n>  struct _GstLibcameraSrc {\n>  \tGstElement parent;\n> @@ -14,6 +15,18 @@ struct _GstLibcameraSrc {\n>  \n>  G_DEFINE_TYPE(GstLibcameraSrc, gst_libcamera_src, GST_TYPE_ELEMENT);\n>  \n> +#define TEMPLATE_CAPS GST_STATIC_CAPS(\"video/x-raw;image/jpeg\")\n\nJPEG is only supported by UVC in libcamera. Should we default to a YUV\nformat ?\n\n> +\n> +/* For the simple case, we have a src pad that is always present. */\n> +GstStaticPadTemplate src_template = {\n> +\t\"src\", GST_PAD_SRC, GST_PAD_ALWAYS, TEMPLATE_CAPS\n> +};\n> +\n> +/* More pads can be requested in state < PAUSED */\n> +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_init(GstLibcameraSrc *self)\n>  {\n> @@ -28,4 +41,10 @@ gst_libcamera_src_class_init(GstLibcameraSrcClass *klass)\n>  \t\t\t\t       \"LibCamera Source\", \"Source/Video\",\n>  \t\t\t\t       \"Linux Camera source using libcamera\",\n>  \t\t\t\t       \"Nicolas Dufresne <nicolas.dufresne@collabora.com\");\n> +\tgst_element_class_add_static_pad_template_with_gtype(element_class,\n> +\t\t\t\t\t\t\t     &src_template,\n> +\t\t\t\t\t\t\t     GST_TYPE_LIBCAMERA_PAD);\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> diff --git a/src/gstreamer/meson.build b/src/gstreamer/meson.build\n> index 7769b78..e497bf4 100644\n> --- a/src/gstreamer/meson.build\n> +++ b/src/gstreamer/meson.build\n> @@ -3,6 +3,7 @@ libcamera_gst_sources = [\n>      'gstlibcamera-utils.cpp',\n>      'gstlibcamerasrc.cpp',\n>      'gstlibcameraprovider.cpp',\n> +    'gstlibcamerapad.cpp',\n>  ]\n>  \n>  libcamera_gst_c_args = [","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 4B15E60F3C\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 11 Feb 2020 20:21:41 +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 421689DA;\n\tTue, 11 Feb 2020 20:21:40 +0100 (CET)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1581448900;\n\tbh=vLKY392n3xAhmdOUoytTPCmMSAQYNPSu/z5z18RXNjY=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=eBJ3vO+gfkNticYjwpuqW6OXiQAMarm9WtlGwpdf1kfIZ9BNp/FsHolNna6S3orbP\n\tDyfCAdQlrcy8HIwHEpBsNAjZkIRygedoNaz+36l7PTf/Zerv+BBFx9OPtvKKBEs1DS\n\t0/XdLZiK+aNk+I3TpvQUIwexwCcU1IXhlPslBBUw=","Date":"Tue, 11 Feb 2020 21:21:24 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Nicolas Dufresne <nicolas@ndufresne.ca>","Cc":"libcamera-devel@lists.libcamera.org,\n\tNicolas Dufresne <nicolas.dufresne@collabora.com>","Message-ID":"<20200211192124.GA2129@pendragon.ideasonboard.com>","References":"<20200129033210.278800-1-nicolas@ndufresne.ca>\n\t<20200129033210.278800-6-nicolas@ndufresne.ca>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20200129033210.278800-6-nicolas@ndufresne.ca>","User-Agent":"Mutt/1.10.1 (2018-07-13)","Subject":"Re: [libcamera-devel] [PATCH v1 05/23] gst: Add pads to the source","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":"Tue, 11 Feb 2020 19:21:41 -0000"}},{"id":3670,"web_url":"https://patchwork.libcamera.org/comment/3670/","msgid":"<b581cc7ce9ea0e4db62b3c055470de1bd2b3d4dc.camel@collabora.com>","date":"2020-02-11T21:54:36","subject":"Re: [libcamera-devel] [PATCH v1 05/23] gst: Add pads to the source","submitter":{"id":31,"url":"https://patchwork.libcamera.org/api/people/31/","name":"Nicolas Dufresne","email":"nicolas.dufresne@collabora.com"},"content":"On mar, 2020-02-11 at 21:21 +0200, Laurent Pinchart wrote:\n> Hi Nicolas,\n> \n> Thank you for the patch.\n> \n> On Tue, Jan 28, 2020 at 10:31:52PM -0500, Nicolas Dufresne wrote:\n> > From: Nicolas Dufresne <nicolas.dufresne@collabora.com>\n> > \n> > This simply add the boiler plate for pads on the source element. The\n> \n> s/add/adds/\n> \n> > design is that we have one pad, called \"src\", that will always be\n> > present, and then more pads can be requested prior in READY or less\n> > state. Initially pads have one property \"stream-role\" that let you\n> > decide which role this pad will have.\n> > \n> > Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>\n> > ---\n> >  src/gstreamer/gstlibcamerapad.cpp | 101 ++++++++++++++++++++++++++++++\n> >  src/gstreamer/gstlibcamerapad.h   |  19 ++++++\n> >  src/gstreamer/gstlibcamerasrc.cpp |  19 ++++++\n> >  src/gstreamer/meson.build         |   1 +\n> >  4 files changed, 140 insertions(+)\n> >  create mode 100644 src/gstreamer/gstlibcamerapad.cpp\n> >  create mode 100644 src/gstreamer/gstlibcamerapad.h\n> > \n> > diff --git a/src/gstreamer/gstlibcamerapad.cpp\n> > b/src/gstreamer/gstlibcamerapad.cpp\n> > new file mode 100644\n> > index 0000000..c6c22e4\n> > --- /dev/null\n> > +++ b/src/gstreamer/gstlibcamerapad.cpp\n> > @@ -0,0 +1,101 @@\n> > +/* SPDX-License-Identifier: LGPL-2.1-or-later */\n> > +/*\n> > + * Copyright (C) 2019, Collabora Ltd.\n> > + *     Author: Nicolas Dufresne <nicolas.dufresne@collabora.com>\n> > + *\n> > + * gstlibcamerapad.cpp - GStreamer Capture Pad\n> > + */\n> > +\n> > +#include \"gstlibcamerapad.h\"\n> > +#include \"gstlibcamera-utils.h\"\n> > +\n> > +#include <libcamera/stream.h>\n> > +\n> > +using namespace libcamera;\n> > +\n> > +struct _GstLibcameraPad {\n> > +\tGstPad parent;\n> > +\tStreamRole role;\n> > +};\n> > +\n> > +enum {\n> > +\tPROP_0,\n> > +\tPROP_STREAM_ROLE\n> > +};\n> > +\n> > +G_DEFINE_TYPE(GstLibcameraPad, gst_libcamera_pad, GST_TYPE_PAD);\n> > +\n> > +static void\n> > +gst_libcamera_pad_set_property(GObject *object, guint prop_id,\n> > +\t\t\t       const GValue *value, GParamSpec *pspec)\n> > +{\n> > +\tauto *self = GST_LIBCAMERA_PAD(object);\n> > +\tGST_OBJECT_LOCKER(self);\n> > +\n> > +\tswitch (prop_id) {\n> > +\tcase PROP_STREAM_ROLE:\n> > +\t\tself->role = (StreamRole)g_value_get_enum(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_pad_get_property(GObject *object, guint prop_id, GValue\n> > *value,\n> > +\t\t\t       GParamSpec *pspec)\n> > +{\n> > +\tauto *self = GST_LIBCAMERA_PAD(object);\n> > +\tGST_OBJECT_LOCKER(self);\n> > +\n> > +\tswitch (prop_id) {\n> > +\tcase PROP_STREAM_ROLE:\n> > +\t\tg_value_set_enum(value, self->role);\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_pad_init(GstLibcameraPad *self)\n> > +{\n> > +}\n> > +\n> > +static GType\n> > +gst_libcamera_stream_role_get_type(void)\n> > +{\n> > +\tstatic GType type = 0;\n> > +\tstatic const GEnumValue values[] = {\n> > +\t\t{ StillCapture, \"libcamera::StillCapture\", \"still-capture\" },\n> > +\t\t{ VideoRecording, \"libcamera::VideoRecording\", \"video-recording\" \n> > },\n> > +\t\t{ Viewfinder, \"libcamera::Viewfinder\", \"view-finder\" },\n> > +\t\t{ 0, NULL, NULL }\n> > +\t};\n> > +\n> > +\tif (!type)\n> > +\t\ttype = g_enum_register_static(\"GstLibcameraStreamRole\", values);\n> > +\n> > +\treturn type;\n> > +}\n> > +\n> > +static void\n> > +gst_libcamera_pad_class_init(GstLibcameraPadClass *klass)\n> > +{\n> > +\tauto *object_class = G_OBJECT_CLASS(klass);\n> > +\n> > +\tobject_class->set_property = gst_libcamera_pad_set_property;\n> > +\tobject_class->get_property = gst_libcamera_pad_get_property;\n> > +\n> > +\tauto *spec = g_param_spec_enum(\"stream-role\", \"Stream Role\",\n> > +\t\t\t\t       \"The selected stream role\",\n> > +\t\t\t\t       gst_libcamera_stream_role_get_type(),\n> > +\t\t\t\t       VideoRecording,\n> > +\t\t\t\t       (GParamFlags)(GST_PARAM_MUTABLE_READY\n> > +\t\t\t\t\t             | G_PARAM_CONSTRUCT\n> > +\t\t\t\t\t\t     | G_PARAM_READWRITE\n> > +\t\t\t\t\t\t     | G_PARAM_STATIC_STRINGS));\n> > +\tg_object_class_install_property(object_class, PROP_STREAM_ROLE, spec);\n> > +}\n> > diff --git a/src/gstreamer/gstlibcamerapad.h\n> > b/src/gstreamer/gstlibcamerapad.h\n> > new file mode 100644\n> > index 0000000..2e745f1\n> > --- /dev/null\n> > +++ b/src/gstreamer/gstlibcamerapad.h\n> > @@ -0,0 +1,19 @@\n> > +/* SPDX-License-Identifier: LGPL-2.1-or-later */\n> > +/*\n> > + * Copyright (C) 2019, Collabora Ltd.\n> > + *     Author: Nicolas Dufresne <nicolas.dufresne@collabora.com>\n> > + *\n> > + * gstlibcamerapad.h - GStreamer Capture Element\n> > + */\n> > +\n> > +#include <gst/gst.h>\n> > +\n> > +#ifndef __GST_LIBCAMERA_PAD_H__\n> > +#define __GST_LIBCAMERA_PAD_H__\n> > +\n> > +#define GST_TYPE_LIBCAMERA_PAD gst_libcamera_pad_get_type()\n> > +G_DECLARE_FINAL_TYPE(GstLibcameraPad, gst_libcamera_pad,\n> > +\t\t     GST_LIBCAMERA, PAD, GstPad)\n> > +\n> > +\n> > +#endif /* __GST_LIBCAMERA_PAD_H__ */\n> > diff --git a/src/gstreamer/gstlibcamerasrc.cpp\n> > b/src/gstreamer/gstlibcamerasrc.cpp\n> > index 39a06a4..a8bcede 100644\n> > --- a/src/gstreamer/gstlibcamerasrc.cpp\n> > +++ b/src/gstreamer/gstlibcamerasrc.cpp\n> > @@ -7,6 +7,7 @@\n> >   */\n> >  \n> >  #include \"gstlibcamerasrc.h\"\n> > +#include \"gstlibcamerapad.h\"\n> \n> Alphabetical order here too (I'll stop saying it now :-)).\n> \n> >  \n> >  struct _GstLibcameraSrc {\n> >  \tGstElement parent;\n> > @@ -14,6 +15,18 @@ struct _GstLibcameraSrc {\n> >  \n> >  G_DEFINE_TYPE(GstLibcameraSrc, gst_libcamera_src, GST_TYPE_ELEMENT);\n> >  \n> > +#define TEMPLATE_CAPS GST_STATIC_CAPS(\"video/x-raw;image/jpeg\")\n> \n> JPEG is only supported by UVC in libcamera. Should we default to a YUV\n> format ?\n\nIt uses video/x-raw first followed by jpeg, which include all video formats that\nare not compressed. This could benefit from a space after \";\" in the caps\nstring. It's a bit hard to read this way.\n\n> \n> > +\n> > +/* For the simple case, we have a src pad that is always present. */\n> > +GstStaticPadTemplate src_template = {\n> > +\t\"src\", GST_PAD_SRC, GST_PAD_ALWAYS, TEMPLATE_CAPS\n> > +};\n> > +\n> > +/* More pads can be requested in state < PAUSED */\n> > +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_init(GstLibcameraSrc *self)\n> >  {\n> > @@ -28,4 +41,10 @@ gst_libcamera_src_class_init(GstLibcameraSrcClass *klass)\n> >  \t\t\t\t       \"LibCamera Source\", \"Source/Video\",\n> >  \t\t\t\t       \"Linux Camera source using libcamera\",\n> >  \t\t\t\t       \"Nicolas Dufresne <\n> > nicolas.dufresne@collabora.com\");\n> > +\tgst_element_class_add_static_pad_template_with_gtype(element_class,\n> > +\t\t\t\t\t\t\t     &src_template,\n> > +\t\t\t\t\t\t\t     GST_TYPE_LIBCAMERA_\n> > PAD);\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> > diff --git a/src/gstreamer/meson.build b/src/gstreamer/meson.build\n> > index 7769b78..e497bf4 100644\n> > --- a/src/gstreamer/meson.build\n> > +++ b/src/gstreamer/meson.build\n> > @@ -3,6 +3,7 @@ libcamera_gst_sources = [\n> >      'gstlibcamera-utils.cpp',\n> >      'gstlibcamerasrc.cpp',\n> >      'gstlibcameraprovider.cpp',\n> > +    'gstlibcamerapad.cpp',\n> >  ]\n> >  \n> >  libcamera_gst_c_args = [","headers":{"Return-Path":"<nicolas.dufresne@collabora.com>","Received":["from bhuna.collabora.co.uk (bhuna.collabora.co.uk [46.235.227.227])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id EF96E60F3C\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 11 Feb 2020 22:54: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 67CF62943DC;\n\tTue, 11 Feb 2020 21:54:45 +0000 (GMT)"],"Message-ID":"<b581cc7ce9ea0e4db62b3c055470de1bd2b3d4dc.camel@collabora.com>","From":"Nicolas Dufresne <nicolas.dufresne@collabora.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Date":"Tue, 11 Feb 2020 16:54:36 -0500","In-Reply-To":"<20200211192124.GA2129@pendragon.ideasonboard.com>","References":"<20200129033210.278800-1-nicolas@ndufresne.ca>\n\t<20200129033210.278800-6-nicolas@ndufresne.ca>\n\t<20200211192124.GA2129@pendragon.ideasonboard.com>","Content-Type":"text/plain; charset=\"UTF-8\"","User-Agent":"Evolution 3.34.3 (3.34.3-1.fc31) ","MIME-Version":"1.0","Content-Transfer-Encoding":"7bit","Subject":"Re: [libcamera-devel] [PATCH v1 05/23] gst: Add pads to the source","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":"Tue, 11 Feb 2020 21:54:46 -0000"}}]