Patch Detail
Show a patch.
GET /api/1.1/patches/18673/?format=api
{ "id": 18673, "url": "https://patchwork.libcamera.org/api/1.1/patches/18673/?format=api", "web_url": "https://patchwork.libcamera.org/patch/18673/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/1.1/projects/1/?format=api", "name": "libcamera", "link_name": "libcamera", "list_id": "libcamera_core", "list_email": "libcamera-devel@lists.libcamera.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20230531143946.23571-3-naush@raspberrypi.com>", "date": "2023-05-31T14:39:46", "name": "[libcamera-devel,v1,2/2] ipa: rpi: Handle controls for mono variant sensors", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "1ba996decde16ae211924715e9938a28c2f81f2d", "submitter": { "id": 34, "url": "https://patchwork.libcamera.org/api/1.1/people/34/?format=api", "name": "Naushir Patuck", "email": "naush@raspberrypi.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/18673/mbox/", "series": [ { "id": 3897, "url": "https://patchwork.libcamera.org/api/1.1/series/3897/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=3897", "date": "2023-05-31T14:39:44", "name": "Mono sensor improvements", "version": 1, "mbox": "https://patchwork.libcamera.org/series/3897/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/18673/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/18673/checks/", "tags": {}, "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 5BD81C31E9\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 31 May 2023 14:39:51 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 1F0AA627D1;\n\tWed, 31 May 2023 16:39:51 +0200 (CEST)", "from mail-lf1-x12e.google.com (mail-lf1-x12e.google.com\n\t[IPv6:2a00:1450:4864:20::12e])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 9D7AE62763\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 31 May 2023 16:39:48 +0200 (CEST)", "by mail-lf1-x12e.google.com with SMTP id\n\t2adb3069b0e04-4f004cc54f4so6927665e87.3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 31 May 2023 07:39:48 -0700 (PDT)", "from localhost.localdomain ([93.93.133.154])\n\tby smtp.gmail.com with ESMTPSA id\n\tbf3-20020a0560001cc300b00307b5376b2csm6950706wrb.90.2023.05.31.07.39.46\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tWed, 31 May 2023 07:39:47 -0700 (PDT)" ], "DKIM-Signature": [ "v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1685543991;\n\tbh=7BZN1AlolWFBEMGDgGFilHATZjbmFpEyNl3QkaYxdDs=;\n\th=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:\n\tFrom;\n\tb=JYutwI9qi+Z5cp6Hzgn4DbKzVzA7uMZXfsJaJEUCOehPiydAVGn/Md83emhQQIRfu\n\tOLYnxedDbsS69TTsYAHvnaIp8ArtFrw5nIN7MpSfS0bgay7Mb7hIp//ArgCBVMt3pD\n\tKJH1ktCMleQtZhrcdYXK+QQ+dFsrH+vGrM7kSEBXVjlG96NDNnD+6+Ctjibim9FtP/\n\tDtiyldBbX2glAxREQQnO5Xbud4SD+VAB92i+5lgp+Yvzem2ucU3yBahepn3IxtsVwP\n\tpws3pfQ13nfaXiLUMJ/2jEjZDvs+wja0Zwgdq8ZNPXiEOjH8+8fymBXMV2/pRQRwy6\n\tFYXTpdUAiFkIA==", "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google; t=1685543987; x=1688135987;\n\th=content-transfer-encoding:mime-version:references:in-reply-to\n\t:message-id:date:subject:cc:to:from:from:to:cc:subject:date\n\t:message-id:reply-to;\n\tbh=tcqo6e3wIxKk44o7NyMRaUqwC8ijo2NlEHwDdfflmN8=;\n\tb=FWNEhpexzIrlSC6ViOIo3AnsRjui3NvExjMP2T8Br5ngqKvrRWRiGkGqoJ/vuEzpRg\n\tAiw28O7Obxj7je/AwVrMeyZo88GAh94VSHEryYQh7b9ngRShWbOQ/aKyESTOrhhxVcWm\n\tRqfZt2dtTJxQ+KHkSsCC7LnnD6vI2ioCbo8aIjkH1mVE5lDlZrCt1dniN3rvUkRI7DSZ\n\t9I0HIU8cC22c1v5L6CB0CNNpBKcYLWYexU69aYFaM/UwOilNqVWC2f3c0AZZpDo9DgYf\n\t6/cFihqNjKOy/602Xd5aHPyYK2xVigIRsHzmNEG8Kkfw8TSb7dpZMYv9s4oO6IEod0/a\n\tpS8Q==" ], "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected) header.d=raspberrypi.com\n\theader.i=@raspberrypi.com\n\theader.b=\"FWNEhpex\"; dkim-atps=neutral", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20221208; t=1685543987; x=1688135987;\n\th=content-transfer-encoding:mime-version:references:in-reply-to\n\t:message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc\n\t:subject:date:message-id:reply-to;\n\tbh=tcqo6e3wIxKk44o7NyMRaUqwC8ijo2NlEHwDdfflmN8=;\n\tb=JOUoYRskdG0D4ACraN/kLR7KxhEp1zaeWqkZx6IsN61xKOxh0n/A6WvEjCO0l55QJg\n\t/rJxt0/DK+whu0gp0OBH85AtT1bcTu+7qHuIOkxx7k8y7WRPlWhGw4lFVofU8MZy79cM\n\tpBWFNulbWnh1eD8m84oN+PoAGOZ9NuTgaa+Ktjd8tXbjycZZA0Ed7Ch5UY/m3LAlforq\n\tQQKWUnXbY3BCWtOUE7fbRzTp7TIqtnUYZnS00yZpZV8cRxaBJOaNsQLLXTRLdSGcQ2lY\n\teq0W3844UyyZjDVzEycjEEcOlxP/hCfPXR7PX9gmdQSBsJrTQvu5vVQXA8TJ5eS0G+cW\n\tlgnA==", "X-Gm-Message-State": "AC+VfDwsHWhkxpBEGF7UQZ1OyDO+QduaOcf282phP5KWzmCnCKhNZf9v\n\tNrNhKu97nH4S8kSWLw2q/cXLQ/BeBxyUF/1frXaQeQ==", "X-Google-Smtp-Source": "ACHHUZ6+dByuE2IphRNlk9Nv2glEW9bM5H65SGVwCWFheykryr4f+9et8HZNzxIbve8T2CBjnDk/sQ==", "X-Received": "by 2002:ac2:599e:0:b0:4f4:d83e:4134 with SMTP id\n\tw30-20020ac2599e000000b004f4d83e4134mr2626348lfn.57.1685543987420; \n\tWed, 31 May 2023 07:39:47 -0700 (PDT)", "To": "libcamera-devel@lists.libcamera.org", "Date": "Wed, 31 May 2023 15:39:46 +0100", "Message-Id": "<20230531143946.23571-3-naush@raspberrypi.com>", "X-Mailer": "git-send-email 2.34.1", "In-Reply-To": "<20230531143946.23571-1-naush@raspberrypi.com>", "References": "<20230531143946.23571-1-naush@raspberrypi.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Subject": "[libcamera-devel] [PATCH v1 2/2] ipa: rpi: Handle controls for mono\n\tvariant sensors", "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": "Naushir Patuck via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>", "Reply-To": "Naushir Patuck <naush@raspberrypi.com>", "Errors-To": "libcamera-devel-bounces@lists.libcamera.org", "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>" }, "content": "Do not advertise colour related controls (i.e. [A]WB, colour saturation)\nin the ControlInfoMap of available controls returned out to the\napplication.\n\nSilently fail these controls in the control handler in case applications\ndon't use the advertised ControlInfoMap to validate controls.\n\nAs a drive-by, don't advertise controls::ColourCorrectionMatrix in the\nControlInfoMap as it is not handled by the IPA.\n\nSigned-off-by: Naushir Patuck <naush@raspberrypi.com>\n---\n src/ipa/rpi/common/ipa_base.cpp | 34 ++++++++++++++++++++++++++++-----\n 1 file changed, 29 insertions(+), 5 deletions(-)", "diff": "diff --git a/src/ipa/rpi/common/ipa_base.cpp b/src/ipa/rpi/common/ipa_base.cpp\nindex 150fe433d0df..8de454637cfe 100644\n--- a/src/ipa/rpi/common/ipa_base.cpp\n+++ b/src/ipa/rpi/common/ipa_base.cpp\n@@ -60,19 +60,22 @@ const ControlInfoMap::Map ipaControls{\n \t{ &controls::AeConstraintMode, ControlInfo(controls::AeConstraintModeValues) },\n \t{ &controls::AeExposureMode, ControlInfo(controls::AeExposureModeValues) },\n \t{ &controls::ExposureValue, ControlInfo(-8.0f, 8.0f, 0.0f) },\n-\t{ &controls::AwbEnable, ControlInfo(false, true) },\n-\t{ &controls::ColourGains, ControlInfo(0.0f, 32.0f) },\n-\t{ &controls::AwbMode, ControlInfo(controls::AwbModeValues) },\n \t{ &controls::Brightness, ControlInfo(-1.0f, 1.0f, 0.0f) },\n \t{ &controls::Contrast, ControlInfo(0.0f, 32.0f, 1.0f) },\n-\t{ &controls::Saturation, ControlInfo(0.0f, 32.0f, 1.0f) },\n \t{ &controls::Sharpness, ControlInfo(0.0f, 16.0f, 1.0f) },\n-\t{ &controls::ColourCorrectionMatrix, ControlInfo(-16.0f, 16.0f) },\n \t{ &controls::ScalerCrop, ControlInfo(Rectangle{}, Rectangle(65535, 65535, 65535, 65535), Rectangle{}) },\n \t{ &controls::FrameDurationLimits, ControlInfo(INT64_C(33333), INT64_C(120000)) },\n \t{ &controls::draft::NoiseReductionMode, ControlInfo(controls::draft::NoiseReductionModeValues) }\n };\n \n+/* IPA controls handled conditionally, if the sensor is not mono */\n+const ControlInfoMap::Map ipaColourControls{\n+\t{ &controls::AwbEnable, ControlInfo(false, true) },\n+\t{ &controls::AwbMode, ControlInfo(controls::AwbModeValues) },\n+\t{ &controls::ColourGains, ControlInfo(0.0f, 32.0f) },\n+\t{ &controls::Saturation, ControlInfo(0.0f, 32.0f, 1.0f) },\n+};\n+\n /* IPA controls handled conditionally, if the lens has a focus control */\n const ControlInfoMap::Map ipaAfControls{\n \t{ &controls::AfMode, ControlInfo(controls::AfModeValues) },\n@@ -145,6 +148,8 @@ int32_t IpaBase::init(const IPASettings &settings, const InitParams ¶ms, Ini\n \n \t/* Return the controls handled by the IPA */\n \tControlInfoMap::Map ctrlMap = ipaControls;\n+\tif (!monoSensor_)\n+\t\tctrlMap.merge(ControlInfoMap::Map(ipaColourControls));\n \tif (lensPresent_)\n \t\tctrlMap.merge(ControlInfoMap::Map(ipaAfControls));\n \tresult->controlInfo = ControlInfoMap(std::move(ctrlMap), controls::controls);\n@@ -221,6 +226,9 @@ int32_t IpaBase::configure(const IPACameraSensorInfo &sensorInfo, const ConfigPa\n \t\tControlInfo(static_cast<int32_t>(mode_.minShutter.get<std::micro>()),\n \t\t\t static_cast<int32_t>(mode_.maxShutter.get<std::micro>()));\n \n+\tif (!monoSensor_)\n+\t\tctrlMap.merge(ControlInfoMap::Map(ipaColourControls));\n+\n \t/* Declare Autofocus controls, only if we have a controllable lens */\n \tif (lensPresent_)\n \t\tctrlMap.merge(ControlInfoMap::Map(ipaAfControls));\n@@ -781,6 +789,10 @@ void IpaBase::applyControls(const ControlList &controls)\n \t\t}\n \n \t\tcase controls::AWB_ENABLE: {\n+\t\t\t/* Silently ignore this control for a mono sensor. */\n+\t\t\tif (monoSensor_)\n+\t\t\t\tbreak;\n+\n \t\t\tRPiController::AwbAlgorithm *awb = dynamic_cast<RPiController::AwbAlgorithm *>(\n \t\t\t\tcontroller_.getAlgorithm(\"awb\"));\n \t\t\tif (!awb) {\n@@ -800,6 +812,10 @@ void IpaBase::applyControls(const ControlList &controls)\n \t\t}\n \n \t\tcase controls::AWB_MODE: {\n+\t\t\t/* Silently ignore this control for a mono sensor. */\n+\t\t\tif (monoSensor_)\n+\t\t\t\tbreak;\n+\n \t\t\tRPiController::AwbAlgorithm *awb = dynamic_cast<RPiController::AwbAlgorithm *>(\n \t\t\t\tcontroller_.getAlgorithm(\"awb\"));\n \t\t\tif (!awb) {\n@@ -820,6 +836,10 @@ void IpaBase::applyControls(const ControlList &controls)\n \t\t}\n \n \t\tcase controls::COLOUR_GAINS: {\n+\t\t\t/* Silently ignore this control for a mono sensor. */\n+\t\t\tif (monoSensor_)\n+\t\t\t\tbreak;\n+\n \t\t\tauto gains = ctrl.second.get<Span<const float>>();\n \t\t\tRPiController::AwbAlgorithm *awb = dynamic_cast<RPiController::AwbAlgorithm *>(\n \t\t\t\tcontroller_.getAlgorithm(\"awb\"));\n@@ -868,6 +888,10 @@ void IpaBase::applyControls(const ControlList &controls)\n \t\t}\n \n \t\tcase controls::SATURATION: {\n+\t\t\t/* Silently ignore this control for a mono sensor. */\n+\t\t\tif (monoSensor_)\n+\t\t\t\tbreak;\n+\n \t\t\tRPiController::CcmAlgorithm *ccm = dynamic_cast<RPiController::CcmAlgorithm *>(\n \t\t\t\tcontroller_.getAlgorithm(\"ccm\"));\n \t\t\tif (!ccm) {\n", "prefixes": [ "libcamera-devel", "v1", "2/2" ] }