From patchwork Thu Feb 2 11:12:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthias Fend X-Patchwork-Id: 18230 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 2B9CCC3243 for ; Thu, 2 Feb 2023 11:13:07 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id EEEC6625E8; Thu, 2 Feb 2023 12:13:05 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1675336385; bh=BKrr5i+kBXbxctCnsZH5tPxNGb0HnL9JYU/Q/uFnfUQ=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=xcSknLY5yEQGtU9Ji6kkR9GKEX1NN3Ct7pkhcwnuV4YcC/nUD2c94R68BhjZUezii UU/E0OlncnfPzMRh54Jy0Ffv9inEEM0e0jUDmw5XoIm1s/xzA3TbX9MJyefvRpL3Ws Qrv9UvSq6NZe6IzCdcNbzlmgnNI0HxMfaaamP7JV06BfGt/4J83HZc4JF0jf0lw9Ou DwlmXOpD1EkYeREEZqht1gETrnqzH8mxVT6tTFQuzll+wqJ6IlC7sNEUAVhDeYQROD OvgQDn2rsGU35swIB0WQR1O2lpg0VbLf0xyBR957ASlsv13ykKNuCKy/ROzKCNM4vU lUlLR2RKArIYg== Received: from lx20.hoststar.hosting (lx20.hoststar.hosting [168.119.41.54]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 153B1625D8 for ; Thu, 2 Feb 2023 12:13:03 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=emfend.at header.i=@emfend.at header.b="Pu+oXIIu"; dkim-atps=neutral DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=emfend.at; s=mail; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=2emuifAjWvAGK6KVtV+1tAxEATiHMQL1KQuyfEROFFQ=; b=Pu+oXIIu72SJE0JlO3U9meAtcS mwxrEEiUfjQON+A8Bh9ABNBpE1bi1REx3Iim7l6Jkptb/BfqgxSn6j6oowRVlYZaR3Lo2epQDemi1 AQdfoLLr2NdYn5z7ZaWudd6DKwtt2dDFzy4fRFsqmiSFwIMBT/3UKSUdRbluriqFH6RU=; Received: from 194-208-208-245.tele.net ([194.208.208.245]:51050 helo=localhost.localdomain) by lx20.hoststar.hosting with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.93) (envelope-from ) id 1pNXWY-008Uhs-1n; Thu, 02 Feb 2023 12:13:02 +0100 To: libcamera-devel@lists.libcamera.org Date: Thu, 2 Feb 2023 12:12:46 +0100 Message-Id: <20230202111252.3366729-2-matthias.fend@emfend.at> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230202111252.3366729-1-matthias.fend@emfend.at> References: <20230202111252.3366729-1-matthias.fend@emfend.at> MIME-Version: 1.0 X-Spam-Score: -1.0 X-Spam-Bar: - X-Spam-Report: Spam detection software, running on the system "lx20.hoststar.hosting", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Hello, as mentioned on the mailing list some time ago, I was wondering how to use more complex optics together with libcamera IPAs. Currently, only optics with a VCM focus lens are considered in libcamera. With these, an absolute position is set and the lens is almost immediately at the new desired position. Pretty simple. For a s [...] Content analysis details: (-1.0 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP 0.0 TVD_RCVD_IP Message was received from an IP address 0.0 KAM_DMARC_STATUS Test Rule for DKIM or SPF Failure with Strict Alignment Subject: [libcamera-devel] [RFC PATCH 1/7] ipa: rkisp1: add basic camera lens support 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: Matthias Fend via libcamera-devel From: Matthias Fend Reply-To: Matthias Fend Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Adding basic support for lenses, as has been done similarly in other pipeline handlers. Parts of it will be changed later in the series, but the intended changes are more recognizable. Signed-off-by: Matthias Fend --- include/libcamera/ipa/rkisp1.mojom | 4 +++- src/libcamera/pipeline/rkisp1/rkisp1.cpp | 21 +++++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/include/libcamera/ipa/rkisp1.mojom b/include/libcamera/ipa/rkisp1.mojom index 1009e970..d33e93df 100644 --- a/include/libcamera/ipa/rkisp1.mojom +++ b/include/libcamera/ipa/rkisp1.mojom @@ -11,6 +11,7 @@ import "include/libcamera/ipa/core.mojom"; struct IPAConfigInfo { libcamera.IPACameraSensorInfo sensorInfo; libcamera.ControlInfoMap sensorControls; + libcamera.ControlInfoMap lensControls; }; interface IPARkISP1Interface { @@ -37,6 +38,7 @@ interface IPARkISP1Interface { interface IPARkISP1EventInterface { paramsBufferReady(uint32 frame); - setSensorControls(uint32 frame, libcamera.ControlList sensorControls); + setSensorControls(uint32 frame, libcamera.ControlList sensorControls, + libcamera.ControlList lensControls); metadataReady(uint32 frame, libcamera.ControlList metadata); }; diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp index 5f22a29d..d4fbcf4b 100644 --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp @@ -32,6 +32,7 @@ #include #include "libcamera/internal/camera.h" +#include "libcamera/internal/camera_lens.h" #include "libcamera/internal/camera_sensor.h" #include "libcamera/internal/delayed_controls.h" #include "libcamera/internal/device_enumerator.h" @@ -112,7 +113,8 @@ public: private: void paramFilled(unsigned int frame); void setSensorControls(unsigned int frame, - const ControlList &sensorControls); + const ControlList &sensorControls, + const ControlList &lensControls); void metadataReady(unsigned int frame, const ControlList &metadata); }; @@ -395,9 +397,20 @@ void RkISP1CameraData::paramFilled(unsigned int frame) } void RkISP1CameraData::setSensorControls([[maybe_unused]] unsigned int frame, - const ControlList &sensorControls) + const ControlList &sensorControls, + const ControlList &lensControls) { delayedCtrls_->push(sensorControls); + + CameraLens *lens = sensor_->focusLens(); + if (!lens) + return; + + if (lensControls.contains(V4L2_CID_FOCUS_ABSOLUTE)) { + const ControlValue &focusValue = lensControls.get(V4L2_CID_FOCUS_ABSOLUTE); + + lens->setFocusPosition(focusValue.get()); + } } void RkISP1CameraData::metadataReady(unsigned int frame, const ControlList &metadata) @@ -810,6 +823,10 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c) ipaConfig.sensorControls = data->sensor_->controls(); + CameraLens *lens = data->sensor_->focusLens(); + if (lens) + ipaConfig.lensControls = lens->controls(); + ret = data->ipa_->configure(ipaConfig, streamConfig, &data->controlInfo_); if (ret) { LOG(RkISP1, Error) << "failed configuring IPA (" << ret << ")";