{"id":21066,"url":"https://patchwork.libcamera.org/api/1.1/patches/21066/?format=json","web_url":"https://patchwork.libcamera.org/patch/21066/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20240830072554.180672-11-mzamazal@redhat.com>","date":"2024-08-30T07:25:46","name":"[v5,10/18] libcamera: software_isp: Call Algorithm::queueRequest","commit_ref":null,"pull_url":null,"state":"superseded","archived":false,"hash":"85950138c04a1d7be584d819062e87311eb4feac","submitter":{"id":177,"url":"https://patchwork.libcamera.org/api/1.1/people/177/?format=json","name":"Milan Zamazal","email":"mzamazal@redhat.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/21066/mbox/","series":[{"id":4548,"url":"https://patchwork.libcamera.org/api/1.1/series/4548/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=4548","date":"2024-08-30T07:25:36","name":"Software ISP refactoring","version":5,"mbox":"https://patchwork.libcamera.org/series/4548/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/21066/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/21066/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 178B2C32D8\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 30 Aug 2024 07:26:38 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 48339634DF;\n\tFri, 30 Aug 2024 09:26:37 +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 EDE9F634D5\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 30 Aug 2024 09:26:33 +0200 (CEST)","from mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com\n\t(ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63])\n\tby relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n\tcipher=TLS_AES_256_GCM_SHA384) id us-mta-478-Z5XhZ6AOO2K7T8GTfbSY9A-1;\n\tFri, 30 Aug 2024 03:26:30 -0400","from mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com\n\t(mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com\n\t[10.30.177.40])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\tkey-exchange X25519 server-signature RSA-PSS (2048 bits)\n\tserver-digest SHA256) (No client certificate requested)\n\tby mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTPS id D00061955D4F; Fri, 30 Aug 2024 07:26:29 +0000 (UTC)","from nuthatch.redhat.com (unknown [10.45.225.65])\n\tby mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTP id A424F19560A3; Fri, 30 Aug 2024 07:26:27 +0000 (UTC)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=redhat.com header.i=@redhat.com\n\theader.b=\"eLPy9df3\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1725002793;\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\tcontent-transfer-encoding:content-transfer-encoding:\n\tin-reply-to:in-reply-to:references:references;\n\tbh=QhxqDGmaspBPYM04rM9qZqhO81940aSHi9UFpNeLeDM=;\n\tb=eLPy9df3wB6D1h2SebVLN/iqT/3hoTm2R7T7TFTNimWmG0eZ4qYDvVb3asw/50MjRZkhI+\n\tgcM3wsOrr06mYTst2koGLRaIoFOq0pdNo4JDG3jiZv4pHINaKcl2kTWKQfjJttswOI0VKv\n\tR4nTblvE3A2NwV+I+JldcU7C14uOClQ=","X-MC-Unique":"Z5XhZ6AOO2K7T8GTfbSY9A-1","From":"Milan Zamazal <mzamazal@redhat.com>","To":"libcamera-devel@lists.libcamera.org","Cc":"Milan Zamazal <mzamazal@redhat.com>,\n\tUmang Jain <umang.jain@ideasonboard.com>,\n\tLaurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tDaniel Scally <dan.scally@ideasonboard.com>","Subject":"[PATCH v5 10/18] libcamera: software_isp: Call\n\tAlgorithm::queueRequest","Date":"Fri, 30 Aug 2024 09:25:46 +0200","Message-ID":"<20240830072554.180672-11-mzamazal@redhat.com>","In-Reply-To":"<20240830072554.180672-1-mzamazal@redhat.com>","References":"<20240830072554.180672-1-mzamazal@redhat.com>","MIME-Version":"1.0","X-Scanned-By":"MIMEDefang 3.0 on 10.30.177.40","X-Mimecast-Spam-Score":"0","X-Mimecast-Originator":"redhat.com","Content-Transfer-Encoding":"8bit","Content-Type":"text/plain; charset=\"US-ASCII\"; x-default=true","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>"},"content":"This patch adds Algorithm::queueRequest call for the defined algorithms.\nAs there are currently no control knobs in software ISP nor the\ncorresponding queueRequest call chain, the patch also introduces the\nqueueRequest methods and calls from the pipeline to the IPA.\n\nThis is preparation only since there are currently no Algorithm based\nalgorithms defined and no current software ISP algorithms support\ncontrol knobs.\n\nSigned-off-by: Milan Zamazal <mzamazal@redhat.com>\nReviewed-by: Umang Jain <umang.jain@ideasonboard.com>\nReviewed-by: Daniel Scally <dan.scally@ideasonboard.com>\n---\n include/libcamera/internal/software_isp/software_isp.h |  1 +\n include/libcamera/ipa/soft.mojom                       |  1 +\n src/ipa/simple/soft_simple.cpp                         |  9 +++++++++\n src/libcamera/pipeline/simple/simple.cpp               |  2 ++\n src/libcamera/software_isp/software_isp.cpp            | 10 ++++++++++\n 5 files changed, 23 insertions(+)","diff":"diff --git a/include/libcamera/internal/software_isp/software_isp.h b/include/libcamera/internal/software_isp/software_isp.h\nindex c5d5a46f..a3e3a9da 100644\n--- a/include/libcamera/internal/software_isp/software_isp.h\n+++ b/include/libcamera/internal/software_isp/software_isp.h\n@@ -73,6 +73,7 @@ public:\n \tint start();\n \tvoid stop();\n \n+\tvoid queueRequest(const uint32_t frame, const ControlList &controls);\n \tint queueBuffers(uint32_t frame, FrameBuffer *input,\n \t\t\t const std::map<const Stream *, FrameBuffer *> &outputs);\n \ndiff --git a/include/libcamera/ipa/soft.mojom b/include/libcamera/ipa/soft.mojom\nindex 6b049d20..0ca2869c 100644\n--- a/include/libcamera/ipa/soft.mojom\n+++ b/include/libcamera/ipa/soft.mojom\n@@ -23,6 +23,7 @@ interface IPASoftInterface {\n \tconfigure(IPAConfigInfo configInfo)\n \t\t=> (int32 ret);\n \n+\t[async] queueRequest(uint32 frame, libcamera.ControlList sensorControls);\n \t[async] processStats(uint32 frame,\n                              uint32 bufferId,\n                              libcamera.ControlList sensorControls);\ndiff --git a/src/ipa/simple/soft_simple.cpp b/src/ipa/simple/soft_simple.cpp\nindex 0ea62266..eb3bbd92 100644\n--- a/src/ipa/simple/soft_simple.cpp\n+++ b/src/ipa/simple/soft_simple.cpp\n@@ -78,6 +78,7 @@ public:\n \tint start() override;\n \tvoid stop() override;\n \n+\tvoid queueRequest(const uint32_t frame, const ControlList &controls) override;\n \tvoid processStats(const uint32_t frame, const uint32_t bufferId,\n \t\t\t  const ControlList &sensorControls) override;\n \n@@ -270,6 +271,14 @@ void IPASoftSimple::stop()\n {\n }\n \n+void IPASoftSimple::queueRequest(const uint32_t frame, const ControlList &controls)\n+{\n+\tIPAFrameContext &frameContext = context_.frameContexts.alloc(frame);\n+\n+\tfor (auto const &algo : algorithms())\n+\t\talgo->queueRequest(context_, frame, frameContext, controls);\n+}\n+\n void IPASoftSimple::processStats([[maybe_unused]] const uint32_t frame,\n \t\t\t\t [[maybe_unused]] const uint32_t bufferId,\n \t\t\t\t const ControlList &sensorControls)\ndiff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\nindex 834b33d9..ed50ab52 100644\n--- a/src/libcamera/pipeline/simple/simple.cpp\n+++ b/src/libcamera/pipeline/simple/simple.cpp\n@@ -1428,6 +1428,8 @@ int SimplePipelineHandler::queueRequestDevice(Camera *camera, Request *request)\n \tif (data->useConversion_)\n \t\tdata->conversionQueue_.push(std::move(buffers));\n \n+\tdata->swIsp_->queueRequest(request->sequence(), request->controls());\n+\n \treturn 0;\n }\n \ndiff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp\nindex 8f1c0f65..eda18947 100644\n--- a/src/libcamera/software_isp/software_isp.cpp\n+++ b/src/libcamera/software_isp/software_isp.cpp\n@@ -278,6 +278,16 @@ int SoftwareIsp::exportBuffers(const Stream *stream, unsigned int count,\n \treturn count;\n }\n \n+/**\n+ * \\brief Queue a request and process the control list from the application\n+ * \\param[in] frame The number of the frame which will be processed next\n+ * \\param[in] controls The controls for the \\a frame\n+ */\n+void SoftwareIsp::queueRequest(const uint32_t frame, const ControlList &controls)\n+{\n+\tipa_->queueRequest(frame, controls);\n+}\n+\n /**\n  * \\brief Queue buffers to Software ISP\n  * \\param[in] frame The frame number\n","prefixes":["v5","10/18"]}