From patchwork Wed Dec 1 10:15:07 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Plowman X-Patchwork-Id: 14954 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 2314DC3250 for ; Wed, 1 Dec 2021 10:15:23 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id B597360726; Wed, 1 Dec 2021 11:15:21 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=raspberrypi.com header.i=@raspberrypi.com header.b="ES6MRyMV"; dkim-atps=neutral Received: from mail-wm1-x32c.google.com (mail-wm1-x32c.google.com [IPv6:2a00:1450:4864:20::32c]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 802D96011D for ; Wed, 1 Dec 2021 11:15:19 +0100 (CET) Received: by mail-wm1-x32c.google.com with SMTP id az34-20020a05600c602200b0033bf8662572so741613wmb.0 for ; Wed, 01 Dec 2021 02:15:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=raspberrypi.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+5tbuXZiLzJgDNl3HF0j/KsQSSn76KepjHhFHoG2/N0=; b=ES6MRyMVTxgpba6yzEUFw7Vb3a0979G0PcTAPjBxFxwln3N+MB8XXxL8SBiJ5jLS6Z OJsI0i+3FG2cCMc9HgnMu7kkA0p2Y2x1XCpHMma9thzIwx0KMEEdxxyKyx7mnd7ZknYX 4W8KbZHCcPwlhvqzfqxEXYvXNSzFo+OVXUn6wEqQvwtsDqSbqK9OXELZOI5f6908a3WS QVhZ20hy60nhRA0XGHB0gBv+f3uJ/Qpew/U9g8K3Az+4evHuy0dwyu1hvNx5YA8t4rW+ 61jWbVh86dmH2OKzGbaDiO7v76I9zqYvFLLzsS48zPyus75BjjxlNPUXhW8862Ngoq2K WBgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+5tbuXZiLzJgDNl3HF0j/KsQSSn76KepjHhFHoG2/N0=; b=btimOorGcxQBkWM+gMO7tRqjtDOkJ+Ii28CwJClzB5KbqYc83zXzBCi7F0RY/AvFgo cFugJ0Sc25JMZ7RpQV2I+vl3yV7FNNlcaen0f/+RB0Jd9QPnn1LGWudL/97RKs+IhXd5 4XqEMiS4+eC5TGaVKg2nJQ2Ddy/9Z23t4X0a8qEOYJpSp2WOsun9deOPMp4dhiF4j/dY kSfHUK/bmB/NqHcIH/2MrWIBF8lyaVEXqzwrlWGF+RTg22ERNh9ivBVrMcR4tmtHpYhS dAGqzK/PUXnZyzKF3OQtuJaiAp/zj54zgyYB5OUFZyAaT60mRISkSHI7PasLMsAukYoq /bnA== X-Gm-Message-State: AOAM531+7MnaPac9iCnhblLW20e2O1qvfvQ5/jebankWPmHFrCDjFxYH d6eF+r0nXVhqQQCrwkiiiceAKstETezYEbkv X-Google-Smtp-Source: ABdhPJxoxN2gvYiSz4KVvTvGyesZOFYsJliTDYeKSWhW5okpEel+gOsIEI+gdMfgV3AJjUt81ooHUA== X-Received: by 2002:a05:600c:1987:: with SMTP id t7mr5716432wmq.24.1638353719007; Wed, 01 Dec 2021 02:15:19 -0800 (PST) Received: from pi4-davidp.pitowers.org ([2a00:1098:3142:14:e4a2:3070:eea4:e434]) by smtp.gmail.com with ESMTPSA id z18sm18815535wrq.11.2021.12.01.02.15.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Dec 2021 02:15:18 -0800 (PST) From: David Plowman To: libcamera-devel@lists.libcamera.org Date: Wed, 1 Dec 2021 10:15:07 +0000 Message-Id: <20211201101508.10619-2-david.plowman@raspberrypi.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211201101508.10619-1-david.plowman@raspberrypi.com> References: <20211201101508.10619-1-david.plowman@raspberrypi.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 1/2] pipeline: raspberrypi: Fix under-allocation of embedded data buffers 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" The code was reducing the number of raw stream buffers allocated when the application is providing some of its own. However, it was not taking account of the fact that the application cannot supply embedded data buffers, so it must always allocate a reasonable minimum number of these buffers (possibly more than the number of raw stream buffers) to prevent frame drops. Signed-off-by: David Plowman Reviewed-by: Kieran Bingham Reviewed-by: Naushir Patuck --- .../pipeline/raspberrypi/raspberrypi.cpp | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp index e31fa3b2..045725dd 100644 --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp @@ -1248,18 +1248,25 @@ int PipelineHandlerRPi::prepareBuffers(Camera *camera) /* Decide how many internal buffers to allocate. */ for (auto const stream : data->streams_) { unsigned int numBuffers; - - if (stream == &data->unicam_[Unicam::Image] || - stream == &data->unicam_[Unicam::Embedded]) { + /* + * For Unicam, allocate a minimum of 4 buffers as we want + * to avoid any frame drops. + */ + constexpr unsigned int minBuffers = 4; + if (stream == &data->unicam_[Unicam::Image]) { /* - * For Unicam, allocate a minimum of 4 buffers as we want - * to avoid any frame drops. If an application has configured - * a RAW stream, allocate additional buffers to make up the - * minimum, but ensure we have at least 2 sets of internal - * buffers to use to minimise frame drops. + * If an application has configured a RAW stream, allocate + * additional buffers to make up the minimum, but ensure + * we have at least 2 sets of internal buffers to use to + * minimise frame drops. */ - constexpr unsigned int minBuffers = 4; numBuffers = std::max(2, minBuffers - numRawBuffers); + } else if (stream == &data->unicam_[Unicam::Embedded]) { + /* + * Embedded data buffers are (currently) for internal use, + * so allocate the minimum required to avoid frame drops. + */ + numBuffers = minBuffers; } else { /* * Since the ISP runs synchronous with the IPA and requests,