From patchwork Mon Jul 7 07:53:34 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Stefan Klug X-Patchwork-Id: 23743 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 66FA8C3237 for ; Mon, 7 Jul 2025 07:54:17 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 9D80768E7F; Mon, 7 Jul 2025 09:54:15 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="Sx8dac5b"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id E1F5168E66 for ; Mon, 7 Jul 2025 09:54:12 +0200 (CEST) Received: from ideasonboard.com (unknown [IPv6:2a00:6020:448c:6c00:c79f:85df:e7f5:4c31]) by perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id 22881526; Mon, 7 Jul 2025 09:53:46 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1751874826; bh=OpNvVL51nFA3EpAdHxnwf384wjJ6wxarcZ64VGTxHoU=; h=From:To:Cc:Subject:Date:From; b=Sx8dac5biEWlm9JiWkxpy6WQQcCP0g29GpGOxaQSQncSxC33uGUsVd2JTuv/d7VmI Bwk6X4Ma5lveScvciJ5L4sWmXQzf4WmtjNeXXphaU+Bt5t1tZIJ7D7W9P5Nf6LyzCN 9Dz8xWaa4Uabv2T3oZnLQy1laJs6aJtUcjY8/aM4= From: Stefan Klug To: libcamera-devel@lists.libcamera.org Cc: Stefan Klug Subject: [PATCH v2 0/5] rkisp1: Allow usage of more than 4 buffers Date: Mon, 7 Jul 2025 09:53:34 +0200 Message-ID: <20250707075400.9079-1-stefan.klug@ideasonboard.com> X-Mailer: git-send-email 2.48.1 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" Hi all, In the rkisp1 pipeline the value of StreamConfiuration.bufferCount is reset to 4 on validate(). This effectively limits the number of buffers that are in the loop to 4. As soon as the consumers (gstream/pipewire...) of the buffers need more than 1 buffer at a time, we start to see frame drops. Sven resurrected an old series [1] that solves the issue at the expense of an additional control and breaking changes in the API. In the IoB code camp two weeks ago there were some discussions regarding improvements in the rkisp1 regulation and per-frame-control (PFC). PFC has been an ongoing topic for quite some time now and it seems to slowly converge. Still we were hesitant in breaking the API or introducing new controls before the overall concepts have stabilized enough. To mitigate the pain mentioned above we came up with a minimal changeset that allows to request more than 4 buffers. Only 4 (or the pipeline depth reported by the pipeline) buffers are queued into the device. This has the same benefits as [1] but doesn't require an API break. Updates in Version 1 of the series (after the RFC): - Included the feedback from reviews of the RFC (For etails see the chaneglog in the individual patches) - Included two patches with fixes from Sven an Kieran - I modified patch (6/6) from Kieran a bit after the review comment from Laurent. @Kieran could you have a look at that as I don't have a easy way to replicate the issue? Ideally I would like to merge that patch into patch 2/6 as it fixes an issue introduced there. For now I left it separate for easier review. Updates in v2: - Fixed segfault due to wrong lambda capturing - Fixed ASSERT dues to recursive call of doQueueRequests in virtual pipeline - Improved documentation - Squashed patch 6 into patch 2 Best regards, Stefan NĂ­colas F. R. A. Prado (1): libcamera: pipeline: rkisp1: Don't rely on bufferCount Stefan Klug (4): libcamera: pipeline_handler: Move waitingRequests_ into camera class libcamera: pipeline_handler: Allow to limit the number of queued requests pipeline: rkisp1: Limit the maximum number of buffers queued in pipeline: rkisp1: Properly handle the bufferCount set in the stream configuration include/libcamera/internal/camera.h | 2 + include/libcamera/internal/pipeline_handler.h | 9 ++- src/libcamera/camera.cpp | 9 +++ src/libcamera/pipeline/rkisp1/rkisp1.cpp | 28 +++++--- src/libcamera/pipeline/rkisp1/rkisp1_path.cpp | 7 +- src/libcamera/pipeline/rkisp1/rkisp1_path.h | 4 +- src/libcamera/pipeline_handler.cpp | 70 +++++++++++++++---- 7 files changed, 90 insertions(+), 39 deletions(-)