From patchwork Fri Nov 6 15:13:34 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: 28789 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 05322C3304 for ; Fri, 6 Nov 2026 15:13:55 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id D09186A7D1; Fri, 6 Nov 2026 16:13:53 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.b="P8LjQcum"; dkim=pass (2048-bit key; unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="kp+LCGGu"; 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 0FA3D690F7 for ; Fri, 6 Nov 2026 16:13:51 +0100 (CET) Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6A6F00o9044181 for ; Fri, 6 Nov 2026 15:13:50 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:message-id :mime-version:subject:to; s=qcppdkim1; bh=7f5p/15N/dvrNKyKJx1JSb 1UkhS5XVLzFqSuR21ihPM=; b=P8LjQcumdudnnHjK8JNqpS3Tk20rPNTACtXHoW VH1ChJPa9hwI+h3tZo47CSidvzUIB2U9jYqtgvMa6bdVAUlv0aIXk+p7/KVJN5b6 GH8bQX6N1fDivgQFQkHUMW3/WT9UgH8FM0F5KF3KTrbcocNhBwWHNkcKSkj70fYE VAEytguEVvukMUR8r+F/nElBrOLt89FJBJqKXI2Ao3bJDJRPyy4vqbXZWemmwinT /x/vJZJUSOMwHsIl5Jcox8Fvpek3UiDOUASBVgls/z0w6fJzvrEoIpEbV51ZfC0r 54gr660FSa0fSwn6S4gK3nf+8/2MihslRY+I+uxUNjxEX02A== Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4hs3pa39dw-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 06 Nov 2026 15:13:49 +0000 (GMT) Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-93f20addba1so145000585a.1 for ; Fri, 06 Nov 2026 07:13:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1793978028; x=1794582828; darn=lists.libcamera.org; h=content-transfer-encoding:content-type:mime-version:message-id:date :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to :content-type; bh=7f5p/15N/dvrNKyKJx1JSb1UkhS5XVLzFqSuR21ihPM=; b=kp+LCGGu8dWVOE/iCrk1ACVS76yx5gNJKBcJrUKGAAUYlWCu7gb8vgxuy0BJ2UAvbC 7E1AgzIyo8XIY/YTpZiwCQLHfvqRSNgFYJzMn7PFnmzoWZ2B9VM95xB4aqNV3uUdHM/t 1yxUyhSMI31QoUQ0Y3FTIgMAIBeCVaH0hOsMFXBxMRnl/KS/nUO7Zh8ZTBZvmMquu2na eYw/B42uc6jd1e6iAbhHg6QOWT3NgsIVc11+3TqCnYduyTu+p2GiqUXR3TezL/OMxYsv 69B9X0glXZmbm/wfMuYt8JW0HX5fKThvfiw/brTbNBZzWBacqbsrN3gwoCAxmdQ2cEin mkYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1793978028; x=1794582828; h=content-transfer-encoding:content-type:mime-version:message-id:date :subject:cc:to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=7f5p/15N/dvrNKyKJx1JSb1UkhS5XVLzFqSuR21ihPM=; b=XTq+C+DR9OAfQfTllU5RbFN3JzJGHxjELycH1yJTBcMSv+HhayUp8TokNkSyfG64Rg 2lyYxrMGIKGwzxoWNArcNoYWgu8ilxsaDolR97w+3caFnhAYPa6XXB2dFK5QhO5MuYdR pp+wfvfLuJTDT9y6tJZGuspROawctRwm9cdRY9VY2nuJuFwF2gTHn+HGn/9phT0mes2g coZ+tA7y7Xd6iPKnqG5RS1VaLzfkeqqa54XmIvt1mrwBQzBrma1NLROrDNdqF6D3RiYn MuTI6KDqB1DL0xlkMxIREstpiTIG0S/8Jpw9Y/QlG7JJ9MjGzsNDcnPMXyVabwhSYuax iB/A== X-Gm-Message-State: APuU4Z+MOmqg1j0YUlATpfAujN1sma4hiSnjFlZNgOYEpRG+dIdGexPm BWK8n3U2mqIjZ8Yq1mcCWICUJ5RmVKRZ6uSsP6q6KxmQgJsgNdZKPl2fEt1yjXG11Jofj1dCGd6 AdIuVDO6ODR14N9DXMskSYJzKpmv7GR9QYk0rPtiP1WneeMciP4YenT7Hwh4ozwMXb0NSVLZ6pp ybmfdWeMJ9 X-Gm-Gg: AYBFou3q2/d4udvfBC4Um0TAc255zhhMVdm3AZBguswftepkfz3ReBLImIhYkoZjfh9 1q7etBpEzax102Ntoj8MdPTSJ6z7cO+zvO0DEOSborFoEmKpr1Z9vrp1yLA4Eo3x8bpqV0sZMl6 w0IrGWyh3itPpQu47tL5Ym1Q9PQlmvexpqJpr1r5UODGapQFb1RLcrQYlOrR5cYh3f4FZbEuRuQ maokoKEuk4tPP2Ohqu1leYEVVfyg6fCAxvvB749H6a+uFuKv/d7aZPHCS86zgnUDAAHKSQu31eC v054KsYIO6DtqBLojFHbjlC/yHkk3jNkKU8SIHiyOABbf06cU6xg6DZT64VjnXcDm/hJzXmwNcj nE5wWN/HzFCJQ+rySmw5bCewCJig2R5OKrBkgcfue5UnTnGMsnrgKG86/2MmPgmHS9LptQTW5bc CbKeYvYgDyFrXRwdBvnfV38LIQ7r1pC3mx7qSjSpJbHUv9w1pF5w/5V1NtmbOBWKXO X-Received: by 2002:a05:620a:4509:b0:93c:9eb3:9f04 with SMTP id af79cd13be357-945f32d0099mr389634285a.9.1793978028366; Fri, 06 Nov 2026 07:13:48 -0800 (PST) X-Received: by 2002:a05:620a:4509:b0:93c:9eb3:9f04 with SMTP id af79cd13be357-945f32d0099mr389628185a.9.1793978027876; Fri, 06 Nov 2026 07:13:47 -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-c4d3569b856sm86042466b.46.2026.11.06.07.13.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Nov 2026 07:13:47 -0800 (PST) From: Hans de Goede To: libcamera-devel@lists.libcamera.org Cc: Gjorgji Rosikopulos , Loic Poulain , Hans de Goede Subject: [PATCH v3 0/7] camss: Add CAMSS pipeline handler Date: Fri, 6 Nov 2026 16:13:34 +0100 Message-ID: <20261106151345.32491-1-johannes.goede@oss.qualcomm.com> X-Mailer: git-send-email 2.56.0 MIME-Version: 1.0 X-Authority-Analysis: v=2.4 cv=PLeaavqC c=1 sm=1 tr=0 ts=6aedeead cx=c_pps a=HLyN3IcIa5EE8TELMZ618Q==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=zJRp6_cAMcgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=YAyIRdgMAAAA:8 a=xhgBdc7Jmc33F57T5PcA:9 a=QEXdDO2ut3YA:10 a=bTQJ7kPSJx9SKPbeHEYW:22 a=o1rO4XtwZBNj6n05oSJ_:22 X-Proofpoint-Spam-Info: AW1haW4tMjYxMTA2MDA1OSBTYWx0ZWRfXyGUIj1X6F80o z83wP82V050/m0pSOGKmtIDzFf3h8TA5nm6Y4zPXUyayC2yWSOeXRS6+7TlLaLbYZo1rdV0smTO PMd0XuMcyGNwYXbzG94gj2+14dYOixU= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYxMTA2MDA1OSBTYWx0ZWRfX6HHm0bb0AR1y gK46BtYTd72Eim8Yqry4zE5z9jnfgcbt/Lz+vA5pijfWjCOhUTQvsFmUlaC8E/SV4eiewcxf0aE tY9HsaFVG23pKyVO8zyD+qdf1A5DI/Z95qb7qs7tVgla8mwq9Bnapdd8ZOh/nr7j3D75qu5+8a9 PgX6xHqkEDkaledn09pNQLSLPJmseeehRMmHoYQPgN7YE05PDBNKcIuL60VC94CPOueayZH1jun /rJVIHIM+vQOSLs2SKe+5sc5fNbsmPRRQYTnP8mFFp76N6i0XCU77+CyAwLnxgbR+34qERHsYls rqhIMpKOJM30AsKMyWCioWAiVz8hXrwlaVvXAALvYOIwLnfQQ8JhLbT+CqhDalpkALk7ml7/7sq flSoOznKgZWa1UFvLRak85j3V29BRLqu8WHcm+3sj11e8Fr9prhnlyNw0yeSMGiKfdZTqnyACqR aVaDnQ9SGRrtpUaw9Qw== X-Proofpoint-GUID: P4ypfCLSlL4hTjGbaw8Yk5XWO7raEVV7 X-Proofpoint-ORIG-GUID: P4ypfCLSlL4hTjGbaw8Yk5XWO7raEVV7 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293, Aquarius:18.0.1176, Hydra:6.1.138, FMLib:17.12.100.49 definitions=2026-11-06_05,2026-11-06_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 impostorscore=0 malwarescore=0 clxscore=1015 bulkscore=0 priorityscore=1501 spamscore=0 phishscore=0 adultscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2611040001 definitions=main-2611060059 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" Add a CAMSS pipeline handler. This series consists of 2 parts: 1. A basic version which basically replaces the simple pipeline handler camss support, while still using the softISP. Compared to the simple pipeline handler this gains us support for streaming from multiple cameras at once (through pipewire) since this assigns unique csid and vfe resources to each camera rather then always using csid0 + vfe0 for all cameras. This consists of patches 1-4 and this is necessary to support simultaneous streaming of multiple cameras on the Arduino UNO Q and the Arduino VENTUNO Q. This part is ready for merging from my pov and it would be good if we can get this reviewed and move towards getting this upstreamed. 2. Patches 5-7 add support for the Offline Processing Engine (OPE) offline ISP found on the Dragonwing QRB2210 (Agatti) SoC. This is based on the v13 OPE kernel patch-series: https://lore.kernel.org/linux-media/20261103-camss-isp-ope-v13-0-c2cbf15a39b1@oss.qualcomm.com/ This part of the patch series is more in a RFC status, because: a) The kernel patches are not yet accepted so the uAPI might still change, this is unlikely though since the series is pretty mature now and will hopefully get merged soon. b) ATM it (ab)uses the softISP IPA instead of using its own IPA, the plan is to change this for the next version, based on the recently landed libipa rework. Changes since the v2 series: - Rebase on top of libcamera-0.8.0 - 0.8.0 includes all dependencies which were not upstream yet during v2 - Add a new "dummy ISP class for raw only image capture", which enables raw capturing, with all the metadata provided by the softIPA in place so that the images can be used for sensor calibration - Add CCM support to the parameters send to the OPE v2 link: https://lists.libcamera.org/pipermail/libcamera-devel/2026-July/060426.html Changes since the v1/RFC (**) series: - Drop fine grained locking support. This is replaced with using pipewire to allow simultaneous access to multiple cameras while still having only a single libcamera instance, removing the need for fine grained locking - Add 2 small preperation patches + a camss_util.cpp file with some helper functions - The OPE pipeline-handling is now based on the v4 kernel series which introduces a proper media-controller centric ISP driver with multiple input queues (raw-frames + parameters) replacing the previous M2M based proof-of-concept kernel driver - Add linux/camss-config.h+camss_params.h using the generic ISP parameters framework (these are subject to change until the kernel driver is merged) Since this will replace the simple pipeline handler support more testing on other platforms with different camera setups, e.g. various phones would be appreciated to avoid e.g. postmarketOS camera support regressing when this lands. Regards, Hans Hans de Goede (7): libcamera: V4L2Subdevice: Add whence argument to [get|set]Selection() camss: Add camss utility functions camss: Add camss pipeline handler camss: Add dummy ISP class for raw only image capture camss: Add include/linux/qcom-camss-config.h camss: Add camss_params.h camss: Add Offline Processing Engine ISP support include/libcamera/internal/v4l2_subdevice.h | 14 +- include/libcamera/ipa/meson.build | 1 + include/linux/qcom-camss-config.h | 217 ++++++ meson.build | 1 + meson_options.txt | 1 + src/ipa/meson.build | 1 + src/libcamera/pipeline/camss/camss.cpp | 707 ++++++++++++++++++ src/libcamera/pipeline/camss/camss_csi.cpp | 571 ++++++++++++++ src/libcamera/pipeline/camss/camss_csi.h | 129 ++++ src/libcamera/pipeline/camss/camss_frames.cpp | 153 ++++ src/libcamera/pipeline/camss/camss_frames.h | 70 ++ src/libcamera/pipeline/camss/camss_isp.cpp | 26 + src/libcamera/pipeline/camss/camss_isp.h | 64 ++ .../pipeline/camss/camss_isp_ope.cpp | 704 +++++++++++++++++ src/libcamera/pipeline/camss/camss_isp_ope.h | 120 +++ .../pipeline/camss/camss_isp_raw.cpp | 228 ++++++ src/libcamera/pipeline/camss/camss_isp_raw.h | 72 ++ .../pipeline/camss/camss_isp_soft.cpp | 227 ++++++ src/libcamera/pipeline/camss/camss_isp_soft.h | 57 ++ src/libcamera/pipeline/camss/camss_params.h | 71 ++ src/libcamera/pipeline/camss/camss_util.cpp | 39 + src/libcamera/pipeline/camss/camss_util.h | 19 + src/libcamera/pipeline/camss/meson.build | 14 + src/libcamera/pipeline/simple/simple.cpp | 1 - src/libcamera/v4l2_subdevice.cpp | 20 +- 25 files changed, 3514 insertions(+), 13 deletions(-) create mode 100644 include/linux/qcom-camss-config.h create mode 100644 src/libcamera/pipeline/camss/camss.cpp create mode 100644 src/libcamera/pipeline/camss/camss_csi.cpp create mode 100644 src/libcamera/pipeline/camss/camss_csi.h create mode 100644 src/libcamera/pipeline/camss/camss_frames.cpp create mode 100644 src/libcamera/pipeline/camss/camss_frames.h create mode 100644 src/libcamera/pipeline/camss/camss_isp.cpp create mode 100644 src/libcamera/pipeline/camss/camss_isp.h create mode 100644 src/libcamera/pipeline/camss/camss_isp_ope.cpp create mode 100644 src/libcamera/pipeline/camss/camss_isp_ope.h create mode 100644 src/libcamera/pipeline/camss/camss_isp_raw.cpp create mode 100644 src/libcamera/pipeline/camss/camss_isp_raw.h create mode 100644 src/libcamera/pipeline/camss/camss_isp_soft.cpp create mode 100644 src/libcamera/pipeline/camss/camss_isp_soft.h create mode 100644 src/libcamera/pipeline/camss/camss_params.h create mode 100644 src/libcamera/pipeline/camss/camss_util.cpp create mode 100644 src/libcamera/pipeline/camss/camss_util.h create mode 100644 src/libcamera/pipeline/camss/meson.build