[{"id":38443,"web_url":"https://patchwork.libcamera.org/comment/38443/","msgid":"<14aca4e09692a1138edc297f3a7d362b@igalia.com>","date":"2026-03-27T15:44:39","subject":"Re: [PATCH v3] gstreamer: Add sensor-config property","submitter":{"id":232,"url":"https://patchwork.libcamera.org/api/people/232/","name":"Umang Jain","email":"uajain@igalia.com"},"content":"On 2026-03-25 15:17, David Plowman wrote:\n> The sensor-config property may optionally be specified to give the\n> outputSize and bitDepth of the SensorConfiguration that is applied to\n> the camera configuration. For example, use\n> \n> libcamerasrc sensor-config=\"sensor/config,width=2304,height=1296,depth=10\"\n> \n> to request the 10-bit 2304x1296 mode of a sensor.\n> \n> All three parameters, width, height and bit depth, must be present, or\n> it will issue a warning and revert to automatic mode selection (as if\n> there were no sensor-config at all).\n> \n> If a mode is requested that doesn't exist then camera configuration\n> will fail and the pipeline won't start.\n> \n> As future-proofing, the SensorConfiguration's binning and increment\n> parameters may be specified, though libcamera currently ignores them.\n> \n> Signed-off-by: David Plowman <david.plowman@raspberrypi.com>\n> Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>\n> Closes: https://gitlab.freedesktop.org/camera/libcamera/-/issues/300\n> ---\n>  src/gstreamer/gstlibcamerasrc.cpp | 61 +++++++++++++++++++++++++++++++\n>  1 file changed, 61 insertions(+)\n> \n> diff --git a/src/gstreamer/gstlibcamerasrc.cpp b/src/gstreamer/gstlibcamerasrc.cpp\n> index a7241e9b..482b4761 100644\n> --- a/src/gstreamer/gstlibcamerasrc.cpp\n> +++ b/src/gstreamer/gstlibcamerasrc.cpp\n> @@ -141,6 +141,7 @@ struct _GstLibcameraSrc {\n>  \tGstTask *task;\n>  \n>  \tgchar *camera_name;\n> +\tGstStructure *sensor_config;\n>  \n>  \tstd::atomic<GstEvent *> pending_eos;\n>  \n> @@ -152,6 +153,7 @@ struct _GstLibcameraSrc {\n>  enum {\n>  \tPROP_0,\n>  \tPROP_CAMERA_NAME,\n> +\tPROP_SENSOR_CONFIG,\n>  \tPROP_LAST\n>  };\n>  \n> @@ -846,6 +848,44 @@ gst_libcamera_src_task_enter(GstTask *task, [[maybe_unused]] GThread *thread,\n>  \t}\n>  \tg_assert(state->config_->size() == state->srcpads_.size());\n>  \n> +\t/* Apply optional sensor configuration. */\n> +\tif (self->sensor_config) {\n> +\t\tgint w = 0, h = 0, depth = 0;\n> +\t\tif (!gst_structure_get_int(self->sensor_config, \"width\", &w) ||\n> +\t\t    !gst_structure_get_int(self->sensor_config, \"height\", &h) ||\n> +\t\t    !gst_structure_get_int(self->sensor_config, \"depth\", &depth) ||\n> +\t\t    w <= 0 || h <= 0 || depth <= 0) {\n> +\t\t\tGST_ELEMENT_WARNING(self, RESOURCE, SETTINGS,\n> +\t\t\t\t\t    (\"sensor-config requires non-zero width, height and depth\"\n> +\t\t\t\t\t     \" fields, ignoring\"),\n> +\t\t\t\t\t    (nullptr));\n> +\t\t} else {\n> +\t\t\tSensorConfiguration sensorCfg;\n> +\t\t\tsensorCfg.outputSize = Size(w, h);\n> +\t\t\tsensorCfg.bitDepth = depth;\n> +\n> +\t\t\t/* Optional binning (defaults to 1x1). */\n> +\t\t\tgint binX, binY;\n> +\t\t\tif (gst_structure_get_int(self->sensor_config, \"bin-x\", &binX) && binX > 0)\n> +\t\t\t\tsensorCfg.binning.binX = binX;\n> +\t\t\tif (gst_structure_get_int(self->sensor_config, \"bin-y\", &binY) && binY > 0)\n> +\t\t\t\tsensorCfg.binning.binY = binY;\n> +\n> +\t\t\t/* Optional skipping (defaults to 1 for all increments). */\n> +\t\t\tgint xOddInc, xEvenInc, yOddInc, yEvenInc;\n> +\t\t\tif (gst_structure_get_int(self->sensor_config, \"x-odd-inc\", &xOddInc) && xOddInc > 0)\n> +\t\t\t\tsensorCfg.skipping.xOddInc = xOddInc;\n> +\t\t\tif (gst_structure_get_int(self->sensor_config, \"x-even-inc\", &xEvenInc) && xEvenInc > 0)\n> +\t\t\t\tsensorCfg.skipping.xEvenInc = xEvenInc;\n> +\t\t\tif (gst_structure_get_int(self->sensor_config, \"y-odd-inc\", &yOddInc) && yOddInc > 0)\n> +\t\t\t\tsensorCfg.skipping.yOddInc = yOddInc;\n> +\t\t\tif (gst_structure_get_int(self->sensor_config, \"y-even-inc\", &yEvenInc) && yEvenInc > 0)\n> +\t\t\t\tsensorCfg.skipping.yEvenInc = yEvenInc;\n> +\n> +\t\t\tstate->config_->sensorConfig = sensorCfg;\n\nPlease also look at https://patchwork.libcamera.org/patch/20080/#29567\nreasoning as well.\n\nThanks,\nUmang\n\n\n> +\t\t}\n> +\t}\n> +\n>  \tif (!gst_libcamera_src_negotiate(self)) {\n>  \t\tstate->initControls_.clear();\n>  \t\tGST_ELEMENT_FLOW_ERROR(self, GST_FLOW_NOT_NEGOTIATED);\n> @@ -934,6 +974,10 @@ gst_libcamera_src_set_property(GObject *object, guint prop_id,\n>  \t\tg_free(self->camera_name);\n>  \t\tself->camera_name = g_value_dup_string(value);\n>  \t\tbreak;\n> +\tcase PROP_SENSOR_CONFIG:\n> +\t\tg_clear_pointer(&self->sensor_config, gst_structure_free);\n> +\t\tself->sensor_config = (GstStructure *)g_value_dup_boxed(value);\n> +\t\tbreak;\n>  \tdefault:\n>  \t\tif (!state->controls_.setProperty(prop_id - PROP_LAST, value, pspec))\n>  \t\t\tG_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);\n> @@ -953,6 +997,9 @@ gst_libcamera_src_get_property(GObject *object, guint prop_id, GValue *value,\n>  \tcase PROP_CAMERA_NAME:\n>  \t\tg_value_set_string(value, self->camera_name);\n>  \t\tbreak;\n> +\tcase PROP_SENSOR_CONFIG:\n> +\t\tg_value_set_boxed(value, self->sensor_config);\n> +\t\tbreak;\n>  \tdefault:\n>  \t\tif (!state->controls_.getProperty(prop_id - PROP_LAST, value, pspec))\n>  \t\t\tG_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);\n> @@ -1040,6 +1087,7 @@ gst_libcamera_src_finalize(GObject *object)\n>  \tg_clear_object(&self->task);\n>  \tg_mutex_clear(&self->state->lock_);\n>  \tg_free(self->camera_name);\n> +\tg_clear_pointer(&self->sensor_config, gst_structure_free);\n>  \tdelete self->state;\n>  \n>  \treturn klass->finalize(object);\n> @@ -1162,6 +1210,19 @@ gst_libcamera_src_class_init(GstLibcameraSrcClass *klass)\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>  \n> +\tspec = g_param_spec_boxed(\"sensor-config\", \"Sensor Config\",\n> +\t\t\t\t  \"Desired sensor configuration as a GstStructure with mandatory \"\n> +\t\t\t\t  \"fields width, height and depth, and optional fields bin-x, bin-y, \"\n> +\t\t\t\t  \"x-odd-inc, x-even-inc, y-odd-inc, y-even-inc \"\n> +\t\t\t\t  \"(e.g. \\\"sensor/config,width=2304,height=1296,depth=10\\\"). \"\n> +\t\t\t\t  \"Leave unset to let the pipeline negotiate the sensor mode automatically.\",\n> +\t\t\t\t  GST_TYPE_STRUCTURE,\n> +\t\t\t\t  (GParamFlags)(GST_PARAM_MUTABLE_READY\n> +\t\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_SENSOR_CONFIG, spec);\n> +\n>  \tGstCameraControls::installProperties(object_class, PROP_LAST);\n>  }","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 31CEEBE086\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 27 Mar 2026 15:44:46 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 7805D62CDD;\n\tFri, 27 Mar 2026 16:44:45 +0100 (CET)","from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 0809362CD4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 27 Mar 2026 16:44:44 +0100 (CET)","from maestria.local.igalia.com ([192.168.10.14]\n\thelo=mail.igalia.com) by fanzine2.igalia.com with esmtps \n\t(Cipher TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256)\n\t(Exim) id 1w69MY-007GlB-PA; Fri, 27 Mar 2026 16:44:42 +0100","from webmail.service.igalia.com ([192.168.21.45])\n\tby mail.igalia.com with esmtp (Exim)\n\tid 1w69MW-00Agku-5v; Fri, 27 Mar 2026 16:44:42 +0100","from localhost ([127.0.0.1] helo=webmail.igalia.com)\n\tby webmail with esmtp (Exim 4.96) (envelope-from <uajain@igalia.com>)\n\tid 1w69MV-00BGFb-2I; Fri, 27 Mar 2026 16:44:40 +0100"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=igalia.com header.i=@igalia.com\n\theader.b=\"is8KMH73\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com;\n\ts=20170329;\n\th=Content-Transfer-Encoding:Content-Type:Message-ID:References:\n\tIn-Reply-To:Subject:Cc:To:From:Date:MIME-Version:Sender:Reply-To:Content-ID:\n\tContent-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc\n\t:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe:\n\tList-Post:List-Owner:List-Archive;\n\tbh=1E2zp1hXOoJu5u2GFeWz843XCX2XpQT8Sknl+6/VaY0=;\n\tb=is8KMH73FDx97im7Pka3zTylzy\n\tCzENiYW4ZohXOV4pXPXH8qOVFbJUhCNKu7O6dMqVZVlxGEaph39pclIalTItQmuCya2prH4RR5q+D\n\tt75sjf2txMfVlS0GlBkrW5g4yzInNkM7ai409mQyXCfz8ov+H57AG10WdgCfTx8lnZDXr6upmjq6P\n\t1mj0b+QrIEjsjmIlt4+HpxjpulB9DJFbikOH1RvfFke2AJ2dU3mtVTARUmZ/maJRA7yFJ7UqlPUu7\n\t3DH1VBZDO7gfTPpb1RTZ43NLXdHBU4RBZsVS9j+Qe7xwsyLTtjRibXoGqctvCJWO9cueAeSDoZaew\n\tP5ZQ6IiQ==;","MIME-Version":"1.0","Date":"Fri, 27 Mar 2026 21:14:39 +0530","From":"Umang Jain <uajain@igalia.com>","To":"David Plowman <david.plowman@raspberrypi.com>","Cc":"libcamera-devel@lists.libcamera.org, Nicolas Dufresne\n\t<nicolas.dufresne@collabora.com>","Subject":"Re: [PATCH v3] gstreamer: Add sensor-config property","In-Reply-To":"<20260325094829.9119-1-david.plowman@raspberrypi.com>","References":"<20260325094829.9119-1-david.plowman@raspberrypi.com>","Message-ID":"<14aca4e09692a1138edc297f3a7d362b@igalia.com>","X-Sender":"uajain@igalia.com","Content-Type":"text/plain; charset=US-ASCII","Content-Transfer-Encoding":"7bit","X-Spam-Report":"NO, Score=-3.8, Tests=ALL_TRUSTED=-3, AWL=-1.582, BAYES_50=0.8,\n\tURIBL_BLOCKED=0.001","X-Spam-Score":"-37","X-Spam-Bar":"---","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":38444,"web_url":"https://patchwork.libcamera.org/comment/38444/","msgid":"<fa33c7cf406ab3b2856615d260081a942ac9cd9f.camel@collabora.com>","date":"2026-03-27T15:59:35","subject":"Re: [PATCH v3] gstreamer: Add sensor-config property","submitter":{"id":31,"url":"https://patchwork.libcamera.org/api/people/31/","name":"Nicolas Dufresne","email":"nicolas.dufresne@collabora.com"},"content":"Le vendredi 27 mars 2026 à 21:14 +0530, Umang Jain a écrit :\n> On 2026-03-25 15:17, David Plowman wrote:\n> > The sensor-config property may optionally be specified to give the\n> > outputSize and bitDepth of the SensorConfiguration that is applied to\n> > the camera configuration. For example, use\n> > \n> > libcamerasrc sensor-config=\"sensor/config,width=2304,height=1296,depth=10\"\n> > \n> > to request the 10-bit 2304x1296 mode of a sensor.\n> > \n> > All three parameters, width, height and bit depth, must be present, or\n> > it will issue a warning and revert to automatic mode selection (as if\n> > there were no sensor-config at all).\n> > \n> > If a mode is requested that doesn't exist then camera configuration\n> > will fail and the pipeline won't start.\n> > \n> > As future-proofing, the SensorConfiguration's binning and increment\n> > parameters may be specified, though libcamera currently ignores them.\n> > \n> > Signed-off-by: David Plowman <david.plowman@raspberrypi.com>\n> > Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>\n> > Closes: https://gitlab.freedesktop.org/camera/libcamera/-/issues/300\n> > ---\n> >  src/gstreamer/gstlibcamerasrc.cpp | 61 +++++++++++++++++++++++++++++++\n> >  1 file changed, 61 insertions(+)\n> > \n> > diff --git a/src/gstreamer/gstlibcamerasrc.cpp b/src/gstreamer/gstlibcamerasrc.cpp\n> > index a7241e9b..482b4761 100644\n> > --- a/src/gstreamer/gstlibcamerasrc.cpp\n> > +++ b/src/gstreamer/gstlibcamerasrc.cpp\n> > @@ -141,6 +141,7 @@ struct _GstLibcameraSrc {\n> >  \tGstTask *task;\n> >  \n> >  \tgchar *camera_name;\n> > +\tGstStructure *sensor_config;\n> >  \n> >  \tstd::atomic<GstEvent *> pending_eos;\n> >  \n> > @@ -152,6 +153,7 @@ struct _GstLibcameraSrc {\n> >  enum {\n> >  \tPROP_0,\n> >  \tPROP_CAMERA_NAME,\n> > +\tPROP_SENSOR_CONFIG,\n> >  \tPROP_LAST\n> >  };\n> >  \n> > @@ -846,6 +848,44 @@ gst_libcamera_src_task_enter(GstTask *task, [[maybe_unused]] GThread *thread,\n> >  \t}\n> >  \tg_assert(state->config_->size() == state->srcpads_.size());\n> >  \n> > +\t/* Apply optional sensor configuration. */\n> > +\tif (self->sensor_config) {\n> > +\t\tgint w = 0, h = 0, depth = 0;\n> > +\t\tif (!gst_structure_get_int(self->sensor_config, \"width\", &w) ||\n> > +\t\t    !gst_structure_get_int(self->sensor_config, \"height\", &h) ||\n> > +\t\t    !gst_structure_get_int(self->sensor_config, \"depth\", &depth) ||\n> > +\t\t    w <= 0 || h <= 0 || depth <= 0) {\n> > +\t\t\tGST_ELEMENT_WARNING(self, RESOURCE, SETTINGS,\n> > +\t\t\t\t\t    (\"sensor-config requires non-zero width, height and depth\"\n> > +\t\t\t\t\t     \" fields, ignoring\"),\n> > +\t\t\t\t\t    (nullptr));\n> > +\t\t} else {\n> > +\t\t\tSensorConfiguration sensorCfg;\n> > +\t\t\tsensorCfg.outputSize = Size(w, h);\n> > +\t\t\tsensorCfg.bitDepth = depth;\n> > +\n> > +\t\t\t/* Optional binning (defaults to 1x1). */\n> > +\t\t\tgint binX, binY;\n> > +\t\t\tif (gst_structure_get_int(self->sensor_config, \"bin-x\", &binX) && binX > 0)\n> > +\t\t\t\tsensorCfg.binning.binX = binX;\n> > +\t\t\tif (gst_structure_get_int(self->sensor_config, \"bin-y\", &binY) && binY > 0)\n> > +\t\t\t\tsensorCfg.binning.binY = binY;\n> > +\n> > +\t\t\t/* Optional skipping (defaults to 1 for all increments). */\n> > +\t\t\tgint xOddInc, xEvenInc, yOddInc, yEvenInc;\n> > +\t\t\tif (gst_structure_get_int(self->sensor_config, \"x-odd-inc\", &xOddInc) && xOddInc > 0)\n> > +\t\t\t\tsensorCfg.skipping.xOddInc = xOddInc;\n> > +\t\t\tif (gst_structure_get_int(self->sensor_config, \"x-even-inc\", &xEvenInc) && xEvenInc > 0)\n> > +\t\t\t\tsensorCfg.skipping.xEvenInc = xEvenInc;\n> > +\t\t\tif (gst_structure_get_int(self->sensor_config, \"y-odd-inc\", &yOddInc) && yOddInc > 0)\n> > +\t\t\t\tsensorCfg.skipping.yOddInc = yOddInc;\n> > +\t\t\tif (gst_structure_get_int(self->sensor_config, \"y-even-inc\", &yEvenInc) && yEvenInc > 0)\n> > +\t\t\t\tsensorCfg.skipping.yEvenInc = yEvenInc;\n> > +\n> > +\t\t\tstate->config_->sensorConfig = sensorCfg;\n> \n> Please also look at https://patchwork.libcamera.org/patch/20080/#29567\n> reasoning as well.\n\nLet's cite it back, so we don't all have to follow a link:\n\nFrom Laurent:\n   Before we push this towards applications, I want the sensor\n   configuration to be fully specified, including binning/skipping and the\n   crop rectangles. Our current API to configure the sensor isn't good\n   enough.\n   \nWhich does not match with the current API anymore, since binning, skipping and\ncrop is in the API. Only thing I missed is that there is that analogCrop is\nmissing in the implementation here, I guess its easy to fix.\n\nIs that all you'd like to see ? The one not being written at the one have have\ndefaults in the documentation (basically the configuration that you typically\nwant to leave disabled). I don't see that as not being fully specified though,\nits just a short cut that disable == not in the GstStructure.\n\nNicolas\n\n> \n> Thanks,\n> Umang\n> \n> \n> > +\t\t}\n> > +\t}\n> > +\n> >  \tif (!gst_libcamera_src_negotiate(self)) {\n> >  \t\tstate->initControls_.clear();\n> >  \t\tGST_ELEMENT_FLOW_ERROR(self, GST_FLOW_NOT_NEGOTIATED);\n> > @@ -934,6 +974,10 @@ gst_libcamera_src_set_property(GObject *object, guint prop_id,\n> >  \t\tg_free(self->camera_name);\n> >  \t\tself->camera_name = g_value_dup_string(value);\n> >  \t\tbreak;\n> > +\tcase PROP_SENSOR_CONFIG:\n> > +\t\tg_clear_pointer(&self->sensor_config, gst_structure_free);\n> > +\t\tself->sensor_config = (GstStructure *)g_value_dup_boxed(value);\n> > +\t\tbreak;\n> >  \tdefault:\n> >  \t\tif (!state->controls_.setProperty(prop_id - PROP_LAST, value, pspec))\n> >  \t\t\tG_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);\n> > @@ -953,6 +997,9 @@ gst_libcamera_src_get_property(GObject *object, guint prop_id, GValue *value,\n> >  \tcase PROP_CAMERA_NAME:\n> >  \t\tg_value_set_string(value, self->camera_name);\n> >  \t\tbreak;\n> > +\tcase PROP_SENSOR_CONFIG:\n> > +\t\tg_value_set_boxed(value, self->sensor_config);\n> > +\t\tbreak;\n> >  \tdefault:\n> >  \t\tif (!state->controls_.getProperty(prop_id - PROP_LAST, value, pspec))\n> >  \t\t\tG_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);\n> > @@ -1040,6 +1087,7 @@ gst_libcamera_src_finalize(GObject *object)\n> >  \tg_clear_object(&self->task);\n> >  \tg_mutex_clear(&self->state->lock_);\n> >  \tg_free(self->camera_name);\n> > +\tg_clear_pointer(&self->sensor_config, gst_structure_free);\n> >  \tdelete self->state;\n> >  \n> >  \treturn klass->finalize(object);\n> > @@ -1162,6 +1210,19 @@ gst_libcamera_src_class_init(GstLibcameraSrcClass *klass)\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> >  \n> > +\tspec = g_param_spec_boxed(\"sensor-config\", \"Sensor Config\",\n> > +\t\t\t\t  \"Desired sensor configuration as a GstStructure with mandatory \"\n> > +\t\t\t\t  \"fields width, height and depth, and optional fields bin-x, bin-y, \"\n> > +\t\t\t\t  \"x-odd-inc, x-even-inc, y-odd-inc, y-even-inc \"\n> > +\t\t\t\t  \"(e.g. \\\"sensor/config,width=2304,height=1296,depth=10\\\"). \"\n> > +\t\t\t\t  \"Leave unset to let the pipeline negotiate the sensor mode automatically.\",\n> > +\t\t\t\t  GST_TYPE_STRUCTURE,\n> > +\t\t\t\t  (GParamFlags)(GST_PARAM_MUTABLE_READY\n> > +\t\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_SENSOR_CONFIG, spec);\n> > +\n> >  \tGstCameraControls::installProperties(object_class, PROP_LAST);\n> >  }","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id E2B30BE086\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 27 Mar 2026 15:59:39 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 146BD62CDF;\n\tFri, 27 Mar 2026 16:59:39 +0100 (CET)","from bali.collaboradmins.com (bali.collaboradmins.com\n\t[148.251.105.195])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 1E1DD62CD4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 27 Mar 2026 16:59:38 +0100 (CET)","from [IPv6:2606:6d00:15:e06b::c41] (unknown\n\t[IPv6:2606:6d00:15:e06b::c41])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\tkey-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits)\n\tserver-digest SHA256) (No client certificate requested)\n\t(Authenticated sender: nicolas)\n\tby bali.collaboradmins.com (Postfix) with ESMTPSA id 0EA1817E4C9D;\n\tFri, 27 Mar 2026 16:59:36 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=collabora.com header.i=@collabora.com\n\theader.b=\"F1Et1BW4\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com;\n\ts=mail; t=1774627177;\n\tbh=eYzfEccbAZyAhJeF5yIIMfyZM/rqVWkYPRSXWjEjkaA=;\n\th=Subject:From:To:Cc:Date:In-Reply-To:References:From;\n\tb=F1Et1BW45KTvSeMLJmSP7er8bK1HYLx+imq54rJHqvfawBGVodA6Ybrk+Q4g9jc6C\n\taW62PpQrpr75+gFGnM5FfLEc6OSEcSuCyw7Y4Ix/yAc5EzPzvLSvvefYkKEWvhIM8o\n\t9oKDrmJRspDIKhu/bu/UN7afNgxmh4QjOwu0Hf+/SKMAIl5aVAl3/DD50OHb/iPQpA\n\tiZb7PBCcyNQnOXc80jnqJluLnDdo1WL4F8oSeu0Wken71+Sr5zZoOE324OGDXjLwFL\n\t1KgvE29GRYU5BALHsCMtQg6Wd3rGLsAtv/ePSjtLuDq+AILAv1lsxCr63siYHWsjYQ\n\tm4DK2y0sh4fdw==","Message-ID":"<fa33c7cf406ab3b2856615d260081a942ac9cd9f.camel@collabora.com>","Subject":"Re: [PATCH v3] gstreamer: Add sensor-config property","From":"Nicolas Dufresne <nicolas.dufresne@collabora.com>","To":"Umang Jain <uajain@igalia.com>, David Plowman\n\t<david.plowman@raspberrypi.com>","Cc":"libcamera-devel@lists.libcamera.org","Date":"Fri, 27 Mar 2026 11:59:35 -0400","In-Reply-To":"<14aca4e09692a1138edc297f3a7d362b@igalia.com>","References":"<20260325094829.9119-1-david.plowman@raspberrypi.com>\n\t<14aca4e09692a1138edc297f3a7d362b@igalia.com>","Autocrypt":"addr=nicolas.dufresne@collabora.com; prefer-encrypt=mutual;\n\tkeydata=mDMEaCN2ixYJKwYBBAHaRw8BAQdAM0EHepTful3JOIzcPv6ekHOenE1u0vDG1gdHFrChD\n\t/e0J05pY29sYXMgRHVmcmVzbmUgPG5pY29sYXNAbmR1ZnJlc25lLmNhPoicBBMWCgBEAhsDBQsJCA\n\tcCAiICBhUKCQgLAgQWAgMBAh4HAheABQkJZfd1FiEE7w1SgRXEw8IaBG8S2UGUUSlgcvQFAmibrjo\n\tCGQEACgkQ2UGUUSlgcvQlQwD/RjpU1SZYcKG6pnfnQ8ivgtTkGDRUJ8gP3fK7+XUjRNIA/iXfhXMN\n\tabIWxO2oCXKf3TdD7aQ4070KO6zSxIcxgNQFtDFOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1Z\n\tnJlc25lQGNvbGxhYm9yYS5jb20+iJkEExYKAEECGwMFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4\n\tAWIQTvDVKBFcTDwhoEbxLZQZRRKWBy9AUCaCyyxgUJCWX3dQAKCRDZQZRRKWBy9ARJAP96pFmLffZ\n\tsmBUpkyVBfFAf+zq6BJt769R0al3kHvUKdgD9G7KAHuioxD2v6SX7idpIazjzx8b8rfzwTWyOQWHC\n\tAAS0LU5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAZ21haWwuY29tPoiZBBMWCgBBF\n\tiEE7w1SgRXEw8IaBG8S2UGUUSlgcvQFAmibrGYCGwMFCQll93UFCwkIBwICIgIGFQoJCAsCBBYCAw\n\tECHgcCF4AACgkQ2UGUUSlgcvRObgD/YnQjfi4+L8f4fI7p1pPMTwRTcaRdy6aqkKEmKsCArzQBAK8\n\tbRLv9QjuqsE6oQZra/RB4widZPvphs78H0P6NmpIJ","Organization":"Collabora Canada","Content-Type":"multipart/signed; micalg=\"pgp-sha512\";\n\tprotocol=\"application/pgp-signature\";\n\tboundary=\"=-YiDxgyJK+vCAz6WVqD5B\"","User-Agent":"Evolution 3.58.3 (3.58.3-1.fc43) ","MIME-Version":"1.0","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":38445,"web_url":"https://patchwork.libcamera.org/comment/38445/","msgid":"<CAHW6GYKDN8jYBnyaLdAcevJy-57aYQTjy9CAqZMOF1om+q3Oiw@mail.gmail.com>","date":"2026-03-27T16:27:23","subject":"Re: [PATCH v3] gstreamer: Add sensor-config property","submitter":{"id":42,"url":"https://patchwork.libcamera.org/api/people/42/","name":"David Plowman","email":"david.plowman@raspberrypi.com"},"content":"HI\n\nThanks for pointing that out, Umang.\n\nObviously it's basically the same thing. In the version I did I\nrequired all of width, height and bit-depth to be present if you use\nthe option, which I think is reasonable seeing as the API forces that\non you anyway. I also left the binning/skipping optional on the\ngrounds that specifying them feels a bit onerous given that they're\nall ignored (and are assigned default values anyway).\n\nAs Nicolas says, we could add the analogCrop. Make that optional for\nthe same reasons?\n\nIn gstreamer-world, would there be a \"right way\" to present that\nanalogCrop parameter in terms of syntax? (Asking for a friend who's\nnot so familiar with gstreamer!)\n\nThanks\nDavid\n\nOn Fri, 27 Mar 2026 at 15:59, Nicolas Dufresne\n<nicolas.dufresne@collabora.com> wrote:\n>\n> Le vendredi 27 mars 2026 à 21:14 +0530, Umang Jain a écrit :\n> > On 2026-03-25 15:17, David Plowman wrote:\n> > > The sensor-config property may optionally be specified to give the\n> > > outputSize and bitDepth of the SensorConfiguration that is applied to\n> > > the camera configuration. For example, use\n> > >\n> > > libcamerasrc sensor-config=\"sensor/config,width=2304,height=1296,depth=10\"\n> > >\n> > > to request the 10-bit 2304x1296 mode of a sensor.\n> > >\n> > > All three parameters, width, height and bit depth, must be present, or\n> > > it will issue a warning and revert to automatic mode selection (as if\n> > > there were no sensor-config at all).\n> > >\n> > > If a mode is requested that doesn't exist then camera configuration\n> > > will fail and the pipeline won't start.\n> > >\n> > > As future-proofing, the SensorConfiguration's binning and increment\n> > > parameters may be specified, though libcamera currently ignores them.\n> > >\n> > > Signed-off-by: David Plowman <david.plowman@raspberrypi.com>\n> > > Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>\n> > > Closes: https://gitlab.freedesktop.org/camera/libcamera/-/issues/300\n> > > ---\n> > >  src/gstreamer/gstlibcamerasrc.cpp | 61 +++++++++++++++++++++++++++++++\n> > >  1 file changed, 61 insertions(+)\n> > >\n> > > diff --git a/src/gstreamer/gstlibcamerasrc.cpp b/src/gstreamer/gstlibcamerasrc.cpp\n> > > index a7241e9b..482b4761 100644\n> > > --- a/src/gstreamer/gstlibcamerasrc.cpp\n> > > +++ b/src/gstreamer/gstlibcamerasrc.cpp\n> > > @@ -141,6 +141,7 @@ struct _GstLibcameraSrc {\n> > >     GstTask *task;\n> > >\n> > >     gchar *camera_name;\n> > > +   GstStructure *sensor_config;\n> > >\n> > >     std::atomic<GstEvent *> pending_eos;\n> > >\n> > > @@ -152,6 +153,7 @@ struct _GstLibcameraSrc {\n> > >  enum {\n> > >     PROP_0,\n> > >     PROP_CAMERA_NAME,\n> > > +   PROP_SENSOR_CONFIG,\n> > >     PROP_LAST\n> > >  };\n> > >\n> > > @@ -846,6 +848,44 @@ gst_libcamera_src_task_enter(GstTask *task, [[maybe_unused]] GThread *thread,\n> > >     }\n> > >     g_assert(state->config_->size() == state->srcpads_.size());\n> > >\n> > > +   /* Apply optional sensor configuration. */\n> > > +   if (self->sensor_config) {\n> > > +           gint w = 0, h = 0, depth = 0;\n> > > +           if (!gst_structure_get_int(self->sensor_config, \"width\", &w) ||\n> > > +               !gst_structure_get_int(self->sensor_config, \"height\", &h) ||\n> > > +               !gst_structure_get_int(self->sensor_config, \"depth\", &depth) ||\n> > > +               w <= 0 || h <= 0 || depth <= 0) {\n> > > +                   GST_ELEMENT_WARNING(self, RESOURCE, SETTINGS,\n> > > +                                       (\"sensor-config requires non-zero width, height and depth\"\n> > > +                                        \" fields, ignoring\"),\n> > > +                                       (nullptr));\n> > > +           } else {\n> > > +                   SensorConfiguration sensorCfg;\n> > > +                   sensorCfg.outputSize = Size(w, h);\n> > > +                   sensorCfg.bitDepth = depth;\n> > > +\n> > > +                   /* Optional binning (defaults to 1x1). */\n> > > +                   gint binX, binY;\n> > > +                   if (gst_structure_get_int(self->sensor_config, \"bin-x\", &binX) && binX > 0)\n> > > +                           sensorCfg.binning.binX = binX;\n> > > +                   if (gst_structure_get_int(self->sensor_config, \"bin-y\", &binY) && binY > 0)\n> > > +                           sensorCfg.binning.binY = binY;\n> > > +\n> > > +                   /* Optional skipping (defaults to 1 for all increments). */\n> > > +                   gint xOddInc, xEvenInc, yOddInc, yEvenInc;\n> > > +                   if (gst_structure_get_int(self->sensor_config, \"x-odd-inc\", &xOddInc) && xOddInc > 0)\n> > > +                           sensorCfg.skipping.xOddInc = xOddInc;\n> > > +                   if (gst_structure_get_int(self->sensor_config, \"x-even-inc\", &xEvenInc) && xEvenInc > 0)\n> > > +                           sensorCfg.skipping.xEvenInc = xEvenInc;\n> > > +                   if (gst_structure_get_int(self->sensor_config, \"y-odd-inc\", &yOddInc) && yOddInc > 0)\n> > > +                           sensorCfg.skipping.yOddInc = yOddInc;\n> > > +                   if (gst_structure_get_int(self->sensor_config, \"y-even-inc\", &yEvenInc) && yEvenInc > 0)\n> > > +                           sensorCfg.skipping.yEvenInc = yEvenInc;\n> > > +\n> > > +                   state->config_->sensorConfig = sensorCfg;\n> >\n> > Please also look at https://patchwork.libcamera.org/patch/20080/#29567\n> > reasoning as well.\n>\n> Let's cite it back, so we don't all have to follow a link:\n>\n> From Laurent:\n>    Before we push this towards applications, I want the sensor\n>    configuration to be fully specified, including binning/skipping and the\n>    crop rectangles. Our current API to configure the sensor isn't good\n>    enough.\n>\n> Which does not match with the current API anymore, since binning, skipping and\n> crop is in the API. Only thing I missed is that there is that analogCrop is\n> missing in the implementation here, I guess its easy to fix.\n>\n> Is that all you'd like to see ? The one not being written at the one have have\n> defaults in the documentation (basically the configuration that you typically\n> want to leave disabled). I don't see that as not being fully specified though,\n> its just a short cut that disable == not in the GstStructure.\n>\n> Nicolas\n>\n> >\n> > Thanks,\n> > Umang\n> >\n> >\n> > > +           }\n> > > +   }\n> > > +\n> > >     if (!gst_libcamera_src_negotiate(self)) {\n> > >             state->initControls_.clear();\n> > >             GST_ELEMENT_FLOW_ERROR(self, GST_FLOW_NOT_NEGOTIATED);\n> > > @@ -934,6 +974,10 @@ gst_libcamera_src_set_property(GObject *object, guint prop_id,\n> > >             g_free(self->camera_name);\n> > >             self->camera_name = g_value_dup_string(value);\n> > >             break;\n> > > +   case PROP_SENSOR_CONFIG:\n> > > +           g_clear_pointer(&self->sensor_config, gst_structure_free);\n> > > +           self->sensor_config = (GstStructure *)g_value_dup_boxed(value);\n> > > +           break;\n> > >     default:\n> > >             if (!state->controls_.setProperty(prop_id - PROP_LAST, value, pspec))\n> > >                     G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);\n> > > @@ -953,6 +997,9 @@ gst_libcamera_src_get_property(GObject *object, guint prop_id, GValue *value,\n> > >     case PROP_CAMERA_NAME:\n> > >             g_value_set_string(value, self->camera_name);\n> > >             break;\n> > > +   case PROP_SENSOR_CONFIG:\n> > > +           g_value_set_boxed(value, self->sensor_config);\n> > > +           break;\n> > >     default:\n> > >             if (!state->controls_.getProperty(prop_id - PROP_LAST, value, pspec))\n> > >                     G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);\n> > > @@ -1040,6 +1087,7 @@ gst_libcamera_src_finalize(GObject *object)\n> > >     g_clear_object(&self->task);\n> > >     g_mutex_clear(&self->state->lock_);\n> > >     g_free(self->camera_name);\n> > > +   g_clear_pointer(&self->sensor_config, gst_structure_free);\n> > >     delete self->state;\n> > >\n> > >     return klass->finalize(object);\n> > > @@ -1162,6 +1210,19 @@ gst_libcamera_src_class_init(GstLibcameraSrcClass *klass)\n> > >                                                          | G_PARAM_STATIC_STRINGS));\n> > >     g_object_class_install_property(object_class, PROP_CAMERA_NAME, spec);\n> > >\n> > > +   spec = g_param_spec_boxed(\"sensor-config\", \"Sensor Config\",\n> > > +                             \"Desired sensor configuration as a GstStructure with mandatory \"\n> > > +                             \"fields width, height and depth, and optional fields bin-x, bin-y, \"\n> > > +                             \"x-odd-inc, x-even-inc, y-odd-inc, y-even-inc \"\n> > > +                             \"(e.g. \\\"sensor/config,width=2304,height=1296,depth=10\\\"). \"\n> > > +                             \"Leave unset to let the pipeline negotiate the sensor mode automatically.\",\n> > > +                             GST_TYPE_STRUCTURE,\n> > > +                             (GParamFlags)(GST_PARAM_MUTABLE_READY\n> > > +                                           | G_PARAM_CONSTRUCT\n> > > +                                           | G_PARAM_READWRITE\n> > > +                                           | G_PARAM_STATIC_STRINGS));\n> > > +   g_object_class_install_property(object_class, PROP_SENSOR_CONFIG, spec);\n> > > +\n> > >     GstCameraControls::installProperties(object_class, PROP_LAST);\n> > >  }","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 56FCDBDCBD\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 27 Mar 2026 16:27:38 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id ADAC662CDC;\n\tFri, 27 Mar 2026 17:27:37 +0100 (CET)","from mail-ej1-x630.google.com (mail-ej1-x630.google.com\n\t[IPv6:2a00:1450:4864:20::630])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 8AC0162CCC\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 27 Mar 2026 17:27:35 +0100 (CET)","by mail-ej1-x630.google.com with SMTP id\n\ta640c23a62f3a-b7cf4a975d2so308099966b.2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 27 Mar 2026 09:27:35 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=raspberrypi.com header.i=@raspberrypi.com\n\theader.b=\"hNTe8A7g\"; dkim-atps=neutral","ARC-Seal":"i=1; a=rsa-sha256; t=1774628855; cv=none;\n\td=google.com; s=arc-20240605;\n\tb=kt7IbV8lqFwZCCEYJe3o0LHXs7mpakS/I0aYvyhRhrK1rFK50rEb4frv7TP/ja93Ns\n\t9EKZCYV4JIgrGIh7ypnmysbBG/JFbAI4VWkdSeCokq9TZoyW1sD/J4rHcyaIQeWBxHhe\n\tOnCGg7hKcvIuNXrG/0oIfbNyRTB1KD2/pTaMYJcfTVfBo0V+WAxqzVVwEsZr3T93QzJD\n\tNbrBqS9o6JvsT0mbGA4ronYkPh+te1bcpXxMSEHDRH5WyUkAMyJVtt1RTBLHycgyRLXX\n\t/Wv1b6+9Mv6n8UGyMo51ObALhzrJhxcTrwUnBl/YRb4aL7oZZ/526Sxd0iax3NYa3Q7I\n\tiASg==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;\n\ts=arc-20240605; \n\th=content-transfer-encoding:cc:to:subject:message-id:date:from\n\t:in-reply-to:references:mime-version:dkim-signature;\n\tbh=WXQRjiPS54HqvAZnq2jtfWbJQekPTV8JgL6HDGRZ4ds=;\n\tfh=Zby9HYrpn5I1dHhGYykamQbjXJiAVlzUwrd6XbCX/aA=;\n\tb=fZ49KYGoIhuHzkP2yGBC6azYddyLM+XhmqFWC1EBoyjYpJCNLnIRrluRXb9mGGnZwt\n\tsBeBhTlF4om3lXbkmwQWzjDjzkHkcYdXSwF801HrqvUV20fwJwMGEqECUWTk9yPLeo4j\n\tjUBPweevnDnQWDX/lZWAXUZjlpTBpmZd0sBp8wQQlGvrrwjG1gppXgmWfE9Y27dX0S8H\n\tvQx9GaMPNa/SnCx6pJpJvDTk2P+3FdPzM88rG+XwUHfatkRdWXT+1PC5IW5oYoq7NqOV\n\tYuaCIDt2Kr3D7QOD/II3dC/2Rxb6q8XFLZpbTwHXubhmLN7z3GtlpKdbJJKA3Wgj73Ib\n\tWTSw==; darn=lists.libcamera.org","ARC-Authentication-Results":"i=1; mx.google.com; arc=none","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google; t=1774628855; x=1775233655;\n\tdarn=lists.libcamera.org; \n\th=content-transfer-encoding:cc:to:subject:message-id:date:from\n\t:in-reply-to:references:mime-version:from:to:cc:subject:date\n\t:message-id:reply-to;\n\tbh=WXQRjiPS54HqvAZnq2jtfWbJQekPTV8JgL6HDGRZ4ds=;\n\tb=hNTe8A7g5unzVW/HqXI0+YhFzBbS1YRUOVBUH5gzRXLf67xhEpGhqqhrz8OeukbTNF\n\tFTXyJESXTVEa9XE8BaGK+42p/BlWuWx7eLAc07IOka5iWjSa2qrhviPtMByeHh4spYcK\n\taFODpKPrbciubG7VOabc4VSjqk1UwsKjQ67X4vcCBpeM2UbAw6dV9i5wVrEd17i38kvY\n\tttJX/gMbk0WqLGrlBrgIQNVaCZOrHT525uyn6YhIZzkRy+mqI4evayv5wvjpSe40wE1C\n\t0SMoLPo68JpqkBemo1mDPB9ebDt6GTVTRu1LO/rqcW4ngmJ2Un6anugNyCwDfFkrOGJ9\n\taqug==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20251104; t=1774628855; x=1775233655;\n\th=content-transfer-encoding:cc:to:subject:message-id:date:from\n\t:in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from\n\t:to:cc:subject:date:message-id:reply-to;\n\tbh=WXQRjiPS54HqvAZnq2jtfWbJQekPTV8JgL6HDGRZ4ds=;\n\tb=LKCUNVnmEf7GYakrMYmG/gCj+z196SLTwAt1bWgYSthXuDbobbF7SyGv9KW1nwIcR+\n\tgDWyw368nnejIUqVZgaWL3sysaBsV0krAeRTSKg0ol5+GYuGbscW46VQF8hujbYGqUT3\n\tFeloQbanB+kNU4Ss5GnVUZRER7RKGL5i3iNAd1juN1MleMlzpiQMIOFGtwyJuooMYQCx\n\t5GH8dpN/kJ/yJwhOz916df6G/EuvJVAYHTNmDKvKT6AkXybCNs4I77T56Ep0WSe6UkuV\n\tFSDiIS+lHQ4YS9s+dkrHyVLNbC1dtO4VUetgA106gHAUBceZIUmuV78p+DE4vJn8jRjK\n\tb3xA==","X-Forwarded-Encrypted":"i=1;\n\tAJvYcCWPGOTpL427H1r0qOXQSlU5pIsjGDujEnGKrDP57XodTT30Nbxt/jZTyQMYBc6fDB693MJhVEsXF5JPmWMw8y8=@lists.libcamera.org","X-Gm-Message-State":"AOJu0Yy1dST+3XJZLMCufbWKwy16EkjVLjMjVHVbI6w6I22r/zASQWKL\n\tiuFXurNJtTph/42fuo6QbSGH8oWmOag04k0ITe0TvUmS+Ja7ffQGsP91cUT/g0IO7ZMcXcgQxOK\n\trlHOEA9iLHVbdtRZs9wrLlttFMMil14+MiCSFS6S8kg==","X-Gm-Gg":"ATEYQzwWafv3VCBw/c9yRH59uHjTw5apU0obrXx+497/gZg1ttOVUZZ8/3y8wIeC+Et\n\tS2DOwLJAFzEr3iSi+26cUktrH+/hrKzBiDRyOUbTOsbdrz6FqfHS/ZDYUxvR7yVJSmyFbDIjlBm\n\tsmyHs6wXjxU/SXmvKqQKB/nCrwoKtPDoR+bTD125y74YogUCmkf1MioTVDPAXtwcpG2M7vh52hf\n\tBTYCj/KN2MYKI/2pxhcfYB7veGLhps1Sz0WW1am7G8Bwsjg8473SIdvrk2Lublxgd8UkFvUUItI\n\tOBtUIYOIdIBLuiXTf/W9lbW0Gb0wVNZ2t9bL2rkHWtDsqcXAyuaieNv+7cXsNR3AvhoqncvjE7S\n\t5hEVBsxXjTB6FI1b9I2xYLPw=","X-Received":"by 2002:a17:907:c78e:b0:b97:feec:5e82 with SMTP id\n\ta640c23a62f3a-b9b50937e03mr231701166b.43.1774628854687;\n\tFri, 27 Mar 2026 09:27:34 -0700 (PDT)","MIME-Version":"1.0","References":"<20260325094829.9119-1-david.plowman@raspberrypi.com>\n\t<14aca4e09692a1138edc297f3a7d362b@igalia.com>\n\t<fa33c7cf406ab3b2856615d260081a942ac9cd9f.camel@collabora.com>","In-Reply-To":"<fa33c7cf406ab3b2856615d260081a942ac9cd9f.camel@collabora.com>","From":"David Plowman <david.plowman@raspberrypi.com>","Date":"Fri, 27 Mar 2026 16:27:23 +0000","X-Gm-Features":"AQROBzDY0BoC8wzvmcSpGkiscJoBtrQ59enO8Tfe6_rR0pHliqQBvYeznJyrgpA","Message-ID":"<CAHW6GYKDN8jYBnyaLdAcevJy-57aYQTjy9CAqZMOF1om+q3Oiw@mail.gmail.com>","Subject":"Re: [PATCH v3] gstreamer: Add sensor-config property","To":"Nicolas Dufresne <nicolas.dufresne@collabora.com>","Cc":"Umang Jain <uajain@igalia.com>, libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"UTF-8\"","Content-Transfer-Encoding":"quoted-printable","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":38446,"web_url":"https://patchwork.libcamera.org/comment/38446/","msgid":"<bef44a7e017c710a9b68ebf9402d19fe5d9e1a80.camel@collabora.com>","date":"2026-03-27T17:12:36","subject":"Re: [PATCH v3] gstreamer: Add sensor-config property","submitter":{"id":31,"url":"https://patchwork.libcamera.org/api/people/31/","name":"Nicolas Dufresne","email":"nicolas.dufresne@collabora.com"},"content":"Hi,\n\nLe vendredi 27 mars 2026 à 16:27 +0000, David Plowman a écrit :\n> In gstreamer-world, would there be a \"right way\" to present that\n> analogCrop parameter in terms of syntax? (Asking for a friend who's\n> not so familiar with gstreamer!)\n\nIf its cropped by the sensor, in an \"analog way\", its not something we care in\nGStreamer. All we can do is add \"analog-crop-x/y/width/height\" (assuming this is\nthe the Rectangle class is) in the GstStructure for the configuration, leave it\nunset by default.\n\nNicolas","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 25402BE086\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 27 Mar 2026 17:12:41 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 6122C62CDD;\n\tFri, 27 Mar 2026 18:12:40 +0100 (CET)","from bali.collaboradmins.com (bali.collaboradmins.com\n\t[148.251.105.195])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 713C362CCC\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 27 Mar 2026 18:12:39 +0100 (CET)","from [IPv6:2606:6d00:15:e06b::c41] (unknown\n\t[IPv6:2606:6d00:15:e06b::c41])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\tkey-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits)\n\tserver-digest SHA256) (No client certificate requested)\n\t(Authenticated sender: nicolas)\n\tby bali.collaboradmins.com (Postfix) with ESMTPSA id 8094D17E5C1A;\n\tFri, 27 Mar 2026 18:12:38 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=collabora.com header.i=@collabora.com\n\theader.b=\"ZHuCLxj4\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com;\n\ts=mail; t=1774631559;\n\tbh=BdkNhEtqN8HjTJBLwSOhg4sIARhjYR2jKc3V+NdqnkQ=;\n\th=Subject:From:To:Cc:Date:In-Reply-To:References:From;\n\tb=ZHuCLxj4oYQ+BRmaw9s9KAcbVjkhZSucHdExPfCYj4IEbgFHvtpNun4AZOan2qg70\n\tXrd23HSLeHjhWKsdF7UEBi9DRyEqEPFCs6A1rxpDvhMfeHdlYRwwlV30V+V4wDxn6Q\n\tiGkbJs0ylJBaqI0ePq0nR3rqyVz1KKvGC2LJV/btZzQN10wcnfK+n5Pw7FCYy86DJA\n\twN5vOEo2YTlA4/5Ai4yJsI/PtdoENAA6/siZYCiTtlF6R5wsZwCtE9qX5a8ASnAGH8\n\tYVJj9tDWXjl8VwNKPNrPjmj3/7OisWah4wM8hoMAUBV+3q4yvIaUE9i7P7nv9jNVS1\n\tIBHpJt2eKJsAQ==","Message-ID":"<bef44a7e017c710a9b68ebf9402d19fe5d9e1a80.camel@collabora.com>","Subject":"Re: [PATCH v3] gstreamer: Add sensor-config property","From":"Nicolas Dufresne <nicolas.dufresne@collabora.com>","To":"David Plowman <david.plowman@raspberrypi.com>","Cc":"Umang Jain <uajain@igalia.com>, libcamera-devel@lists.libcamera.org","Date":"Fri, 27 Mar 2026 13:12:36 -0400","In-Reply-To":"<CAHW6GYKDN8jYBnyaLdAcevJy-57aYQTjy9CAqZMOF1om+q3Oiw@mail.gmail.com>","References":"<20260325094829.9119-1-david.plowman@raspberrypi.com>\n\t<14aca4e09692a1138edc297f3a7d362b@igalia.com>\n\t<fa33c7cf406ab3b2856615d260081a942ac9cd9f.camel@collabora.com>\n\t<CAHW6GYKDN8jYBnyaLdAcevJy-57aYQTjy9CAqZMOF1om+q3Oiw@mail.gmail.com>","Autocrypt":"addr=nicolas.dufresne@collabora.com; prefer-encrypt=mutual;\n\tkeydata=mDMEaCN2ixYJKwYBBAHaRw8BAQdAM0EHepTful3JOIzcPv6ekHOenE1u0vDG1gdHFrChD\n\t/e0J05pY29sYXMgRHVmcmVzbmUgPG5pY29sYXNAbmR1ZnJlc25lLmNhPoicBBMWCgBEAhsDBQsJCA\n\tcCAiICBhUKCQgLAgQWAgMBAh4HAheABQkJZfd1FiEE7w1SgRXEw8IaBG8S2UGUUSlgcvQFAmibrjo\n\tCGQEACgkQ2UGUUSlgcvQlQwD/RjpU1SZYcKG6pnfnQ8ivgtTkGDRUJ8gP3fK7+XUjRNIA/iXfhXMN\n\tabIWxO2oCXKf3TdD7aQ4070KO6zSxIcxgNQFtDFOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1Z\n\tnJlc25lQGNvbGxhYm9yYS5jb20+iJkEExYKAEECGwMFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4\n\tAWIQTvDVKBFcTDwhoEbxLZQZRRKWBy9AUCaCyyxgUJCWX3dQAKCRDZQZRRKWBy9ARJAP96pFmLffZ\n\tsmBUpkyVBfFAf+zq6BJt769R0al3kHvUKdgD9G7KAHuioxD2v6SX7idpIazjzx8b8rfzwTWyOQWHC\n\tAAS0LU5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAZ21haWwuY29tPoiZBBMWCgBBF\n\tiEE7w1SgRXEw8IaBG8S2UGUUSlgcvQFAmibrGYCGwMFCQll93UFCwkIBwICIgIGFQoJCAsCBBYCAw\n\tECHgcCF4AACgkQ2UGUUSlgcvRObgD/YnQjfi4+L8f4fI7p1pPMTwRTcaRdy6aqkKEmKsCArzQBAK8\n\tbRLv9QjuqsE6oQZra/RB4widZPvphs78H0P6NmpIJ","Organization":"Collabora Canada","Content-Type":"multipart/signed; micalg=\"pgp-sha512\";\n\tprotocol=\"application/pgp-signature\";\n\tboundary=\"=-dyAFfMos8sZE/RG8rYjk\"","User-Agent":"Evolution 3.58.3 (3.58.3-1.fc43) ","MIME-Version":"1.0","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":38449,"web_url":"https://patchwork.libcamera.org/comment/38449/","msgid":"<CAHW6GYJtv=jd2011GnyfL1Vq6zJab==q+TakDZwRhnELX6Pv4A@mail.gmail.com>","date":"2026-03-30T08:30:07","subject":"Re: [PATCH v3] gstreamer: Add sensor-config property","submitter":{"id":42,"url":"https://patchwork.libcamera.org/api/people/42/","name":"David Plowman","email":"david.plowman@raspberrypi.com"},"content":"Thanks. I'll post a (final??) version that allows an optional analog\ncrop rectangle.\n\nDavid\n\nOn Fri, 27 Mar 2026 at 17:12, Nicolas Dufresne\n<nicolas.dufresne@collabora.com> wrote:\n>\n> Hi,\n>\n> Le vendredi 27 mars 2026 à 16:27 +0000, David Plowman a écrit :\n> > In gstreamer-world, would there be a \"right way\" to present that\n> > analogCrop parameter in terms of syntax? (Asking for a friend who's\n> > not so familiar with gstreamer!)\n>\n> If its cropped by the sensor, in an \"analog way\", its not something we care in\n> GStreamer. All we can do is add \"analog-crop-x/y/width/height\" (assuming this is\n> the the Rectangle class is) in the GstStructure for the configuration, leave it\n> unset by default.\n>\n> Nicolas","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 9F236BDCBD\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 30 Mar 2026 08:30:22 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 8967262CF3;\n\tMon, 30 Mar 2026 10:30:21 +0200 (CEST)","from mail-ed1-x530.google.com (mail-ed1-x530.google.com\n\t[IPv6:2a00:1450:4864:20::530])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id AEC3862CC7\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 30 Mar 2026 10:30:20 +0200 (CEST)","by mail-ed1-x530.google.com with SMTP id\n\t4fb4d7f45d1cf-66bf6aa4858so641453a12.2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 30 Mar 2026 01:30:20 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=raspberrypi.com header.i=@raspberrypi.com\n\theader.b=\"ZCzQSOvS\"; dkim-atps=neutral","ARC-Seal":"i=1; a=rsa-sha256; t=1774859420; cv=none;\n\td=google.com; s=arc-20240605;\n\tb=OoodmJ/Hz1GBXVDqYAcfLQCH/Z39nTrpIsnRGH5er75HoiT3yI8sWxweWPE8gwKug2\n\tn1c5zEUzJjZGEYYK9tB2grQdzzyVsh3v0NXRGi2uAVHBFDdODz2Rl3ExI/N4YLpPBwH/\n\tFfBAW+ZGqhCJ+8e5lHB6dLBURpXuv8rvxatRxjW9nVXA/eJ75dUd2MBrrm2oRS8I95dZ\n\tpBhUxDPI15ak3eG4gd+AAAkb2HWey7v+KpeYjZV2z7VgNQQtoYpUcZuounWP4pOCYNQ9\n\tFcgeN97yYx4h2rp6atfQuwl+3CJFk7HdXFErVuU0OM4Ga81JIgbMiVoZgmst9N4OBWzm\n\txKMA==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;\n\ts=arc-20240605; \n\th=content-transfer-encoding:cc:to:subject:message-id:date:from\n\t:in-reply-to:references:mime-version:dkim-signature;\n\tbh=o+Vgf3o0ksyD7Dqz+awmMy3RKgjoo/DEFSqYbwPGUEE=;\n\tfh=OHVTPevrjQ0ySmecUvU7V6NMpqyIU+03C1g3rCSZykU=;\n\tb=Istye3h2jrC1GdiiBjy9dCoyajlq27DuVl8sZ5Gz67iIyFoIHqAuyB9gscngzB8lGs\n\t8WJEvOe55pBY5RNictvKp6LHkojFFdQ3HaB9nBOnV7zJnBGL0C09avdfiVqHPb4TkPTM\n\tnMOb6AthjXNBOBf0k5SiDnDwzVOos2HhTKA+s3ubWqnbiIAEEFhs9MaEu06xSQbPLeLx\n\t7DZq/vn2oe0PX8MlZeECu775PkzVaBUnAJAf0RL0rC6xj2cRE6zsYXjDnsDLcWrnOC/T\n\tCZHUzKEbCZBOSfXCposQ+cq/M01wvRt+4msfmJALGJ8GjPhTF7p6RKCXdENcp6cC2mKN\n\tVSfg==; darn=lists.libcamera.org","ARC-Authentication-Results":"i=1; mx.google.com; arc=none","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google; t=1774859420; x=1775464220;\n\tdarn=lists.libcamera.org; \n\th=content-transfer-encoding:cc:to:subject:message-id:date:from\n\t:in-reply-to:references:mime-version:from:to:cc:subject:date\n\t:message-id:reply-to;\n\tbh=o+Vgf3o0ksyD7Dqz+awmMy3RKgjoo/DEFSqYbwPGUEE=;\n\tb=ZCzQSOvSzvd/kPZguF/fM7HDhxznxdVqfZP4+cxIQlaEB24o6ZksjJFuvHnUf4l/69\n\trDiYmBQhxCRxMQ/VBAULZB0n3D4sI+cdWNMsWIB/kEvQmpaAU4bC9W8czFLHQcGchOTt\n\tHNXDHS5FySsj1ehhxulh6Bv9NbqlGp37kC6632G2W9Ji1Hxn0ATSuQxjwRK4la0SMXAw\n\tFHxu7L/iIN22cOQFTogJs4JEqhY+h/kcg9J+E5HyPRRurrIdn6ctAXPCz5QDvavVNlc+\n\tNZr26qNo2D+FGYJ0a0tZa7NMci9mwfiwyW6drn47O+I1NpeuLK5fEsY8bMQ8TWwzAJE/\n\t0aPQ==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20251104; t=1774859420; x=1775464220;\n\th=content-transfer-encoding:cc:to:subject:message-id:date:from\n\t:in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from\n\t:to:cc:subject:date:message-id:reply-to;\n\tbh=o+Vgf3o0ksyD7Dqz+awmMy3RKgjoo/DEFSqYbwPGUEE=;\n\tb=CQtAaS3JVzvMaYwT3FsPjMWDWK1miMm68KZ4SiGM7W5D6Ug6t4Fh+vukO4haicFvO4\n\teQzu5p+PPIMH3D4CDAXQwClP21DjVn93O3F18ptEensaXJmltzht9s2M5iiUIa1yEfA1\n\tDV56Fq4QR9uTgmUF3HZeipMqcmEEhJArvbHHglU2fL+S+/QSHDXL55lfNuwEcxcBE/6m\n\tuiipcAeWmmrYhB8HDt/01XTFEK215SjubittDxZGWaYJB/X9JYMIB0cV4iwenHTcUXlE\n\t1YtEEHnlf3vEkjIP2m35L7F4K9YsZ4KP1kI5rvtvXuTYF1JK/O//IIQqzWZTrYhNYIPj\n\t+hlg==","X-Forwarded-Encrypted":"i=1;\n\tAJvYcCWYrI89ma9AcDVOo0TkOn5EmZ/Oq++CPkLWwEs6kRC/syYSRlb3Fd//1yesh9yjm2k/krqx1a14bBtc36VQvU0=@lists.libcamera.org","X-Gm-Message-State":"AOJu0YyIGqGdbpTYEr+pX4rU+Mrw9WGcVwPmRQ8T9OTvC7Boo2Z5NF7G\n\tLZ7m3NgIMa/RHtN48h7meoQSo0Wmo+1RcmiCU41WSs88e9stZH5OQhshYYyy+kI1QY45gNaULfN\n\t3iHt8cxF243cj9gOU+q4HKI+LmK/2GUY5+c9OaSVTAg==","X-Gm-Gg":"ATEYQzwwG86OrV0yhKS16sQgzgITER4cZCDkhF3I4OXUdzfnzG5c9IMNWSlAuru8o7o\n\thsdlLFXN4sxF4o/dnr+/xmAw459QfkKZ/j/aLa8lzcpRdspLeAeJ/uNf5GqcdWaKinD8z9eJGOs\n\tHQaIp12yBzhXifU8NeByKpMUidwnbHDwamOqLRnd6Cx65XTyXl5ts1GIwS9Ssw+uW5zr93uQM24\n\thPX1QnKYFKd/NYiJGTd6pTczlbrGJrw1doq2W+fgQQ3O2ApnnK5MfvAMZDvGhB21vbLxXKUssk7\n\tszGnYQ2g6UK7sf2LinZQozudueuv2/ZhqgemN8afryZkxlL4Md73jL217ZKXuLGjzeEQx0OL9/J\n\tP1HZbboTb42lvNiwFb92gYIuB","X-Received":"by 2002:a17:907:a0e:b0:b98:4799:e6de with SMTP id\n\ta640c23a62f3a-b9b50980cafmr750718266b.48.1774859419992;\n\tMon, 30 Mar 2026 01:30:19 -0700 (PDT)","MIME-Version":"1.0","References":"<20260325094829.9119-1-david.plowman@raspberrypi.com>\n\t<14aca4e09692a1138edc297f3a7d362b@igalia.com>\n\t<fa33c7cf406ab3b2856615d260081a942ac9cd9f.camel@collabora.com>\n\t<CAHW6GYKDN8jYBnyaLdAcevJy-57aYQTjy9CAqZMOF1om+q3Oiw@mail.gmail.com>\n\t<bef44a7e017c710a9b68ebf9402d19fe5d9e1a80.camel@collabora.com>","In-Reply-To":"<bef44a7e017c710a9b68ebf9402d19fe5d9e1a80.camel@collabora.com>","From":"David Plowman <david.plowman@raspberrypi.com>","Date":"Mon, 30 Mar 2026 09:30:07 +0100","X-Gm-Features":"AQROBzBZPzdUBh9_3pFMlxmt4_c54Kv1aWZAZSUMLaUn20Nir6Z2evh0AdoG6Lo","Message-ID":"<CAHW6GYJtv=jd2011GnyfL1Vq6zJab==q+TakDZwRhnELX6Pv4A@mail.gmail.com>","Subject":"Re: [PATCH v3] gstreamer: Add sensor-config property","To":"Nicolas Dufresne <nicolas.dufresne@collabora.com>","Cc":"Umang Jain <uajain@igalia.com>, libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"UTF-8\"","Content-Transfer-Encoding":"quoted-printable","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]