From patchwork Mon Feb 16 19:02:03 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans de Goede X-Patchwork-Id: 26166 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 F37DDC3240 for ; Mon, 16 Feb 2026 19:02:16 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 774DE62209; Mon, 16 Feb 2026 20:02:16 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.b="DVMA2GQN"; dkim=pass (2048-bit key; unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="bDPt1sWl"; dkim-atps=neutral Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 462E5621FD for ; Mon, 16 Feb 2026 20:02:13 +0100 (CET) Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 61GH4VBZ985305 for ; Mon, 16 Feb 2026 19:02:11 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=6rYZ4DZgBGf tLzZQ7ANPf59s8EG5sl99CSqwra87u9Y=; b=DVMA2GQNY4y+d2kruLmyfWQWZvZ 2YuaOVe5siLrv8u/mze/s5gdPZK9p0InIrosLSpc6BRM5QTbIlh/3FSlyQtSlJRZ Oe6q/bdtFMKavnun7v1vzD0ACi5Ski+ITDoYjNGJQsWquUsGh39ltaMgNH6VKDTJ WeIrUhSeFC79O36eA7FBL9rVQHv3Ie/ahWnLR/P/70FVRt6qaKcvTyvmC9FeXWf7 xno/Ub3YY8B+/MsZVVdmKXIUXdZA/nabP7dfJYPhsqHEoqn55T4WqYcRgPfSKEEo BYow9XQQKQqvzl91CLF7olPnDGsj1/3cKsLX7W2RW5xdNrPA1fOFxFfNSXQ== Received: from mail-vk1-f198.google.com (mail-vk1-f198.google.com [209.85.221.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cc7ap08mj-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 16 Feb 2026 19:02:11 +0000 (GMT) Received: by mail-vk1-f198.google.com with SMTP id 71dfb90a1353d-567503c3dbdso5295695e0c.2 for ; Mon, 16 Feb 2026 11:02:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1771268530; x=1771873330; darn=lists.libcamera.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=6rYZ4DZgBGftLzZQ7ANPf59s8EG5sl99CSqwra87u9Y=; b=bDPt1sWlbLKu9eB6G85v3Q6xX9Aqr6vS4fko9MTm/rXxRirVRz9n0ggfRyLhl8xOhJ gEr9uz4xo8+OA9yrz3lYuynIFlYVEINSwXK2zFBMqhnZ4pnn0EQdCHocp9bD9js2sPCB gYUAa/8Ib5OheygC1HjcalLO4vt610i6lg6bMk105EZnkeFNvdc8vaeYOEpgCfaHer6T rJwERWuWdc6at4jE6YhRbUJBSWn67bej4t6EwxUIg/2+dHp4OwRy0oGbQU2qYDkfgXL5 VaNtqxbON+KjMquTCGJQ2f7p7gZFsPRXZLP2N/T9w92+IZfHXPcSonG3kU/NfBgP1mlQ 39Ww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771268530; x=1771873330; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=6rYZ4DZgBGftLzZQ7ANPf59s8EG5sl99CSqwra87u9Y=; b=HsrkD6STa6AqzFFUDgOBOYqDRvTklt7C4W+pNf99qqS+n2+fj3f1VxE2c9Kp5EaA9i /Nvo2ppEQcfJOBTNjWCyE6Q9q64RoO5vm0qIAIAv7fIINQaWaysi/5e3a3XWrDv0JHk4 4RDLUwGWQWHoCWwkdoEp5k1MkAL/ZEp9jM9++3C9p1UfH3PicTIKm34nHii+liHoUnsQ xBQivBadr9I53JzxVQfxM9QP418c2mfR8bfBTN4cneeiknEjwklVE5V/jilyoY5BWchM ChwLwPdenrDtXg+4HCks7vNRrznMnsNen0KMDeFy1BUKWLL0e6kZwhTrm83wuwwjvOTI oQRQ== X-Gm-Message-State: AOJu0YyMZG9qS/6PAT1RP3JJtfvnnVb0BOrD2UCGkj3h90CxV/s/jd62 anhe/4t8G9PX25+fc3GZ9Gi+0pbnF++zEpywwY2f4/pufcpHVzS0p6ZTltkKt8U1FGlWbX0gxvR lGwihDNCo9DpgK1wrg/68w4WnxXCcm9LUflCsUhXL+mYQ1Zuc1Zy8e4+2VowimrxVa29kmqt6n+ Q6sGkYxBMv X-Gm-Gg: AZuq6aI/3GJYYohKjpjcbjcUpoSzTgMjENrHFzSaGp0fT+zp53uMXvSammTnkF6725l kfKGjsq3GXQ9JKC2tX+iP3Bj/YYJOaMV0q0QvNPOaDYDkzAVmNNYpCBcuvwti1zX8t1gjou5Fcb B1/4IRRiBKyH+WCfIniqXaNfZynzHpOzx92ppABI+YjEUVsmgPLYcydXvlLngjwXwx2lFJdeH1c p8/zSgZLQiINgegFco4q3tqGIPKUwx8yP8HhQhv6nbl33h87GAvFEVCHGQIPYF1XeVlEL6iaS1F r7DtVLxTfbO6wUwton8KxIphq9l8jXFLviXVgIqgNkyfG37vRxxTEzRvoVK/59Gmcmen85OKtKB OjqwGgc3eIauM2SMOzX+Sk13poHf7Vl6Y2pZnuOvTGlsNnuX3CV1ocOi4kZgBZlI2WTjF9qWuXn /pFaQABmdtm76RmD6pT1tH6E7yuO9efkzYtjt/ X-Received: by 2002:a05:6122:32cb:b0:559:5ef5:b196 with SMTP id 71dfb90a1353d-56889bf9467mr2270160e0c.13.1771268530162; Mon, 16 Feb 2026 11:02:10 -0800 (PST) X-Received: by 2002:a05:6122:32cb:b0:559:5ef5:b196 with SMTP id 71dfb90a1353d-56889bf9467mr2270129e0c.13.1771268529692; Mon, 16 Feb 2026 11:02:09 -0800 (PST) Received: from shalem (2001-1c00-0c32-7800-5bfa-a036-83f0-f9ec.cable.dynamic.v6.ziggo.nl. [2001:1c00:c32:7800:5bfa:a036:83f0:f9ec]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8fc735e587sm276698966b.2.2026.02.16.11.02.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 11:02:09 -0800 (PST) From: Hans de Goede To: libcamera-devel@lists.libcamera.org, Milan Zamazal Cc: Hans de Goede Subject: [PATCH 4/5] software_isp: debayer_cpu: Select process inner loop by function pointer Date: Mon, 16 Feb 2026 20:02:03 +0100 Message-ID: <20260216190204.106922-5-johannes.goede@oss.qualcomm.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260216190204.106922-1-johannes.goede@oss.qualcomm.com> References: <20260216190204.106922-1-johannes.goede@oss.qualcomm.com> MIME-Version: 1.0 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjE2MDE2MyBTYWx0ZWRfXwm/dHNZI1da2 N+Z33R+MagnMruuiioHe805RGODeT+92LJuEXQe6mT1+/fIUdg1tVzQ1LAArvPtfC2oCYlFb7TX u2dm2PBIhWUSwklWFwW/lPEcbto7XOt4NndBIvAMdpb1bCLoDdreKVrFvrSzKVXCaCZCzOY59j4 RpnleqIlYb0wBWX9IulTtxgYN7x12ZGvPeWllfhOM0xlwVFEHuYYZN+uUV55htu1pT7n5QR+rzv dgFD02EgGyL61AOs+QEc4t60YwHLDzwPy/cDJ3BKU9LrpdAmuar5ksllk+dOBt0hPedDhNsV3/n liK6lp3VoDqmklAQ2VAubYEKfXig6nTsxTJfz5bbJBAceJ3lvMVbDZJYTGiBE6voKrLceoZnTLR s3lkytz3momfIUI86yLEA2h5OSpAgz4tmZAbzZAkxRR7DzMeEKgMdDqyrWRqeXI9IDEaegED1E8 JsnVFa9qKykaDeDbEAw== X-Proofpoint-ORIG-GUID: wkF-Jh02Ag3z1cqHGhWzi3BRCQWy0yKF X-Proofpoint-GUID: wkF-Jh02Ag3z1cqHGhWzi3BRCQWy0yKF X-Authority-Analysis: v=2.4 cv=Rfydyltv c=1 sm=1 tr=0 ts=699369b3 cx=c_pps a=1Os3MKEOqt8YzSjcPV0cFA==:117 a=xqWC_Br6kY4A:10 a=HzLeVaNsDn8A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=EUspDBNiAAAA:8 a=invZXm7wCyodYBJXmhMA:9 a=hhpmQAJR8DioWGSBphRh:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293, Aquarius:18.0.1121, Hydra:6.1.51, FMLib:17.12.100.49 definitions=2026-02-16_06,2026-02-16_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 spamscore=0 lowpriorityscore=0 impostorscore=0 suspectscore=0 clxscore=1015 phishscore=0 priorityscore=1501 adultscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602160163 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" At a processInner_ function pointer and set this to process2() / process4() in configure instead of making the choise inline in process(). This is a preparation patch for making DebayerCpu support multi-threading. Signed-off-by: Hans de Goede --- src/libcamera/software_isp/debayer_cpu.cpp | 10 ++++++---- src/libcamera/software_isp/debayer_cpu.h | 4 ++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/libcamera/software_isp/debayer_cpu.cpp b/src/libcamera/software_isp/debayer_cpu.cpp index e1d3c164..5e168554 100644 --- a/src/libcamera/software_isp/debayer_cpu.cpp +++ b/src/libcamera/software_isp/debayer_cpu.cpp @@ -437,6 +437,11 @@ int DebayerCpu::setDebayerFunctions(PixelFormat inputFormat, return invalidFmt(); } + if (inputConfig_.patternSize.height == 2) + processInner_ = &DebayerCpu::process2; + else + processInner_ = &DebayerCpu::process4; + if ((bayerFormat.bitDepth == 8 || bayerFormat.bitDepth == 10 || bayerFormat.bitDepth == 12) && bayerFormat.packing == BayerFormat::Packing::None && isStandardBayerOrder(bayerFormat.order)) { @@ -890,10 +895,7 @@ void DebayerCpu::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output threadData_[0].yStart = 0; threadData_[0].yEnd = window_.height; - if (inputConfig_.patternSize.height == 2) - process2(frame, in.planes()[0].data(), out.planes()[0].data(), &threadData_[0]); - else - process4(frame, in.planes()[0].data(), out.planes()[0].data(), &threadData_[0]); + (this->*processInner_)(frame, in.planes()[0].data(), out.planes()[0].data(), &threadData_[0]); metadata.planes()[0].bytesused = out.planes()[0].size(); diff --git a/src/libcamera/software_isp/debayer_cpu.h b/src/libcamera/software_isp/debayer_cpu.h index a54418dc..b85dd11c 100644 --- a/src/libcamera/software_isp/debayer_cpu.h +++ b/src/libcamera/software_isp/debayer_cpu.h @@ -87,6 +87,9 @@ private: bool processLastLinesSeperately; }; + using processFn = void (DebayerCpu::*)(uint32_t frame, const uint8_t *src, uint8_t *dst, + DebayerCpuThreadData *threadData); + /* 8-bit raw bayer format */ template void debayer8_BGBG_BGR888(uint8_t *dst, const uint8_t *src[]); @@ -164,6 +167,7 @@ private: unsigned int threadCount_; bool ccmEnabled_; DebayerParams params_; + processFn processInner_; }; } /* namespace libcamera */