[{"id":26542,"web_url":"https://patchwork.libcamera.org/comment/26542/","msgid":"<ZAGxJ8xPynKEgtO6@pyrite.rasen.tech>","date":"2023-03-03T08:34:47","subject":"Re: [libcamera-devel] [PATCH v2 2/4] libcamera: rkisp1: Assign\n\tsizes to roles","submitter":{"id":17,"url":"https://patchwork.libcamera.org/api/people/17/","name":"Paul Elder","email":"paul.elder@ideasonboard.com"},"content":"On Wed, Feb 22, 2023 at 04:19:15PM +0100, Jacopo Mondi via libcamera-devel wrote:\n> Currently each RkISP1 path (main and self) generate a configuration\n> by bounding the sensor's resolution to their respective maximum output\n> aspect ratio and size.\n> \n> \tSize maxResolution = maxResolution_.boundedToAspectRatio(resolution)\n> \t\t\t\t\t   .boundedTo(resolution);\n> \n> In the case of self path, whose maximum size is 1920x1920, the generated\n> configuration could get assigned unusual sizes, as the result of the\n> above operation\n> \n> As an example, with the imx258 sensor whose resolution is 4208x3118, the\n> resulting size for the Viewfinder use case is an unusual 1920x1423.\n> \n> Fix this by assigning to each role a desired output size:\n> - Use the sensor's resolution for StillCapture and Raw\n> - Use 1080p for Viewfinder and VideoRecording\n> \n> Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n\nReviewed-by: Paul Elder <paul.elder@ideasonboard.com>\n\n> ---\n>  src/libcamera/pipeline/rkisp1/rkisp1.cpp      | 12 +++++++++++-\n>  src/libcamera/pipeline/rkisp1/rkisp1_path.cpp | 10 ++++++++--\n>  src/libcamera/pipeline/rkisp1/rkisp1_path.h   |  1 +\n>  3 files changed, 20 insertions(+), 3 deletions(-)\n> \n> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> index 569fb8ecb629..05a7ba03b2d2 100644\n> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> @@ -162,6 +162,8 @@ public:\n>  \tbool match(DeviceEnumerator *enumerator) override;\n>  \n>  private:\n> +\tstatic constexpr Size kRkISP1PreviewSize = { 1920, 1080 };\n> +\n>  \tRkISP1CameraData *cameraData(Camera *camera)\n>  \t{\n>  \t\treturn static_cast<RkISP1CameraData *>(camera->_d());\n> @@ -634,12 +636,15 @@ PipelineHandlerRkISP1::generateConfiguration(Camera *camera,\n>  \n>  \tfor (const StreamRole role : roles) {\n>  \t\tbool useMainPath = mainPathAvailable;\n> +\t\tSize size;\n>  \n>  \t\tswitch (role) {\n>  \t\tcase StreamRole::StillCapture:\n>  \t\t\t/* JPEG encoders typically expect sYCC. */\n>  \t\t\tif (!colorSpace)\n>  \t\t\t\tcolorSpace = ColorSpace::Sycc;\n> +\n> +\t\t\tsize = data->sensor_->resolution();\n>  \t\t\tbreak;\n>  \n>  \t\tcase StreamRole::Viewfinder:\n> @@ -649,12 +654,16 @@ PipelineHandlerRkISP1::generateConfiguration(Camera *camera,\n>  \t\t\t */\n>  \t\t\tif (!colorSpace)\n>  \t\t\t\tcolorSpace = ColorSpace::Sycc;\n> +\n> +\t\t\tsize = kRkISP1PreviewSize;\n>  \t\t\tbreak;\n>  \n>  \t\tcase StreamRole::VideoRecording:\n>  \t\t\t/* Rec. 709 is a good default for HD video recording. */\n>  \t\t\tif (!colorSpace)\n>  \t\t\t\tcolorSpace = ColorSpace::Rec709;\n> +\n> +\t\t\tsize = kRkISP1PreviewSize;\n>  \t\t\tbreak;\n>  \n>  \t\tcase StreamRole::Raw:\n> @@ -665,6 +674,7 @@ PipelineHandlerRkISP1::generateConfiguration(Camera *camera,\n>  \t\t\t}\n>  \n>  \t\t\tcolorSpace = ColorSpace::Raw;\n> +\t\t\tsize = data->sensor_->resolution();\n>  \t\t\tbreak;\n>  \n>  \t\tdefault:\n> @@ -683,7 +693,7 @@ PipelineHandlerRkISP1::generateConfiguration(Camera *camera,\n>  \t\t}\n>  \n>  \t\tStreamConfiguration cfg =\n> -\t\t\tpath->generateConfiguration(data->sensor_.get(), role);\n> +\t\t\tpath->generateConfiguration(data->sensor_.get(), size, role);\n>  \t\tif (!cfg.pixelFormat.isValid())\n>  \t\t\treturn nullptr;\n>  \n> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp\n> index 5079b268c464..a27ac6fc35cb 100644\n> --- a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp\n> +++ b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp\n> @@ -127,15 +127,21 @@ void RkISP1Path::populateFormats()\n>  }\n>  \n>  StreamConfiguration\n> -RkISP1Path::generateConfiguration(const CameraSensor *sensor, StreamRole role)\n> +RkISP1Path::generateConfiguration(const CameraSensor *sensor,\n> +\t\t\t\t  const Size &size,\n> +\t\t\t\t  StreamRole role)\n>  {\n>  \tconst std::vector<unsigned int> &mbusCodes = sensor->mbusCodes();\n>  \tconst Size &resolution = sensor->resolution();\n>  \n> +\t/* Min and max resolutions to populate the available stream formats. */\n>  \tSize maxResolution = maxResolution_.boundedToAspectRatio(resolution)\n>  \t\t\t\t\t   .boundedTo(resolution);\n>  \tSize minResolution = minResolution_.expandedToAspectRatio(resolution);\n>  \n> +\t/* The desired stream size, bound to the max resolution. */\n> +\tSize streamSize = size.boundedTo(maxResolution);\n> +\n>  \t/* Create the list of supported stream formats. */\n>  \tstd::map<PixelFormat, std::vector<SizeRange>> streamFormats;\n>  \tunsigned int rawBitsPerPixel = 0;\n> @@ -189,7 +195,7 @@ RkISP1Path::generateConfiguration(const CameraSensor *sensor, StreamRole role)\n>  \tStreamFormats formats(streamFormats);\n>  \tStreamConfiguration cfg(formats);\n>  \tcfg.pixelFormat = format;\n> -\tcfg.size = maxResolution;\n> +\tcfg.size = streamSize;\n>  \tcfg.bufferCount = RKISP1_BUFFER_COUNT;\n>  \n>  \treturn cfg;\n> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1_path.h b/src/libcamera/pipeline/rkisp1/rkisp1_path.h\n> index bdf3f95b95e1..cd77957ee4a6 100644\n> --- a/src/libcamera/pipeline/rkisp1/rkisp1_path.h\n> +++ b/src/libcamera/pipeline/rkisp1/rkisp1_path.h\n> @@ -41,6 +41,7 @@ public:\n>  \tbool isEnabled() const { return link_->flags() & MEDIA_LNK_FL_ENABLED; }\n>  \n>  \tStreamConfiguration generateConfiguration(const CameraSensor *sensor,\n> +\t\t\t\t\t\t  const Size &resolution,\n>  \t\t\t\t\t\t  StreamRole role);\n>  \tCameraConfiguration::Status validate(const CameraSensor *sensor,\n>  \t\t\t\t\t     StreamConfiguration *cfg);\n> -- \n> 2.39.0\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 356B8BF415\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri,  3 Mar 2023 08:34:57 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 9E857626E4;\n\tFri,  3 Mar 2023 09:34:56 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id C078162662\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  3 Mar 2023 09:34:55 +0100 (CET)","from pyrite.rasen.tech (h175-177-042-159.catv02.itscom.jp\n\t[175.177.42.159])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id E92AB739;\n\tFri,  3 Mar 2023 09:34:53 +0100 (CET)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1677832496;\n\tbh=j0LyxTAilOXnHXRp+8ZLEYNq+ge1MsEi9y5y3Gh9N90=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=d1mInIZeHEJWZaFwVR2C5kRsjoWYHHQ1hZ8a+WiX/eofHEpq0ie/ED6Xai1LcJe6a\n\tpZ5JkyPZg4pjwTFjuuUVS6miaw0GxGDZNnHJvD17tXM71Xbf2w5TaF4e7DvfUNQ3Qf\n\tB1JKjAPBvClXXG7/hP77JX3rAp6iWcqhPStTRBoT/ei2m8eKOo5tb8hObPGh57nkiK\n\t8xgHXgi5nFOpo+aYdUnisWHWvZ+mGYneI+GcPrtSIPXbDPMzX5/dg+annYQs6MYvkf\n\tI2CSutbwlZ72mnQCTVBkVICk1IBYto7zbRCoAxCmjzh2uFyqkG4KC1cEHvky2zjH5o\n\t6hSF0dQp/C3VQ==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1677832495;\n\tbh=j0LyxTAilOXnHXRp+8ZLEYNq+ge1MsEi9y5y3Gh9N90=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=FtiGY8AatqordRm2YBvDcu09Uf09yh+TdRud5J2RY9JUnUMM4RXY9GLhmFYkbZwDs\n\tYsEQAZhVouhfHHv76/zXPblmRn6+DTb6zRp2cUlnTKblX/sxOThdNywMx9mUNorMVx\n\tM8P2VGY5GPWMeXmhcAFVj00svRe3Dp6P2QU0ptZA="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"FtiGY8Aa\"; dkim-atps=neutral","Date":"Fri, 3 Mar 2023 17:34:47 +0900","To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","Message-ID":"<ZAGxJ8xPynKEgtO6@pyrite.rasen.tech>","References":"<20230222151917.669526-1-jacopo.mondi@ideasonboard.com>\n\t<20230222151917.669526-3-jacopo.mondi@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<20230222151917.669526-3-jacopo.mondi@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v2 2/4] libcamera: rkisp1: Assign\n\tsizes to roles","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>","From":"Paul Elder via libcamera-devel <libcamera-devel@lists.libcamera.org>","Reply-To":"Paul Elder <paul.elder@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org, libcamera@luigi311.com","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":26572,"web_url":"https://patchwork.libcamera.org/comment/26572/","msgid":"<167817919644.3105479.8894665749921840427@Monstersaurus>","date":"2023-03-07T08:53:16","subject":"Re: [libcamera-devel] [PATCH v2 2/4] libcamera: rkisp1: Assign\n\tsizes to roles","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Jacopo,\n\nQuoting Jacopo Mondi via libcamera-devel (2023-02-22 15:19:15)\n> Currently each RkISP1 path (main and self) generate a configuration\n> by bounding the sensor's resolution to their respective maximum output\n> aspect ratio and size.\n> \n>         Size maxResolution = maxResolution_.boundedToAspectRatio(resolution)\n>                                            .boundedTo(resolution);\n> \n> In the case of self path, whose maximum size is 1920x1920, the generated\n> configuration could get assigned unusual sizes, as the result of the\n> above operation\n> \n> As an example, with the imx258 sensor whose resolution is 4208x3118, the\n> resulting size for the Viewfinder use case is an unusual 1920x1423.\n> \n> Fix this by assigning to each role a desired output size:\n> - Use the sensor's resolution for StillCapture and Raw\n> - Use 1080p for Viewfinder and VideoRecording\n> \n> Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n> ---\n>  src/libcamera/pipeline/rkisp1/rkisp1.cpp      | 12 +++++++++++-\n>  src/libcamera/pipeline/rkisp1/rkisp1_path.cpp | 10 ++++++++--\n>  src/libcamera/pipeline/rkisp1/rkisp1_path.h   |  1 +\n>  3 files changed, 20 insertions(+), 3 deletions(-)\n> \n> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> index 569fb8ecb629..05a7ba03b2d2 100644\n> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> @@ -162,6 +162,8 @@ public:\n>         bool match(DeviceEnumerator *enumerator) override;\n>  \n>  private:\n> +       static constexpr Size kRkISP1PreviewSize = { 1920, 1080 };\n> +\n>         RkISP1CameraData *cameraData(Camera *camera)\n>         {\n>                 return static_cast<RkISP1CameraData *>(camera->_d());\n> @@ -634,12 +636,15 @@ PipelineHandlerRkISP1::generateConfiguration(Camera *camera,\n>  \n>         for (const StreamRole role : roles) {\n>                 bool useMainPath = mainPathAvailable;\n> +               Size size;\n>  \n>                 switch (role) {\n>                 case StreamRole::StillCapture:\n>                         /* JPEG encoders typically expect sYCC. */\n>                         if (!colorSpace)\n>                                 colorSpace = ColorSpace::Sycc;\n> +\n> +                       size = data->sensor_->resolution();\n\nI expect applications often want to 'choose' what size still they\nhandle, but this is certainly a reasonable default for stills.\n\n>                         break;\n>  \n>                 case StreamRole::Viewfinder:\n> @@ -649,12 +654,16 @@ PipelineHandlerRkISP1::generateConfiguration(Camera *camera,\n>                          */\n>                         if (!colorSpace)\n>                                 colorSpace = ColorSpace::Sycc;\n> +\n> +                       size = kRkISP1PreviewSize;\n>                         break;\n>  \n>                 case StreamRole::VideoRecording:\n>                         /* Rec. 709 is a good default for HD video recording. */\n>                         if (!colorSpace)\n>                                 colorSpace = ColorSpace::Rec709;\n> +\n> +                       size = kRkISP1PreviewSize;\n>                         break;\n>  \n>                 case StreamRole::Raw:\n> @@ -665,6 +674,7 @@ PipelineHandlerRkISP1::generateConfiguration(Camera *camera,\n>                         }\n>  \n>                         colorSpace = ColorSpace::Raw;\n> +                       size = data->sensor_->resolution();\n\nAnd certainly correct expected for RAW.\n\n\n>                         break;\n>  \n>                 default:\n> @@ -683,7 +693,7 @@ PipelineHandlerRkISP1::generateConfiguration(Camera *camera,\n>                 }\n>  \n\nIt's a little bit non-obvious that the sizes above can now be further\nrefined by this next call. Not problematic, but it looks like the size\nhas been 'chosen' already above - but that's just the starting\npoint/default.\n\n>                 StreamConfiguration cfg =\n> -                       path->generateConfiguration(data->sensor_.get(), role);\n> +                       path->generateConfiguration(data->sensor_.get(), size, role);\n>                 if (!cfg.pixelFormat.isValid())\n>                         return nullptr;\n>  \n> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp\n> index 5079b268c464..a27ac6fc35cb 100644\n> --- a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp\n> +++ b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp\n> @@ -127,15 +127,21 @@ void RkISP1Path::populateFormats()\n>  }\n>  \n>  StreamConfiguration\n> -RkISP1Path::generateConfiguration(const CameraSensor *sensor, StreamRole role)\n> +RkISP1Path::generateConfiguration(const CameraSensor *sensor,\n> +                                 const Size &size,\n> +                                 StreamRole role)\n>  {\n>         const std::vector<unsigned int> &mbusCodes = sensor->mbusCodes();\n>         const Size &resolution = sensor->resolution();\n>  \n> +       /* Min and max resolutions to populate the available stream formats. */\n>         Size maxResolution = maxResolution_.boundedToAspectRatio(resolution)\n>                                            .boundedTo(resolution);\n>         Size minResolution = minResolution_.expandedToAspectRatio(resolution);\n>  \n> +       /* The desired stream size, bound to the max resolution. */\n> +       Size streamSize = size.boundedTo(maxResolution);\n> +\n\nThough it's only about the common bounding sizes so I think it all looks\npretty reasonable.\n\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n>         /* Create the list of supported stream formats. */\n>         std::map<PixelFormat, std::vector<SizeRange>> streamFormats;\n>         unsigned int rawBitsPerPixel = 0;\n> @@ -189,7 +195,7 @@ RkISP1Path::generateConfiguration(const CameraSensor *sensor, StreamRole role)\n>         StreamFormats formats(streamFormats);\n>         StreamConfiguration cfg(formats);\n>         cfg.pixelFormat = format;\n> -       cfg.size = maxResolution;\n> +       cfg.size = streamSize;\n>         cfg.bufferCount = RKISP1_BUFFER_COUNT;\n>  \n>         return cfg;\n> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1_path.h b/src/libcamera/pipeline/rkisp1/rkisp1_path.h\n> index bdf3f95b95e1..cd77957ee4a6 100644\n> --- a/src/libcamera/pipeline/rkisp1/rkisp1_path.h\n> +++ b/src/libcamera/pipeline/rkisp1/rkisp1_path.h\n> @@ -41,6 +41,7 @@ public:\n>         bool isEnabled() const { return link_->flags() & MEDIA_LNK_FL_ENABLED; }\n>  \n>         StreamConfiguration generateConfiguration(const CameraSensor *sensor,\n> +                                                 const Size &resolution,\n>                                                   StreamRole role);\n>         CameraConfiguration::Status validate(const CameraSensor *sensor,\n>                                              StreamConfiguration *cfg);\n> -- \n> 2.39.0\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 E1726BE080\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  7 Mar 2023 08:53:21 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 58F27626B0;\n\tTue,  7 Mar 2023 09:53:21 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 4589D61EDA\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  7 Mar 2023 09:53:19 +0100 (CET)","from pendragon.ideasonboard.com\n\t(aztw-30-b2-v4wan-166917-cust845.vm26.cable.virginm.net\n\t[82.37.23.78])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id DD2886D5;\n\tTue,  7 Mar 2023 09:53:18 +0100 (CET)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1678179201;\n\tbh=6NXN4IwT+C02cKUSrzZuh/TjIc8vo5iQ7JoJqCkNNFg=;\n\th=In-Reply-To:References:To:Date:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=EiAtQYSufx8Ro8dzkPwFYHFvizbVI2sR58l7eJAt0fOoMUZIrDBh9RL0inHa9IUmF\n\t/+3uqw9CPAYxheAsksfXRT+/j9EGrBqXplP00d7tOuwyfreo7T0hMpPiWqN91RKz9P\n\tUPljJz/MoP5iBeYCFd6cWXgN/tYi+vEBBUPeGcLPxXgLfi5gmTHoUcvV8LO/a9s1nI\n\tG4HU1lC/3PBlXdOI6rh/PmZfH5kNbui8pOWp05d3CEbvqH7nlVZX344DkKVEcgykDc\n\ttO7+tClXtPHYdMiynuSLFz7/C6BO71n9q6fOKKYn2lGHVLhE4wHhq2bNLWNgxRdSVx\n\tR6P9hpoLW8vOQ==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1678179199;\n\tbh=6NXN4IwT+C02cKUSrzZuh/TjIc8vo5iQ7JoJqCkNNFg=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=jKNyQSREfwLuIuRwIYLKil8OeQb4JUwff9eowkFRAhrxB7Tob7kjTHoBX6V/SSN9e\n\tMJDasBgmkMnf8q19eRe8BGT0axT1sddHc++g/UinjIwLU8mzPPIdKHLzZBC3uysG+9\n\tw1bT9IrL9wG6ZJo48uQ3PkmOJsvL/FcHHPJKs08E="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"jKNyQSRE\"; dkim-atps=neutral","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20230222151917.669526-3-jacopo.mondi@ideasonboard.com>","References":"<20230222151917.669526-1-jacopo.mondi@ideasonboard.com>\n\t<20230222151917.669526-3-jacopo.mondi@ideasonboard.com>","To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Tue, 07 Mar 2023 08:53:16 +0000","Message-ID":"<167817919644.3105479.8894665749921840427@Monstersaurus>","User-Agent":"alot/0.10","Subject":"Re: [libcamera-devel] [PATCH v2 2/4] libcamera: rkisp1: Assign\n\tsizes to roles","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>","From":"Kieran Bingham via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>, libcamera@luigi311.com","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]