From patchwork Mon Mar 28 17:36:12 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Umang Jain X-Patchwork-Id: 15579 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 22E87C3266 for ; Mon, 28 Mar 2022 17:36:28 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id C978A65633; Mon, 28 Mar 2022 19:36:27 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1648488987; bh=hGOqIaMwdiKcZFtziOzgybd1YGzn7f13YOYrJ6irdeA=; 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=fXC5XRM1w5bvYQZQHRbx5qYqZ3TQZG8QPacwNnQNqlVvUEsyCk52X/YGAIiE/k7aW oDCrxOqabBU9m+PpFEcO9lECiZX3WIt2KeiA62oykl4zH0QXEBl9OP9ug2WfBjFIZF Xq42wqgNmhw6OFRX7OO+VCAOsfBVHkCpZx7/gfQYI4+oVbqJZP3mBPB2etJz9yHFQN hpDsSnMCzk8aeANu2DXbpqOi9BU/+js9QBTTAYdZ2371Kkt4QoZ9iBr/dzsW50hQgq aACItUnqBxHHsPsfj7xSkw0Fd4OjshO9/6YvkjWJ2WCsHWOEmrCfsmoKzyQIyBoHKW BfPqvM/QVbcaw== Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 0613B65631 for ; Mon, 28 Mar 2022 19:36:26 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="LHVzQ5fx"; dkim-atps=neutral Received: from perceval.ideasonboard.com (unknown [IPv6:2401:4900:1f3e:6e7e:1ff:a5c2:a86e:ae1b]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 139382F7; Mon, 28 Mar 2022 19:36:24 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1648488985; bh=hGOqIaMwdiKcZFtziOzgybd1YGzn7f13YOYrJ6irdeA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LHVzQ5fxFbBQwvVDr1Zvg1DZ4LKEK3DaLEhUz4/k2n7L74Ii43nyW7UZ7p250J4XJ FZlJA7+mdqR4h2NbBvr6rLRJMCfHk5td+CPGTJfE50GflFF3G64yrQ2klz4LQocar1 ipBKy363MxcM/GX56ua+GDYC8vXsAUcb7e1JRR0w= To: libcamera-devel@lists.libcamera.org Date: Mon, 28 Mar 2022 23:06:12 +0530 Message-Id: <20220328173612.138332-3-umang.jain@ideasonboard.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220328173612.138332-1-umang.jain@ideasonboard.com> References: <20220328173612.138332-1-umang.jain@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v3 IPAIPU3 2/2] ipu3: Use the new IPAIPU3 interface 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: Umang Jain via libcamera-devel From: Umang Jain Reply-To: Umang Jain Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Use the new IPAIPU3 interface that migrates the event-based ops to dedication functions. Signed-off-by: Umang Jain --- ipu3.cpp | 108 +++++++++++++++++++++++-------------------------------- 1 file changed, 45 insertions(+), 63 deletions(-) diff --git a/ipu3.cpp b/ipu3.cpp index 6ab86e0..d02581d 100644 --- a/ipu3.cpp +++ b/ipu3.cpp @@ -49,13 +49,16 @@ public: void mapBuffers(const std::vector &buffers) override; void unmapBuffers(const std::vector &ids) override; - void processEvent(const IPU3Event &event) override; + + void processParamsBuffer(const uint32_t frame, const uint32_t bufferId) override; + void processControls(const uint32_t frame, const ControlList &controls) override; + void processStatsBuffer(const uint32_t frame, const int64_t frameTimestamp, + const uint32_t bufferId, const ControlList &sensorControls) override; private: void updateControls(const IPACameraSensorInfo &sensorInfo, const ControlInfoMap &sensorControls, ControlInfoMap *ipaControls); - void processControls(unsigned int frame, const ControlList &metadata); void runAiq(unsigned int frame); void fillParams(unsigned int frame, ipu3_uapi_params *params); void parseStatistics(unsigned int frame, @@ -321,54 +324,41 @@ void IPAIPU3::unmapBuffers(const std::vector &ids) } } -void IPAIPU3::processEvent(const IPU3Event &event) +void IPAIPU3::processControls([[maybe_unused]] unsigned int frame, + [[maybe_unused]] const ControlList &controls) { - switch (event.op) { - case EventProcessControls: { - processControls(event.frame, event.controls); - break; - } - case EventStatReady: { - auto it = buffers_.find(event.bufferId); - if (it == buffers_.end()) { - LOG(IPAIPU3, Error) << "Could not find stats buffer!"; - return; - } - - Span mem = it->second.maps()[0]; - const ipu3_uapi_stats_3a *stats = - reinterpret_cast(mem.data()); - - parseStatistics(event.frame, - event.frameTimestamp, - stats, - event.sensorControls); - break; - } - case EventFillParams: { - auto it = buffers_.find(event.bufferId); - if (it == buffers_.end()) { - LOG(IPAIPU3, Error) << "Could not find param buffer!"; - return; - } - - Span mem = it->second.maps()[0]; - ipu3_uapi_params *params = - reinterpret_cast(mem.data()); - - fillParams(event.frame, params); - break; - } - default: - LOG(IPAIPU3, Error) << "Unknown event " << event.op; - break; + /* \todo Start processing for 'frame' based on 'controls'. */ +} + +void IPAIPU3::processParamsBuffer(const uint32_t frame, const uint32_t bufferId) +{ + auto it = buffers_.find(bufferId); + if (it == buffers_.end()) { + LOG(IPAIPU3, Error) << "Could not find params buffer"; + return; } + + Span mem = it->second.maps()[0]; + ipu3_uapi_params *params = + reinterpret_cast(mem.data()); + + fillParams(frame, params); } -void IPAIPU3::processControls([[maybe_unused]] unsigned int frame, - [[maybe_unused]] const ControlList &controls) +void IPAIPU3::processStatsBuffer(const uint32_t frame, const int64_t frameTimestamp, + const uint32_t bufferId, const ControlList &sensorControls) { - /* \todo Start processing for 'frame' based on 'controls'. */ + auto it = buffers_.find(bufferId); + if (it == buffers_.end()) { + LOG(IPAIPU3, Error) << "Could not find stats buffer"; + return; + } + + Span mem = it->second.maps()[0]; + const ipu3_uapi_stats_3a *stats = + reinterpret_cast(mem.data()); + + parseStatistics(frame, frameTimestamp, stats, sensorControls); } void IPAIPU3::runAiq([[maybe_unused]] unsigned int frame) @@ -424,10 +414,7 @@ void IPAIPU3::fillParams(unsigned int frame, ipu3_uapi_params *params) setControls(frame); - IPU3Action op; - op.op = ActionParamFilled; - - queueFrameAction.emit(frame, op); + paramsBufferReady.emit(frame); } void IPAIPU3::parseStatistics(unsigned int frame, @@ -488,27 +475,22 @@ void IPAIPU3::parseStatistics(unsigned int frame, (sensorInfo_.pixelRate / 1e6); ctrls.set(controls::FrameDuration, frameDuration); - IPU3Action op; - op.op = ActionMetadataReady; - op.controls = ctrls; - - queueFrameAction.emit(frame, op); + metadataReady.emit(frame, ctrls); } void IPAIPU3::setControls(unsigned int frame) { - IPU3Action op; - op.op = ActionSetSensorControls; - - ControlList sensorCtrls(ctrls_); - sensorCtrls.set(V4L2_CID_EXPOSURE, static_cast(exposure_)); - sensorCtrls.set(V4L2_CID_ANALOGUE_GAIN, static_cast(gain_)); + ControlList ctrls(ctrls_); + ctrls.set(V4L2_CID_EXPOSURE, static_cast(exposure_)); + ctrls.set(V4L2_CID_ANALOGUE_GAIN, static_cast(gain_)); - op.sensorControls = sensorCtrls; + ControlList lensCtrls(ctrls_); + /* + * \todo: lensCtrls.set(V4L2_CID_FOCUS_ABSOLUTE, )); + */ - op.lensControls.set(V4L2_CID_FOCUS_ABSOLUTE, lensPosition_); - queueFrameAction.emit(frame, op); + setSensorControls.emit(frame, ctrls, lensCtrls); } } /* namespace ipa::ipu3 */