From patchwork Mon May 26 21:42:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Klug X-Patchwork-Id: 23447 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 C7E45C31E9 for ; Mon, 26 May 2025 21:42:46 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 30FF368DA6; Mon, 26 May 2025 23:42:46 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="DKtPcP5t"; dkim-atps=neutral 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 1A91B68DA3 for ; Mon, 26 May 2025 23:42:42 +0200 (CEST) Received: from ideasonboard.com (tmo-070-11.customers.d1-online.com [80.187.70.11]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 720157EA; Mon, 26 May 2025 23:42:17 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1748295737; bh=BNznKZkaSa88fwQKn0CvSMYDEw7MWg8RTSpdBw20qIE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DKtPcP5ti7mv0ZC2ncXEBU2Ls9TLMqyqSIsBs5LP8vOyNaTk1kTfI8AbH7F7psCrE 7Dnzj3si8tta6A5m18POiGfH9qQr0gxL1UsLPKP2aLAZIyJucjbXPhS6yMq4bjJ+yu YFP9yQphyzXUq6aCPLbR8lFIPo8VC3qVq1Y1VimQ= From: Stefan Klug To: libcamera-devel@lists.libcamera.org Cc: Stefan Klug Subject: [RFC PATCH 2/4] libcamera: internal: Allow to limit the number of queued requests Date: Mon, 26 May 2025 23:42:16 +0200 Message-ID: <20250526214224.13631-3-stefan.klug@ideasonboard.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250526214224.13631-1-stefan.klug@ideasonboard.com> References: <20250526214224.13631-1-stefan.klug@ideasonboard.com> MIME-Version: 1.0 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: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Allow pipeline handler classes to limit the maximum number of requests that get queued using queueRequestDevice(). Signed-off-by: Stefan Klug --- include/libcamera/internal/pipeline_handler.h | 5 +++++ src/libcamera/pipeline_handler.cpp | 3 +++ 2 files changed, 8 insertions(+) diff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h index dedc29e815fb..86b86d5971dc 100644 --- a/include/libcamera/internal/pipeline_handler.h +++ b/include/libcamera/internal/pipeline_handler.h @@ -79,6 +79,11 @@ protected: virtual bool acquireDevice(Camera *camera); virtual void releaseDevice(Camera *camera); + virtual unsigned int maxQueuedRequestsDevice() const + { + return std::numeric_limits::max(); + } + CameraManager *manager_; private: diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp index 14d8602e67d8..1853bca71371 100644 --- a/src/libcamera/pipeline_handler.cpp +++ b/src/libcamera/pipeline_handler.cpp @@ -490,6 +490,9 @@ void PipelineHandler::doQueueRequests() Camera::Private *data = camera->_d(); while (!data->waitingRequests_.empty()) { + if (data->queuedRequests_.size() == maxQueuedRequestsDevice()) + break; + Request *request = data->waitingRequests_.front(); if (!request->_d()->prepared_) break;