From patchwork Thu Mar 17 14:48:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Rauch X-Patchwork-Id: 15477 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 9D73ABD80A for ; Thu, 17 Mar 2022 14:48:50 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 01E1F604DC; Thu, 17 Mar 2022 15:48:50 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1647528530; bh=M01d2qBtL2YakMBJvrXcH/KV2rgaUnopAtIVVn/VOsI=; h=Date:To:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=3qQU0lCheG9vqm/7Y6tHqfnmMA5pk+JXpUyN1z/KK02NMuYWPYVVGgF/a2fV+KG+V 5GG5u4TUKN/ZjBoEX1+0B/dZDpClF3Gk+Z9+YMQOuWkzTGLERH6krFAuqgoS+yy/uJ mYjivb0VCwhbTDN1cNuzhtN/bhXroozEuA9OaOPPsK52VqAZg39HVV4ociZUaK2Ee7 QkCqZlNDCBktr1RaTdHEvqoqDBJtlf520TnPt5OOi6gz9VnnwGwI811SfHRAPANarI 8L/YR9wR8dp7IedznZYsuxlaaGoibJud1wjzy0cgeP5A3MuJE43qaEsSfMBgsYc2W+ ILlUONSBygYOA== Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 3D4A8601F8 for ; Thu, 17 Mar 2022 15:48:48 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=gmx.net header.i=@gmx.net header.b="TZED75rj"; dkim-atps=neutral DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1647528527; bh=M01d2qBtL2YakMBJvrXcH/KV2rgaUnopAtIVVn/VOsI=; h=X-UI-Sender-Class:Date:To:From:Subject; b=TZED75rjPd5OvTkaOLtsxr34PWCgCe7e9eKvMZ/HFKgtZPKMpwvflkq1WEyXpgEEl eMsuurWQ2EolOb6JYRhF7bjohutwp+qrqHQ4G8Y+uKxNfqSP+kffDQ25dkaZsKKJoT 24L59DjxDjrYxqTR1VsobFL4OEYGydwZ8tyAv0O0= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.1.209] ([92.30.191.207]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1M5wLT-1nRqMO3Gzj-007Ql6 for ; Thu, 17 Mar 2022 15:48:47 +0100 Message-ID: Date: Thu, 17 Mar 2022 14:48:47 +0000 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Content-Language: en-CA To: libcamera-devel@lists.libcamera.org X-Provags-ID: V03:K1:Rw+d3m3MUQKLmlBWRb4+1ohALRafNS5RenKqsHKGY/prxpbA6ln wNVzw9Tf7vOfMcJVKGYYg1Zx6zopIuraRU9nyGoU315Ronyac+pXjwp51uBb0vGx6aG7v5e qIdKurDo6OZ+SP9mpiBgyDioAv0o6P4NhbYkSwDWhcwWwo15YaWV7/ZXz7zwBjsfli3hqZz /DneSgi/b1gccCnqqgMOg== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:ZeqJ4Q8YqrM=:bZrX7xruIBqpc/F8oP8r/T ae/CRxVEVtyPAKn0wnEw/Q4rbOZqiq0hOavPBTB3fFC12sc/rHYs0Jpkyw3lPlWn6WLrtoyYI QHh6wiggET+QSJBJmLqPdWzWoucFGW+/vuHHLIRglHQp2ZLlILOTENkleKWRNG5INQcoOqhTt aTh85dsRUu9Fe0fY4HWwCgbNiFV4eKJgekqzuzov4I0mLvWJc47NYgRfTVGARqcVxy4uzkAxj 97BiObFNZUXgDq0AbHf2Of3D4N/9/a04qdje44o91wn2mPaVs17en7K+MEJXxsTCbblfvhFsH UAW1WQn53owc0hf5/qVp7SVsPDmaosCQKhYbF9jPGey+k6utTcfopBxt/9tz/Yzc5Pl+VeE7v bprmV4KYyAPTBV5i9DGV7jBnk4040gpFvaIcYc33KXbEzL8U+vY9088s2neIi0x6IIezJQfCb XQ6woOJCYsdT9OWTyOH5KTTgXpf/FBE4pLZFiv+/+9ER/i5OyCVovVt6GRg2Rv+iEqqeKc1AF TcWLAPmoSOtCSmEqhH0leVMxFNH1sUOJJmU5vWoMQslpt5vANKAAO2CtGB4MG/5Jiv1/Q2Kqb lvdP54qZfkWdpdtlEz3KxuSDHQIDSbkmx2SHD7w+CWMxMXoBx0xcjr7hJspcb7wIAu8BqT/O7 jLDRUizZYkDNPyYJ99wg+ZZMPUwOAqIuLW01ce1U4hjZoK8qFd0SJMvGMuW7Z7RsX7xsslhE2 5XvIdBcBSpxRvVDfFuqt3i+/k8Av/bqhwNqUx6GRys2fe4yTP4ZGjy0uhLQrANsGnrf3S8VS/ 06Fxl2lKc7L1QAdSGv2PIC9Qm3WRHzn5NDgDeOcE/Ss53pJd2rTheYXuWCfskuq7Szrl7jaiA RmLAO3luKyU5O8jQJMnC5SIws/GEHWsNoPEuXBlB7ojEqJLYTSEPmNDdA0awOs3CuIOtKf+kA 7VsR0+DVgJ3KOhm/5igGV/TLkRvRHeb04Dx6aEeIvjyBwgAh3xrmodhwpq6QUiumtJhG6pDYX DZ8YLNwBkGGSPljSqVBAc1X6EGaAhoRxuVSm8xEB/Mlcbi4o1zQbDqW9KR8LM+dNdpHx5ALFs ghpfSXcASiX3i8= Subject: [libcamera-devel] fix ControlInfo for Span Controls X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Christian Rauch via libcamera-devel From: Christian Rauch Reply-To: Christian Rauch Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Hello, The attached patch fixes the ControlInfo access of Span Control (see https://bugs.libcamera.org/show_bug.cgi?id=101). The ControlInfo for Spans was defined in scalar values (i.e. single values instead of arrays). Thus, while a Control was defined as Span, its corresponding ControlInfo was defined as scalar, causing access errors. Best, Christian From 13052bf04a0eccfc6a896bba47ae18c4ad8c6ebb Mon Sep 17 00:00:00 2001 From: Christian Rauch Date: Thu, 17 Mar 2022 01:58:10 +0000 Subject: [PATCH 1/3] fix ControlInfo for Span Controls Some control properties are typed with a Span to store an array of values. Currently those are ColourGains, SensorBlackLevels, ColourCorrectionMatrix and FrameDurationLimits. The value range and defaults in the ControlInfo of those Controls is currently defined as scalar. This prevents accessing the ControlInfo via the native Span type. By defining the ControlInfo in terms of Spans, we can avoid this issue. --- include/libcamera/ipa/raspberrypi.h | 52 ++++++++++++------- src/ipa/ipu3/ipu3.cpp | 6 +-- .../ipa_data_serializer_test.cpp | 8 +-- 3 files changed, 40 insertions(+), 26 deletions(-) diff --git a/include/libcamera/ipa/raspberrypi.h b/include/libcamera/ipa/raspberrypi.h index 7f705e49..fb5188a1 100644 --- a/include/libcamera/ipa/raspberrypi.h +++ b/include/libcamera/ipa/raspberrypi.h @@ -27,26 +27,38 @@ namespace RPi { * and the pipeline handler may be reverted so that it aborts when an * unsupported control is encountered. */ -static const ControlInfoMap Controls({ - { &controls::AeEnable, ControlInfo(false, true) }, - { &controls::ExposureTime, ControlInfo(0, 999999) }, - { &controls::AnalogueGain, ControlInfo(1.0f, 32.0f) }, - { &controls::AeMeteringMode, ControlInfo(controls::AeMeteringModeValues) }, - { &controls::AeConstraintMode, ControlInfo(controls::AeConstraintModeValues) }, - { &controls::AeExposureMode, ControlInfo(controls::AeExposureModeValues) }, - { &controls::ExposureValue, ControlInfo(0.0f, 16.0f) }, - { &controls::AwbEnable, ControlInfo(false, true) }, - { &controls::ColourGains, ControlInfo(0.0f, 32.0f) }, - { &controls::AwbMode, ControlInfo(controls::AwbModeValues) }, - { &controls::Brightness, ControlInfo(-1.0f, 1.0f) }, - { &controls::Contrast, ControlInfo(0.0f, 32.0f) }, - { &controls::Saturation, ControlInfo(0.0f, 32.0f) }, - { &controls::Sharpness, ControlInfo(0.0f, 16.0f, 1.0f) }, - { &controls::ColourCorrectionMatrix, ControlInfo(-16.0f, 16.0f) }, - { &controls::ScalerCrop, ControlInfo(Rectangle{}, Rectangle(65535, 65535, 65535, 65535), Rectangle{}) }, - { &controls::FrameDurationLimits, ControlInfo(INT64_C(1000), INT64_C(1000000000)) }, - { &controls::draft::NoiseReductionMode, ControlInfo(controls::draft::NoiseReductionModeValues) } - }, controls::controls); +static const ControlInfoMap Controls( + { { &controls::AeEnable, ControlInfo(false, true) }, + { &controls::ExposureTime, ControlInfo(0, 999999) }, + { &controls::AnalogueGain, ControlInfo(1.0f, 32.0f) }, + { &controls::AeMeteringMode, ControlInfo(controls::AeMeteringModeValues) }, + { &controls::AeConstraintMode, ControlInfo(controls::AeConstraintModeValues) }, + { &controls::AeExposureMode, ControlInfo(controls::AeExposureModeValues) }, + { &controls::ExposureValue, ControlInfo(0.0f, 16.0f) }, + { &controls::AwbEnable, ControlInfo(false, true) }, + { &controls::ColourGains, ControlInfo{ + Span({ 0, 0 }), + Span({ 32, 32 }), + Span({ 0, 0 }), + } }, + { &controls::AwbMode, ControlInfo(controls::AwbModeValues) }, + { &controls::Brightness, ControlInfo(-1.0f, 1.0f) }, + { &controls::Contrast, ControlInfo(0.0f, 32.0f) }, + { &controls::Saturation, ControlInfo(0.0f, 32.0f) }, + { &controls::Sharpness, ControlInfo(0.0f, 16.0f, 1.0f) }, + { &controls::ColourCorrectionMatrix, ControlInfo{ + Span({ -16, -16, -16, -16, -16, -16, -16, -16, -16 }), + Span({ 16, 16, 16, 16, 16, 16, 16, 16, 16 }), + Span({ 1, 0, 0, 0, 1, 0, 0, 0, 1 }), + } }, + { &controls::ScalerCrop, ControlInfo(Rectangle{}, Rectangle(65535, 65535, 65535, 65535), Rectangle{}) }, + { &controls::FrameDurationLimits, ControlInfo{ + Span({ 1000, 1000 }), + Span({ 1000000000, 1000000000 }), + Span({ 1000, 1000 }), + } }, + { &controls::draft::NoiseReductionMode, ControlInfo(controls::draft::NoiseReductionModeValues) } }, + controls::controls); } /* namespace RPi */ diff --git a/src/ipa/ipu3/ipu3.cpp b/src/ipa/ipu3/ipu3.cpp index 1ea2c898..e64fc2bb 100644 --- a/src/ipa/ipu3/ipu3.cpp +++ b/src/ipa/ipu3/ipu3.cpp @@ -267,9 +267,9 @@ void IPAIPU3::updateControls(const IPACameraSensorInfo &sensorInfo, frameDurations[i] = frameSize / (sensorInfo.pixelRate / 1000000U); } - controls[&controls::FrameDurationLimits] = ControlInfo(frameDurations[0], - frameDurations[1], - frameDurations[2]); + controls[&controls::FrameDurationLimits] = ControlInfo{ Span({ frameDurations[0], frameDurations[0] }), + Span({ frameDurations[1], frameDurations[1] }), + Span({ frameDurations[2], frameDurations[2] }) }; *ipaControls = ControlInfoMap(std::move(controls), controls::controls); } diff --git a/test/serialization/ipa_data_serializer_test.cpp b/test/serialization/ipa_data_serializer_test.cpp index d2050a86..5503cc8a 100644 --- a/test/serialization/ipa_data_serializer_test.cpp +++ b/test/serialization/ipa_data_serializer_test.cpp @@ -32,13 +32,15 @@ using namespace std; using namespace libcamera; -static const ControlInfoMap Controls = ControlInfoMap({ +static const ControlInfoMap Controls = ControlInfoMap( + { { &controls::AeEnable, ControlInfo(false, true) }, { &controls::ExposureTime, ControlInfo(0, 999999) }, { &controls::AnalogueGain, ControlInfo(1.0f, 32.0f) }, - { &controls::ColourGains, ControlInfo(0.0f, 32.0f) }, + { &controls::ColourGains, ControlInfo{ Span({ 0, 0 }), Span({ 32, 32 }), Span({ 0, 0 }) } }, { &controls::Brightness, ControlInfo(-1.0f, 1.0f) }, - }, controls::controls); + }, + controls::controls); namespace libcamera { -- 2.25.1