From patchwork Sun May 3 11:40:02 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Robert Mader X-Patchwork-Id: 26600 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 E1B6CC32F6 for ; Sun, 3 May 2026 11:40:50 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 6AEB463025; Sun, 3 May 2026 13:40:50 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=collabora.com header.i=robert.mader@collabora.com header.b="KBYDheoR"; dkim-atps=neutral Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id BE3A862FEC for ; Sun, 3 May 2026 13:40:46 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; t=1777808442; cv=none; d=zohomail.com; s=zohoarc; b=Li5DxQq3fHJKK3hjZJEF3VJ6SP57sTY1E27zC+v+AhJv+UaAViIcDeqIwyAK+QT70B8d82qpZn3YixlGdTJE1519ruvzr8wKixV9nigj6Uhf89nglucdJnNbqiiEjGv+ub6L7oIojFr8Fn/xNWXAJi8jigQz5770FreGj3ODvOE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777808442; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=8egq/eZy44hk8/zGT2/aH9nsxoFEncEoCQc2nE+jqp4=; b=frYn3bQIZFALtq3YA0WhmzgX+XSyKoUCU81vner5Noi6+avtfjWZK9Hxu81dH7EzNcjtjScywB8SNn5uvB83MzcJccO6dU1UIkKjaH/wnwqOzGLTDeTR92SEFj6JDPDkPGiqi0Po0RuXvfZYpBkXdQ+g+I2S6q+5uYSKwHijVq4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=robert.mader@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1777808442; s=zohomail; d=collabora.com; i=robert.mader@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Message-Id:Reply-To; bh=8egq/eZy44hk8/zGT2/aH9nsxoFEncEoCQc2nE+jqp4=; b=KBYDheoRw0y2xT857SvsOUhNv8tO05MK8TJlGy94Det9A2R+DtZayOl1/wCJtmFt bZRbUu94aDkeGekw3eTC2NYmHHCyUb7gUP5RZ0z0PjFDNZ94U1QVutYL9hkzAfauexX Lnm0niIicyv8PWEbaYvTszSGFesczVJL7xBOOH6c= Received: by mx.zohomail.com with SMTPS id 1777808441776849.7051095646871; Sun, 3 May 2026 04:40:41 -0700 (PDT) From: Robert Mader To: libcamera-devel@lists.libcamera.org Cc: Robert Mader Subject: [PATCH 3/3] debayer_egl: Sync output buffer after processing stats Date: Sun, 3 May 2026 13:40:02 +0200 Message-ID: <20260503114002.139255-4-robert.mader@collabora.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260503114002.139255-1-robert.mader@collabora.com> References: <20260503114002.139255-1-robert.mader@collabora.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" Instead of waiting for the GPU to finish the output buffer *before* computing stats, do so afterwards. This allows work to happen in parallel on the GPU and CPU, potentially improving throughput and reducing latency. This, however, requires us to include stats computation into the debayer benchmark data. Signed-off-by: Robert Mader --- src/libcamera/software_isp/debayer_egl.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/libcamera/software_isp/debayer_egl.cpp b/src/libcamera/software_isp/debayer_egl.cpp index 624469947..7dae52648 100644 --- a/src/libcamera/software_isp/debayer_egl.cpp +++ b/src/libcamera/software_isp/debayer_egl.cpp @@ -525,8 +525,6 @@ int DebayerEGL::debayerGPU(FrameBuffer *input, FrameBuffer *output, std::vector< if (err != GL_NO_ERROR) { LOG(eGL, Error) << "Drawing scene fail " << err; return -ENODEV; - } else { - egl_.syncOutput(); } return 0; @@ -549,8 +547,6 @@ void DebayerEGL::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output goto error; } - bench_.finishFrame(); - metadata.planes()[0].bytesused = output->planes()[0].length; /* Calculate stats for the whole frame */ @@ -559,6 +555,9 @@ void DebayerEGL::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output stats_->processFrame(frame, 0, input); dmaSyncers.clear(); + egl_.syncOutput(); + bench_.finishFrame(); + outputBufferReady.emit(output); inputBufferReady.emit(input);