{"id":24770,"url":"https://patchwork.libcamera.org/api/1.1/patches/24770/?format=json","web_url":"https://patchwork.libcamera.org/patch/24770/","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":"<20251024085130.995967-5-stefan.klug@ideasonboard.com>","date":"2025-10-24T08:50:28","name":"[v1,04/35] libcamera: delayed_controls: Queue noop when needed, not before","commit_ref":null,"pull_url":null,"state":"superseded","archived":false,"hash":"1b00851a68a898988bff78503b2b72853ed99f48","submitter":{"id":184,"url":"https://patchwork.libcamera.org/api/1.1/people/184/?format=json","name":"Stefan Klug","email":"stefan.klug@ideasonboard.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/24770/mbox/","series":[{"id":5524,"url":"https://patchwork.libcamera.org/api/1.1/series/5524/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=5524","date":"2025-10-24T08:50:24","name":"rkisp1: pipeline rework for PFC","version":1,"mbox":"https://patchwork.libcamera.org/series/5524/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/24770/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/24770/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 5FB5BC3259\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 24 Oct 2025 08:51:50 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 2871B6089B;\n\tFri, 24 Oct 2025 10:51:50 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id A27CB6086F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 24 Oct 2025 10:51:48 +0200 (CEST)","from ideasonboard.com (unknown\n\t[IPv6:2a00:6020:448c:6c00:7edc:62f4:c118:1549])\n\tby perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id 2DA331AC5; \n\tFri, 24 Oct 2025 10:50:02 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"WlrBGwyc\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1761295803;\n\tbh=0RNLWOI7Kr+6RucCxL2v52hvZHMXiHYlDf0dDuYyE4s=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=WlrBGwycuwU1OZI9Z4uHDUerLTkb1wgtrBgV6pWOBr1TLoZmtgj1vA18QLsc1kIph\n\tQusVn0fTYN2QkStUIoNBBFizzH5tuo6DmXsZCwDeYUVpRfLmAJWVuo/JFKQ131c8uo\n\tNw2+TriF59zEM8yuYPpNcFxXXbnVApe5hqaJMiEg=","From":"Stefan Klug <stefan.klug@ideasonboard.com>","To":"libcamera-devel@lists.libcamera.org","Cc":"Stefan Klug <stefan.klug@ideasonboard.com>","Subject":"[PATCH v1 04/35] libcamera: delayed_controls: Queue noop when\n\tneeded, not before","Date":"Fri, 24 Oct 2025 10:50:28 +0200","Message-ID":"<20251024085130.995967-5-stefan.klug@ideasonboard.com>","X-Mailer":"git-send-email 2.48.1","In-Reply-To":"<20251024085130.995967-1-stefan.klug@ideasonboard.com>","References":"<20251024085130.995967-1-stefan.klug@ideasonboard.com>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","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":"A no-op is queued when DelayedControls runs out of controls after a\nsuccessful applyControls(). But after applyControls() there is still\nsome time left for new controls to be pushed until the next call to\napplyControls(). To fix that, move the no-op push to the beginning of\napplyContols().\n\nSigned-off-by: Stefan Klug <stefan.klug@ideasonboard.com>\n---\n src/libcamera/delayed_controls.cpp | 14 ++++++++------\n 1 file changed, 8 insertions(+), 6 deletions(-)","diff":"diff --git a/src/libcamera/delayed_controls.cpp b/src/libcamera/delayed_controls.cpp\nindex 044c6c7325e7..67213fe87d53 100644\n--- a/src/libcamera/delayed_controls.cpp\n+++ b/src/libcamera/delayed_controls.cpp\n@@ -272,6 +272,14 @@ void DelayedControls::applyControls(uint32_t sequence)\n {\n \tLOG(DelayedControls, Debug) << \"frame \" << sequence << \" started\";\n \n+\twhile (queueCount_ - 1 < sequence) {\n+\t\tLOG(DelayedControls, Warning)\n+\t\t\t<< \"Queue is empty, auto queue no-op.\" << queueCount_;\n+\t\tpush(queueCount_, {});\n+\t}\n+\n+\twriteCount_ = sequence;\n+\n \t/*\n \t * Create control list peeking ahead in the value queue to ensure\n \t * values are set in time to satisfy the sensor delay.\n@@ -312,12 +320,6 @@ void DelayedControls::applyControls(uint32_t sequence)\n \n \twriteCount_ = sequence + 1;\n \n-\twhile (writeCount_ > queueCount_) {\n-\t\tLOG(DelayedControls, Warning)\n-\t\t\t<< \"Queue is empty, auto queue no-op.\";\n-\t\tpush(queueCount_, {});\n-\t}\n-\n \tdevice_->setControls(&out);\n }\n \n","prefixes":["v1","04/35"]}