[{"id":21461,"web_url":"https://patchwork.libcamera.org/comment/21461/","msgid":"<20211130203156.6qv3mqvgbrfzlpr4@uno.localdomain>","date":"2021-11-30T20:31:56","subject":"Re: [libcamera-devel] [PATCH v7 6/7] libcamera: Add\n\tvalidateColorSpaces to CameraConfiguration class","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi David\nOn Fri, Nov 26, 2021 at 10:40:44AM +0000, David Plowman wrote:\n> This method forces raw streams to have the \"raw\" color space, and also\n> optionally makes all output streams to share the same color space as\n> some platforms may require this.\n>\n> Signed-off-by: David Plowman <david.plowman@raspberrypi.com>\n> ---\n>  include/libcamera/camera.h |  2 ++\n>  src/libcamera/camera.cpp   | 38 ++++++++++++++++++++++++++++++++++++++\n\nHelpers of this type doesn't really have a place in the current\ncodebase.\n\nIdeally this could go in a CameraConfiguration::Private which we don't\nhave at the moment ?\n\nI don't have better places to suggest I'm afraid, also the\nPipelineHandler base class should be considered. Otherwise it's fine\nhere..\n\n>  2 files changed, 40 insertions(+)\n>\n> diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h\n> index a7759ccb..32a7f812 100644\n> --- a/include/libcamera/camera.h\n> +++ b/include/libcamera/camera.h\n> @@ -69,6 +69,8 @@ public:\n>  protected:\n>  \tCameraConfiguration();\n>\n> +\tStatus validateColorSpaces(bool sharedColorSpace);\n> +\n>  \tstd::vector<StreamConfiguration> config_;\n>  };\n>\n> diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\n> index 400a7cf0..dd06f600 100644\n> --- a/src/libcamera/camera.cpp\n> +++ b/src/libcamera/camera.cpp\n> @@ -20,6 +20,7 @@\n>\n>  #include \"libcamera/internal/camera.h\"\n>  #include \"libcamera/internal/camera_controls.h\"\n> +#include \"libcamera/internal/formats.h\"\n>  #include \"libcamera/internal/pipeline_handler.h\"\n\nYou should include color_space.h\n\n>\n>  /**\n> @@ -314,6 +315,43 @@ std::size_t CameraConfiguration::size() const\n>  \treturn config_.size();\n>  }\n>\n> +static bool isRaw(const PixelFormat &pixFmt)\n> +{\n> +\tconst PixelFormatInfo &info = PixelFormatInfo::info(pixFmt);\n> +\treturn info.isValid() &&\n> +\t       info.colourEncoding == PixelFormatInfo::ColourEncodingRAW;\n> +}\n> +\n> +CameraConfiguration::Status CameraConfiguration::validateColorSpaces(bool shareOuputColorSpaces)\n> +{\n> +\tStatus status = Valid;\n> +\n> +\t/*\n> +\t * Set all raw streams to the Raw color space, and make a note of the largest\n> +\t * non-raw stream with a defined color space (if there is one).\n> +\t */\n> +\tint index = -1;\n> +\tfor (auto [i, cfg] : utils::enumerate(config_)) {\n> +\t\tif (isRaw(cfg.pixelFormat))\n> +\t\t\tcfg.colorSpace = ColorSpace::Raw;\n\nThis might actually be an adjustment\n\n\t\t\tif (cfg.colorSpace != ColorSpace::Raw) {\n\t\t\t\tcfg.colorSpace = ColorSpace::Raw;\n\t\t\t\tstatus = Adjusted;\n\t\t\t}\n\n> +\t\telse if (cfg.colorSpace && (index == -1 || cfg.size > config_[i].size))\n> +\t\t\tindex = i;\n> +\t}\n> +\n> +\t/* Make all output color spaces the same, if requested. */\n> +\tif (index >= 0 && shareOuputColorSpaces) {\n\nI would\n        if (index < 0 || !shareOuputColorSpaces)\n                return status;\n\nto reduce one indentation level and return earlier. up to you.\n\n> +\t\tfor (auto &cfg : config_) {\n> +\t\t\tif (!isRaw(cfg.pixelFormat) &&\n\nSame here\n                        if (isRaw(cfg.pixelFormat)\n                                continue;\n\nup to you\n\n> +\t\t\t    cfg.colorSpace != config_[index].colorSpace) {\n> +\t\t\t\tcfg.colorSpace = config_[index].colorSpace;\n> +\t\t\t\tstatus = Adjusted;\n> +\t\t\t}\n> +\t\t}\n> +\t}\n> +\n> +\treturn status;\n> +}\n> +\n>  /**\n>   * \\var CameraConfiguration::transform\n>   * \\brief User-specified transform to be applied to the image\n> --\n> 2.30.2\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 4D119BDB13\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 30 Nov 2021 20:31:08 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 83DB260720;\n\tTue, 30 Nov 2021 21:31:07 +0100 (CET)","from relay7-d.mail.gandi.net (relay7-d.mail.gandi.net\n\t[217.70.183.200])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 26917605C4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 30 Nov 2021 21:31:06 +0100 (CET)","(Authenticated sender: jacopo@jmondi.org)\n\tby relay7-d.mail.gandi.net (Postfix) with ESMTPSA id EBC472000F;\n\tTue, 30 Nov 2021 20:31:03 +0000 (UTC)"],"Date":"Tue, 30 Nov 2021 21:31:56 +0100","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"David Plowman <david.plowman@raspberrypi.com>","Message-ID":"<20211130203156.6qv3mqvgbrfzlpr4@uno.localdomain>","References":"<20211126104045.4756-1-david.plowman@raspberrypi.com>\n\t<20211126104045.4756-7-david.plowman@raspberrypi.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20211126104045.4756-7-david.plowman@raspberrypi.com>","Subject":"Re: [libcamera-devel] [PATCH v7 6/7] libcamera: Add\n\tvalidateColorSpaces to CameraConfiguration class","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>","Cc":"Tomasz Figa <tfiga@google.com>, libcamera-devel@lists.libcamera.org,\n\tHans Verkuil <hverkuil-cisco@xs4all.nl>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":21464,"web_url":"https://patchwork.libcamera.org/comment/21464/","msgid":"<20211130210814.upfwteij2doyjbzi@uno.localdomain>","date":"2021-11-30T21:08:14","subject":"Re: [libcamera-devel] [PATCH v7 6/7] libcamera: Add\n\tvalidateColorSpaces to CameraConfiguration class","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi again\n\nOn Fri, Nov 26, 2021 at 10:40:44AM +0000, David Plowman wrote:\n> This method forces raw streams to have the \"raw\" color space, and also\n> optionally makes all output streams to share the same color space as\n> some platforms may require this.\n>\n> Signed-off-by: David Plowman <david.plowman@raspberrypi.com>\n> ---\n>  include/libcamera/camera.h |  2 ++\n>  src/libcamera/camera.cpp   | 38 ++++++++++++++++++++++++++++++++++++++\n>  2 files changed, 40 insertions(+)\n>\n> diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h\n> index a7759ccb..32a7f812 100644\n> --- a/include/libcamera/camera.h\n> +++ b/include/libcamera/camera.h\n> @@ -69,6 +69,8 @@ public:\n>  protected:\n>  \tCameraConfiguration();\n>\n> +\tStatus validateColorSpaces(bool sharedColorSpace);\n> +\n>  \tstd::vector<StreamConfiguration> config_;\n>  };\n>\n> diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\n> index 400a7cf0..dd06f600 100644\n> --- a/src/libcamera/camera.cpp\n> +++ b/src/libcamera/camera.cpp\n> @@ -20,6 +20,7 @@\n>\n>  #include \"libcamera/internal/camera.h\"\n>  #include \"libcamera/internal/camera_controls.h\"\n> +#include \"libcamera/internal/formats.h\"\n>  #include \"libcamera/internal/pipeline_handler.h\"\n>\n>  /**\n> @@ -314,6 +315,43 @@ std::size_t CameraConfiguration::size() const\n>  \treturn config_.size();\n>  }\n>\n> +static bool isRaw(const PixelFormat &pixFmt)\n> +{\n> +\tconst PixelFormatInfo &info = PixelFormatInfo::info(pixFmt);\n> +\treturn info.isValid() &&\n> +\t       info.colourEncoding == PixelFormatInfo::ColourEncodingRAW;\n> +}\n> +\n\nDocumentation is missing\n\ninclude/libcamera/camera.h:72: warning: Member validateColorSpaces(bool sharedColorSpace) (function) of class libcamera::CameraConfiguration is not documented.\n\n> +CameraConfiguration::Status CameraConfiguration::validateColorSpaces(bool shareOuputColorSpaces)\n> +{\n> +\tStatus status = Valid;\n> +\n> +\t/*\n> +\t * Set all raw streams to the Raw color space, and make a note of the largest\n> +\t * non-raw stream with a defined color space (if there is one).\n> +\t */\n> +\tint index = -1;\n> +\tfor (auto [i, cfg] : utils::enumerate(config_)) {\n> +\t\tif (isRaw(cfg.pixelFormat))\n> +\t\t\tcfg.colorSpace = ColorSpace::Raw;\n> +\t\telse if (cfg.colorSpace && (index == -1 || cfg.size > config_[i].size))\n> +\t\t\tindex = i;\n> +\t}\n> +\n> +\t/* Make all output color spaces the same, if requested. */\n> +\tif (index >= 0 && shareOuputColorSpaces) {\n> +\t\tfor (auto &cfg : config_) {\n> +\t\t\tif (!isRaw(cfg.pixelFormat) &&\n> +\t\t\t    cfg.colorSpace != config_[index].colorSpace) {\n> +\t\t\t\tcfg.colorSpace = config_[index].colorSpace;\n> +\t\t\t\tstatus = Adjusted;\n> +\t\t\t}\n> +\t\t}\n> +\t}\n> +\n> +\treturn status;\n> +}\n> +\n>  /**\n>   * \\var CameraConfiguration::transform\n>   * \\brief User-specified transform to be applied to the image\n> --\n> 2.30.2\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 9A4D2BF415\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 30 Nov 2021 21:07:26 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D088760720;\n\tTue, 30 Nov 2021 22:07:25 +0100 (CET)","from relay11.mail.gandi.net (relay11.mail.gandi.net\n\t[217.70.178.231])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 9D4F2605C4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 30 Nov 2021 22:07:24 +0100 (CET)","(Authenticated sender: jacopo@jmondi.org)\n\tby relay11.mail.gandi.net (Postfix) with ESMTPSA id 64A1110000E;\n\tTue, 30 Nov 2021 21:07:21 +0000 (UTC)"],"Date":"Tue, 30 Nov 2021 22:08:14 +0100","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"David Plowman <david.plowman@raspberrypi.com>","Message-ID":"<20211130210814.upfwteij2doyjbzi@uno.localdomain>","References":"<20211126104045.4756-1-david.plowman@raspberrypi.com>\n\t<20211126104045.4756-7-david.plowman@raspberrypi.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20211126104045.4756-7-david.plowman@raspberrypi.com>","Subject":"Re: [libcamera-devel] [PATCH v7 6/7] libcamera: Add\n\tvalidateColorSpaces to CameraConfiguration class","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>","Cc":"Tomasz Figa <tfiga@google.com>, libcamera-devel@lists.libcamera.org,\n\tHans Verkuil <hverkuil-cisco@xs4all.nl>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]