[{"id":34752,"web_url":"https://patchwork.libcamera.org/comment/34752/","msgid":"<mre2r4iedik6tebpebeolnlxhn57onsobhgfvhk4cxsiwlrtye@tvz5m3xtxwyu>","date":"2025-07-01T07:53:20","subject":"Re: [PATCH v7 01/12] libcamera: software_isp: Assign colour spaces\n\tin configurations","submitter":{"id":232,"url":"https://patchwork.libcamera.org/api/people/232/","name":"Umang Jain","email":"uajain@igalia.com"},"content":"On Fri, Jun 27, 2025 at 01:34:36PM +0200, Milan Zamazal wrote:\n> StreamConfiguration's should have colorSpace set.  This is not the case\n> in the simple pipeline.  Let's set it there.  This also fixes a crash in\n> `cam' due to accessing an unset colorSpace.\n> \n> The colour space is assigned as follows:\n> \n> - If raw role is requested, then the colour space must be raw.\n> - Otherwise, if software ISP is used, the default colour space is\n>   set to Srgb (YcbcrEncoding::None, Range::Full).\n> - Otherwise, if a converter is used, the default colour space is left\n>   unset.\n> - Then in configuration validation, if the pixel format is changed, the\n>   colour space is set according to the new pixel format.\n> - If the colour space is still unset, it is set according to the\n>   resulting pixel format.\n> \n> Signed-off-by: Milan Zamazal <mzamazal@redhat.com>\n> ---\n>  src/libcamera/pipeline/simple/simple.cpp | 25 +++++++++++++++++++++++-\n>  1 file changed, 24 insertions(+), 1 deletion(-)\n> \n> diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\n> index efb07051b..a008b13d1 100644\n> --- a/src/libcamera/pipeline/simple/simple.cpp\n> +++ b/src/libcamera/pipeline/simple/simple.cpp\n> @@ -25,6 +25,7 @@\n>  #include <libcamera/base/log.h>\n>  \n>  #include <libcamera/camera.h>\n> +#include <libcamera/color_space.h>\n>  #include <libcamera/control_ids.h>\n>  #include <libcamera/request.h>\n>  #include <libcamera/stream.h>\n> @@ -35,6 +36,7 @@\n>  #include \"libcamera/internal/converter.h\"\n>  #include \"libcamera/internal/delayed_controls.h\"\n>  #include \"libcamera/internal/device_enumerator.h\"\n> +#include \"libcamera/internal/formats.h\"\n>  #include \"libcamera/internal/media_device.h\"\n>  #include \"libcamera/internal/pipeline_handler.h\"\n>  #include \"libcamera/internal/software_isp/software_isp.h\"\n> @@ -1206,8 +1208,24 @@ CameraConfiguration::Status SimpleCameraConfiguration::validate()\n>  \t\tif (cfg.pixelFormat != pixelFormat) {\n>  \t\t\tLOG(SimplePipeline, Debug) << \"Adjusting pixel format\";\n>  \t\t\tcfg.pixelFormat = pixelFormat;\n> +\t\t\tif (cfg.colorSpace && cfg.colorSpace != ColorSpace::Raw)\n> +\t\t\t\tcfg.colorSpace->adjust(pixelFormat);\n\nCan this possibly can be avoided with a call to validateColorSpaces() ?\nSee below.\n\n>  \t\t\tstatus = Adjusted;\n>  \t\t}\n> +\t\tif (!cfg.colorSpace) {\n> +\t\t\tconst PixelFormatInfo &info = PixelFormatInfo::info(pixelFormat);\n> +\t\t\tswitch (info.colourEncoding) {\n> +\t\t\tcase PixelFormatInfo::ColourEncodingRGB:\n> +\t\t\t\tcfg.colorSpace = ColorSpace::Srgb;\n> +\t\t\t\tbreak;\n> +\t\t\tcase libcamera::PixelFormatInfo::ColourEncodingYUV:\n> +\t\t\t\tcfg.colorSpace = ColorSpace::Sycc;\n> +\t\t\t\tbreak;\n> +\t\t\tdefault:\n> +\t\t\t\tcfg.colorSpace = ColorSpace::Raw;\n> +\t\t\t}\n\nAdd:\n\t\t\tstatus = Adjusted;\n\n> +\t\t\tcfg.colorSpace->adjust(pixelFormat);\n\nInstead of doing this here, possibly call validateColorSpaces() outside\nthis `if` block ?\n\n> +\t\t}\n\t\t\n\t\tvalidateColorSpaces();\n\nand set status accordingly?\n>  \n>  \t\tif (!pipeConfig_->outputSizes.contains(cfg.size)) {\n>  \t\t\tSize adjustedSize = pipeConfig_->captureSize;\n> @@ -1314,11 +1332,16 @@ SimplePipelineHandler::generateConfiguration(Camera *camera, Span<const StreamRo\n>  \t *\n>  \t * \\todo Implement a better way to pick the default format\n>  \t */\n> -\tfor ([[maybe_unused]] StreamRole role : roles) {\n> +\tfor (StreamRole role : roles) {\n>  \t\tStreamConfiguration cfg{ StreamFormats{ formats } };\n>  \t\tcfg.pixelFormat = formats.begin()->first;\n>  \t\tcfg.size = formats.begin()->second[0].max;\n>  \n> +\t\tif (role == StreamRole::Raw)\n> +\t\t\tcfg.colorSpace = ColorSpace::Raw;\n\nThe benefit of validateColorSpaces(), it will set and ensure Raw\nColorspace is set for Raw streams and then this can be omitted here.\nHowever, if you prefer keeping it here, that's should be fine as well.\n\n\n> +\t\telse if (data->swIsp_)\n> +\t\t\tcfg.colorSpace = ColorSpace::Srgb;\n> +\n>  \t\tconfig->addConfiguration(cfg);\n>  \t}\n>  \n> -- \n> 2.50.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 17143BDCBF\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  1 Jul 2025 07:53:22 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id AADEB68E11;\n\tTue,  1 Jul 2025 09:53:20 +0200 (CEST)","from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 1076361528\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  1 Jul 2025 09:53:17 +0200 (CEST)","from [49.36.69.141] (helo=uajain)\n\tby fanzine2.igalia.com with esmtpsa \n\t(Cipher TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256)\n\t(Exim) id 1uWVno-00Arpx-4Y; Tue, 01 Jul 2025 09:53:16 +0200"],"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=\"S7U+KV9L\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com;\n\ts=20170329;\n\th=In-Reply-To:Content-Type:MIME-Version:References:Message-ID:\n\tSubject:Cc:To:From:Date:Sender:Reply-To:Content-Transfer-Encoding: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=EChoPFcEJwq1GMxkzGrrNU3niz65VlqKXeWLF6iM17E=;\n\tb=S7U+KV9LR4Rn4LEqSvP/v/+WCf\n\tK8JP5/tjkDHamBK3A8xaQW8lcdZCEoEyQxZXgnsLM2Qzt8LwjlAigam5KZb77q/g5IcO23J937LXm\n\t/aARbDFuT++A/cwYfkbSBk7OWgIxYvNwnFL6b2alx+ccmRitg7d00+js3hyfNalxerl0U47fC5oMc\n\tJW4z61pnZ9aiop3g41FD34EziIZqjMM0T776bAT6+QKvFImlhR/E/3YCG/1qNTXomRfEWp+0MTddo\n\t8XEFVgAajhWo7aNDYJi1ntVF0rsE7CS6IQuiNmv/9xDQloX4X00LGGl4Kaklrl6L2Ez804jPW7alg\n\tqkNYFt9A==;","Date":"Tue, 1 Jul 2025 13:23:20 +0530","From":"Umang Jain <uajain@igalia.com>","To":"Milan Zamazal <mzamazal@redhat.com>","Cc":"libcamera-devel@lists.libcamera.org, Laurent Pinchart\n\t<laurent.pinchart@ideasonboard.com>, Kieran Bingham\n\t<kieran.bingham@ideasonboard.com>, =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?=\n\t<barnabas.pocze@ideasonboard.com>, Paul Elder\n\t<paul.elder@ideasonboard.com>","Subject":"Re: [PATCH v7 01/12] libcamera: software_isp: Assign colour spaces\n\tin configurations","Message-ID":"<mre2r4iedik6tebpebeolnlxhn57onsobhgfvhk4cxsiwlrtye@tvz5m3xtxwyu>","References":"<20250627113449.23106-1-mzamazal@redhat.com>\n\t<20250627113449.23106-2-mzamazal@redhat.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<20250627113449.23106-2-mzamazal@redhat.com>","User-Agent":"NeoMutt/20250510-dirty","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":34768,"web_url":"https://patchwork.libcamera.org/comment/34768/","msgid":"<85ldp83u89.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","date":"2025-07-01T13:40:06","subject":"Re: [PATCH v7 01/12] libcamera: software_isp: Assign colour spaces\n\tin configurations","submitter":{"id":177,"url":"https://patchwork.libcamera.org/api/people/177/","name":"Milan Zamazal","email":"mzamazal@redhat.com"},"content":"Hi Umang,\n\nthank you for review.\n\nUmang Jain <uajain@igalia.com> writes:\n\n> On Fri, Jun 27, 2025 at 01:34:36PM +0200, Milan Zamazal wrote:\n>> StreamConfiguration's should have colorSpace set.  This is not the case\n>> in the simple pipeline.  Let's set it there.  This also fixes a crash in\n>\n>> `cam' due to accessing an unset colorSpace.\n>> \n>> The colour space is assigned as follows:\n>> \n>> - If raw role is requested, then the colour space must be raw.\n>> - Otherwise, if software ISP is used, the default colour space is\n>>   set to Srgb (YcbcrEncoding::None, Range::Full).\n>> - Otherwise, if a converter is used, the default colour space is left\n>>   unset.\n>> - Then in configuration validation, if the pixel format is changed, the\n>>   colour space is set according to the new pixel format.\n>> - If the colour space is still unset, it is set according to the\n>>   resulting pixel format.\n>> \n>> Signed-off-by: Milan Zamazal <mzamazal@redhat.com>\n>> ---\n>>  src/libcamera/pipeline/simple/simple.cpp | 25 +++++++++++++++++++++++-\n>>  1 file changed, 24 insertions(+), 1 deletion(-)\n>> \n>> diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\n>> index efb07051b..a008b13d1 100644\n>> --- a/src/libcamera/pipeline/simple/simple.cpp\n>> +++ b/src/libcamera/pipeline/simple/simple.cpp\n>> @@ -25,6 +25,7 @@\n>>  #include <libcamera/base/log.h>\n>>  \n>>  #include <libcamera/camera.h>\n>> +#include <libcamera/color_space.h>\n>>  #include <libcamera/control_ids.h>\n>>  #include <libcamera/request.h>\n>>  #include <libcamera/stream.h>\n>> @@ -35,6 +36,7 @@\n>>  #include \"libcamera/internal/converter.h\"\n>>  #include \"libcamera/internal/delayed_controls.h\"\n>>  #include \"libcamera/internal/device_enumerator.h\"\n>> +#include \"libcamera/internal/formats.h\"\n>>  #include \"libcamera/internal/media_device.h\"\n>>  #include \"libcamera/internal/pipeline_handler.h\"\n>>  #include \"libcamera/internal/software_isp/software_isp.h\"\n>> @@ -1206,8 +1208,24 @@ CameraConfiguration::Status SimpleCameraConfiguration::validate()\n>>  \t\tif (cfg.pixelFormat != pixelFormat) {\n>>  \t\t\tLOG(SimplePipeline, Debug) << \"Adjusting pixel format\";\n>>  \t\t\tcfg.pixelFormat = pixelFormat;\n>> +\t\t\tif (cfg.colorSpace && cfg.colorSpace != ColorSpace::Raw)\n>> +\t\t\t\tcfg.colorSpace->adjust(pixelFormat);\n>\n> Can this possibly can be avoided with a call to validateColorSpaces() ?\n\nI don't think so, see below.\n\n> See below.\n>\n>>  \t\t\tstatus = Adjusted;\n>>  \t\t}\n>> +\t\tif (!cfg.colorSpace) {\n>> +\t\t\tconst PixelFormatInfo &info = PixelFormatInfo::info(pixelFormat);\n>> +\t\t\tswitch (info.colourEncoding) {\n>> +\t\t\tcase PixelFormatInfo::ColourEncodingRGB:\n>> +\t\t\t\tcfg.colorSpace = ColorSpace::Srgb;\n>> +\t\t\t\tbreak;\n>> +\t\t\tcase libcamera::PixelFormatInfo::ColourEncodingYUV:\n>> +\t\t\t\tcfg.colorSpace = ColorSpace::Sycc;\n>> +\t\t\t\tbreak;\n>> +\t\t\tdefault:\n>> +\t\t\t\tcfg.colorSpace = ColorSpace::Raw;\n>> +\t\t\t}\n>\n> Add:\n> \t\t\tstatus = Adjusted;\n\nOK.\n\n>> +\t\t\tcfg.colorSpace->adjust(pixelFormat);\n>\n> Instead of doing this here, possibly call validateColorSpaces() outside\n> this `if` block ?\n>\n>> +\t\t}\n> \t\t\n> \t\tvalidateColorSpaces();\n>\n> and set status accordingly?\n\nShouldn't validateColorSpaces be called outside the whole `for' cycle?\n\n>>  \t\tif (!pipeConfig_->outputSizes.contains(cfg.size)) {\n>>  \t\t\tSize adjustedSize = pipeConfig_->captureSize;\n>> @@ -1314,11 +1332,16 @@ SimplePipelineHandler::generateConfiguration(Camera *camera, Span<const StreamRo\n>>  \t *\n>>  \t * \\todo Implement a better way to pick the default format\n>>  \t */\n>> -\tfor ([[maybe_unused]] StreamRole role : roles) {\n>> +\tfor (StreamRole role : roles) {\n>>  \t\tStreamConfiguration cfg{ StreamFormats{ formats } };\n>>  \t\tcfg.pixelFormat = formats.begin()->first;\n>>  \t\tcfg.size = formats.begin()->second[0].max;\n>>  \n>> +\t\tif (role == StreamRole::Raw)\n>> +\t\t\tcfg.colorSpace = ColorSpace::Raw;\n>\n> The benefit of validateColorSpaces(), it will set and ensure Raw\n> Colorspace is set for Raw streams and then this can be omitted here.\n> However, if you prefer keeping it here, that's should be fine as well.\n\nThe idea here is that if a raw stream role is requested then the stream\nmust be handled as raw, regardless of its format.  Setting colorSpace to\nRaw here and avoiding adjusting it in validation above (see the first\ncomment) ensures the requirement.\n\nI don't say this idea is necessarily meaningful or correct but if it is\nthen validateColorSpaces doesn't have this knowledge and could do\nsomething different than required.\n\n>> +\t\telse if (data->swIsp_)\n>> +\t\t\tcfg.colorSpace = ColorSpace::Srgb;\n>> +\n>>  \t\tconfig->addConfiguration(cfg);\n>>  \t}\n>>  \n>> -- \n>> 2.50.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 F0B10C3237\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  1 Jul 2025 13:40:16 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 54B1468E2A;\n\tTue,  1 Jul 2025 15:40:16 +0200 (CEST)","from us-smtp-delivery-124.mimecast.com\n\t(us-smtp-delivery-124.mimecast.com [170.10.133.124])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 66D5F68E24\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  1 Jul 2025 15:40:14 +0200 (CEST)","from mail-wm1-f71.google.com (mail-wm1-f71.google.com\n\t[209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS\n\t(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n\tus-mta-88-EyRwuhXfPxiKLd1zc49nLA-1; Tue, 01 Jul 2025 09:40:10 -0400","by mail-wm1-f71.google.com with SMTP id\n\t5b1f17b1804b1-4536962204aso13266845e9.3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 01 Jul 2025 06:40:09 -0700 (PDT)","from mzamazal-thinkpadp1gen7.tpbc.csb ([85.93.96.130])\n\tby smtp.gmail.com with ESMTPSA id\n\t5b1f17b1804b1-453823b6e9esm200295365e9.28.2025.07.01.06.40.07\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tTue, 01 Jul 2025 06:40:07 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=redhat.com header.i=@redhat.com\n\theader.b=\"hyj9Yx77\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1751377213;\n\th=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n\tto:to:cc:cc:mime-version:mime-version:content-type:content-type:\n\tin-reply-to:in-reply-to:references:references;\n\tbh=i4upV6ugVPE7/AFrYGqNxETU3F0XVdGQDHB37aYkzfI=;\n\tb=hyj9Yx77TTJiWQTMcfChzYBHK6yZF+btVEnwgt5Mh/yhdZwbgm2o/9kK/u5SyNl7w4ncrC\n\tfmQ+MuSwcTduywDckcGdIaJKp5kbfWUidqDLPVoLA0jOwFW2YYKRyv4XC4iaf4W9A/ktC0\n\tLxlF40Dt1BrYAtA/8ra1qwF57vuOgiQ=","X-MC-Unique":"EyRwuhXfPxiKLd1zc49nLA-1","X-Mimecast-MFC-AGG-ID":"EyRwuhXfPxiKLd1zc49nLA_1751377209","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1751377209; x=1751982009;\n\th=mime-version:user-agent:message-id:date:references:in-reply-to\n\t:subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date\n\t:message-id:reply-to;\n\tbh=i4upV6ugVPE7/AFrYGqNxETU3F0XVdGQDHB37aYkzfI=;\n\tb=sIMs+ZiIwBe7wUVU8OMgBHSNIOrPKLJUayZy/fb8TT96ZJ/w6Rw+UcAX+lh4BOuvcS\n\t7i2IzIXPF1r8GVih1uHd9XjovjMipyuUOfQt3ireXLAXXcgb/Aag66cxOkRtXCMbsN2+\n\tqz6g/xL6/mjPP6/YrtCTBJ4uXWz0Mb0Aqyv585x3weoywaBjroNk5v27T0zIH4J+jJCI\n\tXNJzfcXZZKmv7A6Qpp8gxnYbSYc6KhXtpl5UdiSFcR9tZ9AE91WNldVSUjv7U1Z8x7HY\n\tKfzGnBlyxU48svA1CcjslFXqIdP5RxCIu8EpMnIgZJKaVYa3A6r8Wpx2Uw3XT3YeXWX/\n\t35aA==","X-Gm-Message-State":"AOJu0Ywt78HFI4UsljLfL2d9EVRslkjOIKyIj9cmZyxT3xrTPH6JoVXp\n\tRPGQKi9Ep3eadu+7JrKwNFyZSHxBj1+di2gbAg8YEAS6hC3IMDFY6A1v10o0lO0uVc4wo8X4YR1\n\tB3ZsxF4zbMocuFmF1pOipYFrhLCyCk7gogYRihaP7oOJxQPRAWxraLrCQyRE9EWAPf31lQDUwcj\n\tM=","X-Gm-Gg":"ASbGncsKIcBe5twPuxkIjICoUTSYJEF4PNnJJOmOnWK8xl/asF9ZopLRF8lhHjQTgZp\n\tcwwlAapyprSbU/QB8GKef/aBZLwxdNDyFq3Ocvpe7MbWHUu8L0hBmpM/K7uUkuvrAZ4GsuOsVY/\n\t1RBUHt4cbGvva9yuafDLPjepbqXsbnQ4qIAXn2YV01ZPIzNq/x/+CKnS07gT/P+bn0ZutI4plCi\n\tdnXFf/ypEbf079wfqLk1tUf6mEiV3lH2FtrErYELdk7mRNT9hv9bBKNsPvmyNm0gaQZkFE/RBUE\n\tWikY65yQjnV7iLhdFasVmp/u/vOhjFa/DllKKZ5a81bxjrQ=","X-Received":["by 2002:a05:600c:c09b:b0:450:d3b9:4ba4 with SMTP id\n\t5b1f17b1804b1-4538ee3344amr153455705e9.2.1751377208712; \n\tTue, 01 Jul 2025 06:40:08 -0700 (PDT)","by 2002:a05:600c:c09b:b0:450:d3b9:4ba4 with SMTP id\n\t5b1f17b1804b1-4538ee3344amr153455345e9.2.1751377208169; \n\tTue, 01 Jul 2025 06:40:08 -0700 (PDT)"],"X-Google-Smtp-Source":"AGHT+IH/uR4OWjwqQtFRIx9KFezvqiwZow1sGxqllVkGuZHHz+4uGVcJEqHnrSVCWZVELZPsroH4RQ==","From":"Milan Zamazal <mzamazal@redhat.com>","To":"Umang Jain <uajain@igalia.com>","Cc":"libcamera-devel@lists.libcamera.org,  Laurent Pinchart\n\t<laurent.pinchart@ideasonboard.com>,\n\tKieran Bingham <kieran.bingham@ideasonboard.com>, =?utf-8?q?Barnab?=\n\t=?utf-8?b?w6FzIFDFkWN6ZQ==?=\n\t<barnabas.pocze@ideasonboard.com>, Paul Elder\n\t<paul.elder@ideasonboard.com>","Subject":"Re: [PATCH v7 01/12] libcamera: software_isp: Assign colour spaces\n\tin configurations","In-Reply-To":"<mre2r4iedik6tebpebeolnlxhn57onsobhgfvhk4cxsiwlrtye@tvz5m3xtxwyu>\n\t(Umang Jain's message of \"Tue, 1 Jul 2025 13:23:20 +0530\")","References":"<20250627113449.23106-1-mzamazal@redhat.com>\n\t<20250627113449.23106-2-mzamazal@redhat.com>\n\t<mre2r4iedik6tebpebeolnlxhn57onsobhgfvhk4cxsiwlrtye@tvz5m3xtxwyu>","Date":"Tue, 01 Jul 2025 15:40:06 +0200","Message-ID":"<85ldp83u89.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","User-Agent":"Gnus/5.13 (Gnus v5.13)","MIME-Version":"1.0","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"CUzOBXYPkwBGy87BnTF0Qjqt-_T0PEKRyv6jeTKfQC0_1751377209","X-Mimecast-Originator":"redhat.com","Content-Type":"text/plain","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":34770,"web_url":"https://patchwork.libcamera.org/comment/34770/","msgid":"<2rplhx5sg5tmpmvoekl2dxcaqv3qmjne55zmtxwprr3limlai2@bjiwrrnlp3aw>","date":"2025-07-01T15:28:39","subject":"Re: [PATCH v7 01/12] libcamera: software_isp: Assign colour spaces\n\tin configurations","submitter":{"id":232,"url":"https://patchwork.libcamera.org/api/people/232/","name":"Umang Jain","email":"uajain@igalia.com"},"content":"Hi\n\nOn Tue, Jul 01, 2025 at 03:40:06PM +0200, Milan Zamazal wrote:\n> Hi Umang,\n> \n> thank you for review.\n> \n> Umang Jain <uajain@igalia.com> writes:\n> \n> > On Fri, Jun 27, 2025 at 01:34:36PM +0200, Milan Zamazal wrote:\n> >> StreamConfiguration's should have colorSpace set.  This is not the case\n> >> in the simple pipeline.  Let's set it there.  This also fixes a crash in\n> >\n> >> `cam' due to accessing an unset colorSpace.\n> >> \n> >> The colour space is assigned as follows:\n> >> \n> >> - If raw role is requested, then the colour space must be raw.\n> >> - Otherwise, if software ISP is used, the default colour space is\n> >>   set to Srgb (YcbcrEncoding::None, Range::Full).\n> >> - Otherwise, if a converter is used, the default colour space is left\n> >>   unset.\n> >> - Then in configuration validation, if the pixel format is changed, the\n> >>   colour space is set according to the new pixel format.\n> >> - If the colour space is still unset, it is set according to the\n> >>   resulting pixel format.\n> >> \n> >> Signed-off-by: Milan Zamazal <mzamazal@redhat.com>\n> >> ---\n> >>  src/libcamera/pipeline/simple/simple.cpp | 25 +++++++++++++++++++++++-\n> >>  1 file changed, 24 insertions(+), 1 deletion(-)\n> >> \n> >> diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\n> >> index efb07051b..a008b13d1 100644\n> >> --- a/src/libcamera/pipeline/simple/simple.cpp\n> >> +++ b/src/libcamera/pipeline/simple/simple.cpp\n> >> @@ -25,6 +25,7 @@\n> >>  #include <libcamera/base/log.h>\n> >>  \n> >>  #include <libcamera/camera.h>\n> >> +#include <libcamera/color_space.h>\n> >>  #include <libcamera/control_ids.h>\n> >>  #include <libcamera/request.h>\n> >>  #include <libcamera/stream.h>\n> >> @@ -35,6 +36,7 @@\n> >>  #include \"libcamera/internal/converter.h\"\n> >>  #include \"libcamera/internal/delayed_controls.h\"\n> >>  #include \"libcamera/internal/device_enumerator.h\"\n> >> +#include \"libcamera/internal/formats.h\"\n> >>  #include \"libcamera/internal/media_device.h\"\n> >>  #include \"libcamera/internal/pipeline_handler.h\"\n> >>  #include \"libcamera/internal/software_isp/software_isp.h\"\n> >> @@ -1206,8 +1208,24 @@ CameraConfiguration::Status SimpleCameraConfiguration::validate()\n> >>  \t\tif (cfg.pixelFormat != pixelFormat) {\n> >>  \t\t\tLOG(SimplePipeline, Debug) << \"Adjusting pixel format\";\n> >>  \t\t\tcfg.pixelFormat = pixelFormat;\n> >> +\t\t\tif (cfg.colorSpace && cfg.colorSpace != ColorSpace::Raw)\n> >> +\t\t\t\tcfg.colorSpace->adjust(pixelFormat);\n> >\n> > Can this possibly can be avoided with a call to validateColorSpaces() ?\n> \n> I don't think so, see below.\n> \n> > See below.\n> >\n> >>  \t\t\tstatus = Adjusted;\n> >>  \t\t}\n> >> +\t\tif (!cfg.colorSpace) {\n> >> +\t\t\tconst PixelFormatInfo &info = PixelFormatInfo::info(pixelFormat);\n> >> +\t\t\tswitch (info.colourEncoding) {\n> >> +\t\t\tcase PixelFormatInfo::ColourEncodingRGB:\n> >> +\t\t\t\tcfg.colorSpace = ColorSpace::Srgb;\n> >> +\t\t\t\tbreak;\n> >> +\t\t\tcase libcamera::PixelFormatInfo::ColourEncodingYUV:\n> >> +\t\t\t\tcfg.colorSpace = ColorSpace::Sycc;\n> >> +\t\t\t\tbreak;\n> >> +\t\t\tdefault:\n> >> +\t\t\t\tcfg.colorSpace = ColorSpace::Raw;\n> >> +\t\t\t}\n> >\n> > Add:\n> > \t\t\tstatus = Adjusted;\n> \n> OK.\n> \n> >> +\t\t\tcfg.colorSpace->adjust(pixelFormat);\n> >\n> > Instead of doing this here, possibly call validateColorSpaces() outside\n> > this `if` block ?\n> >\n> >> +\t\t}\n> > \t\t\n> > \t\tvalidateColorSpaces();\n> >\n> > and set status accordingly?\n> \n> Shouldn't validateColorSpaces be called outside the whole `for' cycle?\n\nOh yes, I missed the loop. It should be called outside.\n\n> \n> >>  \t\tif (!pipeConfig_->outputSizes.contains(cfg.size)) {\n> >>  \t\t\tSize adjustedSize = pipeConfig_->captureSize;\n> >> @@ -1314,11 +1332,16 @@ SimplePipelineHandler::generateConfiguration(Camera *camera, Span<const StreamRo\n> >>  \t *\n> >>  \t * \\todo Implement a better way to pick the default format\n> >>  \t */\n> >> -\tfor ([[maybe_unused]] StreamRole role : roles) {\n> >> +\tfor (StreamRole role : roles) {\n> >>  \t\tStreamConfiguration cfg{ StreamFormats{ formats } };\n> >>  \t\tcfg.pixelFormat = formats.begin()->first;\n> >>  \t\tcfg.size = formats.begin()->second[0].max;\n> >>  \n> >> +\t\tif (role == StreamRole::Raw)\n> >> +\t\t\tcfg.colorSpace = ColorSpace::Raw;\n> >\n> > The benefit of validateColorSpaces(), it will set and ensure Raw\n> > Colorspace is set for Raw streams and then this can be omitted here.\n> > However, if you prefer keeping it here, that's should be fine as well.\n> \n> The idea here is that if a raw stream role is requested then the stream\n> must be handled as raw, regardless of its format.  Setting colorSpace to\n> Raw here and avoiding adjusting it in validation above (see the first\n> comment) ensures the requirement.\n\nDo you mean this comment?\n  - If raw role is requested, then the colour space must be raw.\n\nGiven your explanation above that colorspace should must be raw, for\nrole=raw *regardless of its format* - is something I didn't consider\nor inferred. The comment in the commit message should be expanded:\n\n  - If raw role is requested, then the colour space must be raw,                \n    regardless of the stream format.\n\n> \n> I don't say this idea is necessarily meaningful or correct but if it is\n> then validateColorSpaces doesn't have this knowledge and could do\n> something different than required.\n\nThis idea is certainly not evident from the patch (atleast to me).\nI would prefer to document it in a comment, possibly justifying\nthe rationale.\n> \n> >> +\t\telse if (data->swIsp_)\n> >> +\t\t\tcfg.colorSpace = ColorSpace::Srgb;\n> >> +\n> >>  \t\tconfig->addConfiguration(cfg);\n> >>  \t}\n> >>  \n> >> -- \n> >> 2.50.0\n> >> \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 A4B95C3237\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  1 Jul 2025 15:28:45 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D5D3C68E29;\n\tTue,  1 Jul 2025 17:28:44 +0200 (CEST)","from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 2B23A68E1E\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  1 Jul 2025 17:28:41 +0200 (CEST)","from [49.36.69.141] (helo=uajain)\n\tby fanzine2.igalia.com with esmtpsa \n\t(Cipher TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256)\n\t(Exim) id 1uWcuV-00B1d0-Iz; Tue, 01 Jul 2025 17:28:40 +0200"],"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=\"ZUNoBnuD\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com;\n\ts=20170329;\n\th=In-Reply-To:Content-Type:MIME-Version:References:Message-ID:\n\tSubject:Cc:To:From:Date:Sender:Reply-To:Content-Transfer-Encoding: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=TD2DJM5fukKXjXtCDNQfbeRuQv899tb26UYrml/dvgA=;\n\tb=ZUNoBnuDcf8XX4yTX/VGaKngLu\n\tAxShwBDVePfE8dD7daSjOI3aySBiX2dryyogX9BkjK08Mu4Yfl5aJX7kVATC+4J9P9LCW4OFIgc0o\n\tf9IQ4ZohmYXAh61SqpSXOvjTgmRQ3vIe4jAV4NjAMZVX0PlYGV+iGtP3+AswLB27scpPC4by4k8RQ\n\tAFMFnuzxEqD1ONJ98gzHA9prkRQXzCD1Jxh35pAv7iZ30711mTH6ahE9DwqkI3FliLTVcsp1q6+0w\n\tf/Dv9R4NuDAWaZjmdEfdQdulcYr6J0I2GLbCxXVeu48ywE5ig2iAPLo6xHeiTz3pzm6nmo1x7RTX/\n\ttI0pbYKw==;","Date":"Tue, 1 Jul 2025 20:58:39 +0530","From":"Umang Jain <uajain@igalia.com>","To":"Milan Zamazal <mzamazal@redhat.com>","Cc":"libcamera-devel@lists.libcamera.org, Laurent Pinchart\n\t<laurent.pinchart@ideasonboard.com>, Kieran Bingham\n\t<kieran.bingham@ideasonboard.com>, =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?=\n\t<barnabas.pocze@ideasonboard.com>, Paul Elder\n\t<paul.elder@ideasonboard.com>","Subject":"Re: [PATCH v7 01/12] libcamera: software_isp: Assign colour spaces\n\tin configurations","Message-ID":"<2rplhx5sg5tmpmvoekl2dxcaqv3qmjne55zmtxwprr3limlai2@bjiwrrnlp3aw>","References":"<20250627113449.23106-1-mzamazal@redhat.com>\n\t<20250627113449.23106-2-mzamazal@redhat.com>\n\t<mre2r4iedik6tebpebeolnlxhn57onsobhgfvhk4cxsiwlrtye@tvz5m3xtxwyu>\n\t<85ldp83u89.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<85ldp83u89.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","User-Agent":"NeoMutt/20250510-dirty","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":34775,"web_url":"https://patchwork.libcamera.org/comment/34775/","msgid":"<85frff6kul.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","date":"2025-07-02T08:46:42","subject":"Re: [PATCH v7 01/12] libcamera: software_isp: Assign colour spaces\n\tin configurations","submitter":{"id":177,"url":"https://patchwork.libcamera.org/api/people/177/","name":"Milan Zamazal","email":"mzamazal@redhat.com"},"content":"Umang Jain <uajain@igalia.com> writes:\n\n> Hi\n>\n> On Tue, Jul 01, 2025 at 03:40:06PM +0200, Milan Zamazal wrote:\n>> Hi Umang,\n>> \n>> thank you for review.\n>> \n>> Umang Jain <uajain@igalia.com> writes:\n>> \n>> > On Fri, Jun 27, 2025 at 01:34:36PM +0200, Milan Zamazal wrote:\n>> >> StreamConfiguration's should have colorSpace set.  This is not the case\n>> >> in the simple pipeline.  Let's set it there.  This also fixes a crash in\n>> >\n>> >> `cam' due to accessing an unset colorSpace.\n>> >> \n>> >> The colour space is assigned as follows:\n>> >> \n>> >> - If raw role is requested, then the colour space must be raw.\n>> >> - Otherwise, if software ISP is used, the default colour space is\n>> >>   set to Srgb (YcbcrEncoding::None, Range::Full).\n>> >> - Otherwise, if a converter is used, the default colour space is left\n>> >>   unset.\n>> >> - Then in configuration validation, if the pixel format is changed, the\n>> >>   colour space is set according to the new pixel format.\n>> >> - If the colour space is still unset, it is set according to the\n>> >>   resulting pixel format.\n>> >> \n>> >> Signed-off-by: Milan Zamazal <mzamazal@redhat.com>\n>> >> ---\n>> >>  src/libcamera/pipeline/simple/simple.cpp | 25 +++++++++++++++++++++++-\n>> >>  1 file changed, 24 insertions(+), 1 deletion(-)\n>> >> \n>> >> diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\n>> >> index efb07051b..a008b13d1 100644\n>> >> --- a/src/libcamera/pipeline/simple/simple.cpp\n>> >> +++ b/src/libcamera/pipeline/simple/simple.cpp\n>> >> @@ -25,6 +25,7 @@\n>> >>  #include <libcamera/base/log.h>\n>> >>  \n>> >>  #include <libcamera/camera.h>\n>> >> +#include <libcamera/color_space.h>\n>> >>  #include <libcamera/control_ids.h>\n>> >>  #include <libcamera/request.h>\n>> >>  #include <libcamera/stream.h>\n>> >> @@ -35,6 +36,7 @@\n>> >>  #include \"libcamera/internal/converter.h\"\n>> >>  #include \"libcamera/internal/delayed_controls.h\"\n>> >>  #include \"libcamera/internal/device_enumerator.h\"\n>> >> +#include \"libcamera/internal/formats.h\"\n>> >>  #include \"libcamera/internal/media_device.h\"\n>> >>  #include \"libcamera/internal/pipeline_handler.h\"\n>> >>  #include \"libcamera/internal/software_isp/software_isp.h\"\n>> >> @@ -1206,8 +1208,24 @@ CameraConfiguration::Status SimpleCameraConfiguration::validate()\n>> >>  \t\tif (cfg.pixelFormat != pixelFormat) {\n>> >>  \t\t\tLOG(SimplePipeline, Debug) << \"Adjusting pixel format\";\n>> >>  \t\t\tcfg.pixelFormat = pixelFormat;\n>> >> +\t\t\tif (cfg.colorSpace && cfg.colorSpace != ColorSpace::Raw)\n>> >> +\t\t\t\tcfg.colorSpace->adjust(pixelFormat);\n>> >\n>> > Can this possibly can be avoided with a call to validateColorSpaces() ?\n>> \n>> I don't think so, see below.\n>> \n>> > See below.\n>> >\n>> >>  \t\t\tstatus = Adjusted;\n>> >>  \t\t}\n>> >> +\t\tif (!cfg.colorSpace) {\n>> >> +\t\t\tconst PixelFormatInfo &info = PixelFormatInfo::info(pixelFormat);\n>> >> +\t\t\tswitch (info.colourEncoding) {\n>> >> +\t\t\tcase PixelFormatInfo::ColourEncodingRGB:\n>> >> +\t\t\t\tcfg.colorSpace = ColorSpace::Srgb;\n>> >> +\t\t\t\tbreak;\n>> >> +\t\t\tcase libcamera::PixelFormatInfo::ColourEncodingYUV:\n>> >> +\t\t\t\tcfg.colorSpace = ColorSpace::Sycc;\n>> >> +\t\t\t\tbreak;\n>> >> +\t\t\tdefault:\n>> >> +\t\t\t\tcfg.colorSpace = ColorSpace::Raw;\n>> >> +\t\t\t}\n>> >\n>> > Add:\n>> > \t\t\tstatus = Adjusted;\n>> \n>> OK.\n>> \n>> >> +\t\t\tcfg.colorSpace->adjust(pixelFormat);\n>> >\n>> > Instead of doing this here, possibly call validateColorSpaces() outside\n>> > this `if` block ?\n>> >\n>> >> +\t\t}\n>> > \t\t\n>> > \t\tvalidateColorSpaces();\n>> >\n>> > and set status accordingly?\n>> \n>> Shouldn't validateColorSpaces be called outside the whole `for' cycle?\n>\n> Oh yes, I missed the loop. It should be called outside.\n>\n>> \n>> >>  \t\tif (!pipeConfig_->outputSizes.contains(cfg.size)) {\n>> >>  \t\t\tSize adjustedSize = pipeConfig_->captureSize;\n>> >> @@ -1314,11 +1332,16 @@ SimplePipelineHandler::generateConfiguration(Camera *camera, Span<const StreamRo\n>> >>  \t *\n>> >>  \t * \\todo Implement a better way to pick the default format\n>> >>  \t */\n>> >> -\tfor ([[maybe_unused]] StreamRole role : roles) {\n>> >> +\tfor (StreamRole role : roles) {\n>> >>  \t\tStreamConfiguration cfg{ StreamFormats{ formats } };\n>> >>  \t\tcfg.pixelFormat = formats.begin()->first;\n>> >>  \t\tcfg.size = formats.begin()->second[0].max;\n>> >>  \n>> >> +\t\tif (role == StreamRole::Raw)\n>> >> +\t\t\tcfg.colorSpace = ColorSpace::Raw;\n>> >\n>> > The benefit of validateColorSpaces(), it will set and ensure Raw\n>> > Colorspace is set for Raw streams and then this can be omitted here.\n>> > However, if you prefer keeping it here, that's should be fine as well.\n>> \n>> The idea here is that if a raw stream role is requested then the stream\n>> must be handled as raw, regardless of its format.  Setting colorSpace to\n>> Raw here and avoiding adjusting it in validation above (see the first\n>> comment) ensures the requirement.\n>\n> Do you mean this comment?\n>   - If raw role is requested, then the colour space must be raw.\n\nYes.\n\n> Given your explanation above that colorspace should must be raw, for\n> role=raw *regardless of its format* - is something I didn't consider\n> or inferred. The comment in the commit message should be expanded:\n>\n>   - If raw role is requested, then the colour space must be raw,                \n>     regardless of the stream format.\n\nOK.\n\n>> I don't say this idea is necessarily meaningful or correct but if it is\n>> then validateColorSpaces doesn't have this knowledge and could do\n>> something different than required.\n>\n> This idea is certainly not evident from the patch (atleast to me).\n> I would prefer to document it in a comment, possibly justifying\n> the rationale.\n\nI'll add a comment.\n\n>> >> +\t\telse if (data->swIsp_)\n>> >> +\t\t\tcfg.colorSpace = ColorSpace::Srgb;\n>> >> +\n>> >>  \t\tconfig->addConfiguration(cfg);\n>> >>  \t}\n>> >>  \n>> >> -- \n>> >> 2.50.0\n>> >> \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 EE5C2C3237\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  2 Jul 2025 08:46:51 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A5C8A68E30;\n\tWed,  2 Jul 2025 10:46:50 +0200 (CEST)","from us-smtp-delivery-124.mimecast.com\n\t(us-smtp-delivery-124.mimecast.com [170.10.129.124])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 91CDE61525\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  2 Jul 2025 10:46:48 +0200 (CEST)","from mail-wm1-f71.google.com (mail-wm1-f71.google.com\n\t[209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS\n\t(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n\tus-mta-639-Z3p24jAMOPuxcCCqzo8S6A-1; Wed, 02 Jul 2025 04:46:45 -0400","by mail-wm1-f71.google.com with SMTP id\n\t5b1f17b1804b1-4539b44e7b1so22509375e9.1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 02 Jul 2025 01:46:45 -0700 (PDT)","from mzamazal-thinkpadp1gen7.tpbc.csb\n\t(ip-77-48-47-2.net.vodafone.cz. [77.48.47.2])\n\tby smtp.gmail.com with ESMTPSA id\n\t5b1f17b1804b1-453a85ab932sm29848895e9.0.2025.07.02.01.46.42\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tWed, 02 Jul 2025 01:46:43 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=redhat.com header.i=@redhat.com\n\theader.b=\"Y8NsVku3\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1751446007;\n\th=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n\tto:to:cc:cc:mime-version:mime-version:content-type:content-type:\n\tin-reply-to:in-reply-to:references:references;\n\tbh=Gms6pjKffnx8EqcmJm5FI0XJJifMUbYc74Ptamj5+Kk=;\n\tb=Y8NsVku3+lGDApCBCrmk6OgL6V7zXyz0hGyYpEUYmFvk/pJ6i0J1501LomVRXv/ZSmam9B\n\tI7TobT/H4igFAgRf7SjsHJ7vuKaZpdM7pQte7lNfL8xVoIeuWAFsrYJptVetri6PcWChYH\n\tvsXwimFeBv8xgN3vzBLFa82lICND2tM=","X-MC-Unique":"Z3p24jAMOPuxcCCqzo8S6A-1","X-Mimecast-MFC-AGG-ID":"Z3p24jAMOPuxcCCqzo8S6A_1751446004","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1751446004; x=1752050804;\n\th=mime-version:user-agent:message-id:date:references:in-reply-to\n\t:subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date\n\t:message-id:reply-to;\n\tbh=Gms6pjKffnx8EqcmJm5FI0XJJifMUbYc74Ptamj5+Kk=;\n\tb=mkZZ73+MYY6DgN72lP1MHgMTMt2dB1MG6m+ZndF9uaHyZ0dtDOXaXr0eAfvMcpYjiK\n\tEdkXhoPQ+6G0/kqob9XFAE6Y8fiLak6rzWnwET78tZbwU2A4MvVMpVrPKjARmdLHMc+0\n\tp7AIsyKI6rEkkwuamYhFPORkRMZkxHOfyXR3Shg1zr9CQuPAchRkUhK5OVssUeaMlv9Z\n\tlqThMzQVMpVCGDwpkYfHGxfUvh+9Nm2PN2FqUGmyFC0hJHFWtn2eIPbwjHmD9QSXQtea\n\t6+ytssUIsvn7cPK0AqJXtmaWbCQVnrFwvztQCUZtk9bR57L65eCousEY39ITVxKk7zns\n\tLFCg==","X-Gm-Message-State":"AOJu0Yxpg2Ycf5NWdQKbJYvCPtk/MFO/WynLPRPmsd6gp7IQbXq6eG9Y\n\tqLx+chW/uN/WbECepnxe9sZiq0p2at1whlKkdbPC0sgPwVWmNi8wQvm9bBYYVBk7tSf6b22R/qK\n\tedtV39nksM/Hwi8uwf2/jQzEgIsZHhSd32Zv3aXF2lbnI1RALa0VcTxJUSWK4Ab++T6U5GqGLMk\n\tU=","X-Gm-Gg":"ASbGncuWy5J8JzIDcdOVkp/mhUjSNWc86Nn102db9e3QIOHCjas89eCrFjOIBjhXv0p\n\tZKa6sTyyRfx2nGVwQRFlMLRAftAYmpAIGMO0zV8wlk0FC5DzZbbay8IglWqzIO9w0AiqDNd+yey\n\to1gATYmkwuunWsJKidN4zpK0KhXzf+dO+5m5Omx+5uA4RvQJFteaM9zO2dJHJCgcRqe2jsT/Ejv\n\tjl4g9jS0ui8AnyWhWhZz6RVXgcBlhecvcwHDFlRxdimVgUHMiDlchlPzZM+6eNFtjrEw/HQ7Dbe\n\tov/6psSbVPdR7yfADXVANpRP0kHYI7CICSm6gGRMoj6Td3sgVCTuiKqNB0h11i6kuenW/9WtwkE\n\t=","X-Received":["by 2002:a05:600c:1c09:b0:43c:f70a:2af0 with SMTP id\n\t5b1f17b1804b1-454a38c6b35mr22244815e9.16.1751446004099; \n\tWed, 02 Jul 2025 01:46:44 -0700 (PDT)","by 2002:a05:600c:1c09:b0:43c:f70a:2af0 with SMTP id\n\t5b1f17b1804b1-454a38c6b35mr22244455e9.16.1751446003625; \n\tWed, 02 Jul 2025 01:46:43 -0700 (PDT)"],"X-Google-Smtp-Source":"AGHT+IG+oBzx+SqoJRlkH2x2KnnINL7HAPFNy7nYXJSTYy5kz9q8IT0G5eQ9LcAoYOjEWsOHeW0f6Q==","From":"Milan Zamazal <mzamazal@redhat.com>","To":"Umang Jain <uajain@igalia.com>","Cc":"libcamera-devel@lists.libcamera.org,  Laurent Pinchart\n\t<laurent.pinchart@ideasonboard.com>,\n\tKieran Bingham <kieran.bingham@ideasonboard.com>, =?utf-8?q?Barnab?=\n\t=?utf-8?b?w6FzIFDFkWN6ZQ==?=\n\t<barnabas.pocze@ideasonboard.com>, Paul Elder\n\t<paul.elder@ideasonboard.com>","Subject":"Re: [PATCH v7 01/12] libcamera: software_isp: Assign colour spaces\n\tin configurations","In-Reply-To":"<2rplhx5sg5tmpmvoekl2dxcaqv3qmjne55zmtxwprr3limlai2@bjiwrrnlp3aw>\n\t(Umang Jain's message of \"Tue, 1 Jul 2025 20:58:39 +0530\")","References":"<20250627113449.23106-1-mzamazal@redhat.com>\n\t<20250627113449.23106-2-mzamazal@redhat.com>\n\t<mre2r4iedik6tebpebeolnlxhn57onsobhgfvhk4cxsiwlrtye@tvz5m3xtxwyu>\n\t<85ldp83u89.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>\n\t<2rplhx5sg5tmpmvoekl2dxcaqv3qmjne55zmtxwprr3limlai2@bjiwrrnlp3aw>","Date":"Wed, 02 Jul 2025 10:46:42 +0200","Message-ID":"<85frff6kul.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","User-Agent":"Gnus/5.13 (Gnus v5.13)","MIME-Version":"1.0","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"Ak4dLhD53u6mYEvFcecE71lsS9r9ASkmOJz5uTZMQ8Y_1751446004","X-Mimecast-Originator":"redhat.com","Content-Type":"text/plain","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>"}}]