Show a patch.

GET /api/patches/27516/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 27516,
    "url": "https://patchwork.libcamera.org/api/patches/27516/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/27516/",
    "project": {
        "id": 1,
        "url": "https://patchwork.libcamera.org/api/projects/1/?format=api",
        "name": "libcamera",
        "link_name": "libcamera",
        "list_id": "libcamera_core",
        "list_email": "libcamera-devel@lists.libcamera.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": ""
    },
    "msgid": "<20260728172447.68551-4-johannes.goede@oss.qualcomm.com>",
    "date": "2026-07-28T17:24:45",
    "name": "[v6,3/5] ipa: Allow pipelines to have differently named IPA",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "0b172f06dbaf70a9f38027befdb6c9b398d06f46",
    "submitter": {
        "id": 242,
        "url": "https://patchwork.libcamera.org/api/people/242/?format=api",
        "name": "Hans de Goede",
        "email": "johannes.goede@oss.qualcomm.com"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/27516/mbox/",
    "series": [
        {
            "id": 6088,
            "url": "https://patchwork.libcamera.org/api/series/6088/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=6088",
            "date": "2026-07-28T17:24:42",
            "name": "ipa: Allow IPA creation by name",
            "version": 6,
            "mbox": "https://patchwork.libcamera.org/series/6088/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/27516/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/27516/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "<libcamera-devel-bounces@lists.libcamera.org>",
        "X-Original-To": "parsemail@patchwork.libcamera.org",
        "Delivered-To": "parsemail@patchwork.libcamera.org",
        "Received": [
            "from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 303C1BE080\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 28 Jul 2026 17:25:01 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id AE44567FB4;\n\tTue, 28 Jul 2026 19:25:00 +0200 (CEST)",
            "from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com\n\t[205.220.180.131])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 17EA267FA1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 28 Jul 2026 19:24:55 +0200 (CEST)",
            "from pps.filterd (m0279873.ppops.net [127.0.0.1])\n\tby mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n\t66SEcesR3063320 for <libcamera-devel@lists.libcamera.org>;\n\tTue, 28 Jul 2026 17:24:55 GMT",
            "from mail-qt1-f197.google.com (mail-qt1-f197.google.com\n\t[209.85.160.197])\n\tby mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fpuyg9x5a-1\n\t(version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT)\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 28 Jul 2026 17:24:54 +0000 (GMT)",
            "by mail-qt1-f197.google.com with SMTP id\n\td75a77b69052e-51c1eb52e1fso1588711cf.0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 28 Jul 2026 10:24:54 -0700 (PDT)",
            "from t14s\n\t(2001-1c00-0c32-7800-07d4-cca3-ec08-7ac7.cable.dynamic.v6.ziggo.nl.\n\t[2001:1c00:c32:7800:7d4:cca3:ec08:7ac7])\n\tby smtp.gmail.com with ESMTPSA id\n\ta640c23a62f3a-c1f83fabcdasm11136466b.48.2026.07.28.10.24.52\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tTue, 28 Jul 2026 10:24:52 -0700 (PDT)"
        ],
        "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=qualcomm.com header.i=@qualcomm.com\n\theader.b=\"ZeYGh9rE\"; dkim=pass (2048-bit key;\n\tunprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n\theader.b=\"dxnL1Rkz\"; dkim-atps=neutral",
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=\n\tcc:content-transfer-encoding:date:from:in-reply-to:message-id\n\t:mime-version:references:subject:to; s=qcppdkim1; bh=p4qhMs83tjW\n\te8RfjgkHMORxmA1XMNp5mXSZub0Q/x6Q=; b=ZeYGh9rE+k+7Fu3UXPKYMtK0zKo\n\tczO5OVqkzWPuo1jMh7qSoY+k7VlagIzhLel0AnIaa+f5DHXZkjlqm0wHZt/f1c02\n\tQsxP3CA/85dXkA3Ju6nqfuVI4kgaEwbcJL53O2WOVugB4b8C5ozSc/58qMjVYxwv\n\tn/1f0wqbS+vPnqYyYCVO5DRb3OWwHSrL6smUMIEjRzMB5oyQ6k8q0hdtz+TRHCG0\n\tPFLZzdhGpmJdA9RK8/a4wuSbvjtztOv03xSFQBNMLg7Ekqq/+BFliOf2+7N1iOVR\n\tLI/7jIFvkl/tiS1Cebpf5T6Kq5Ws6iSBx7W7mr3fiZjQ+AOS+Xs1j6BpNwA==",
            "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=oss.qualcomm.com; s=google; t=1785259494; x=1785864294;\n\tdarn=lists.libcamera.org; \n\th=content-transfer-encoding:mime-version:references:in-reply-to\n\t:message-id:date:subject:cc:to:from:from:to:cc:subject:date\n\t:message-id:reply-to:content-type;\n\tbh=p4qhMs83tjWe8RfjgkHMORxmA1XMNp5mXSZub0Q/x6Q=;\n\tb=dxnL1RkzlSMlMycyAl1bU0A/HhSo3QV+LTOMxCqwliv6DusVlpX4wQKn7jYnmWWy7K\n\tPHN/klPM514GQzIuKHE+yFko3xz2faSCNGNr9MdWQwVmSR7myGQj6dDUvlWNYDUsPZjP\n\tNd4OX3J9E8HkVQeFC6V3d1mupLury3lCmtl34UCxdTFzxpry9RAqm5kyGjPBzk8Zpdz7\n\tSX0YUJMLi8ILAiMfKQdqwsnbRAzWh/7xelYXf3Du0DQptFQjcRfJN+VJj/k0aD9rU8rq\n\typdNSWjbEv1LVFOCTAgmhTj9kU0ry00iBxcNetWQ7mJ+adf877vC/MkGcZ/edKf+77/Y\n\tjsLw=="
        ],
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20251104; t=1785259494; x=1785864294;\n\th=content-transfer-encoding:mime-version:references:in-reply-to\n\t:message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n\t:to:cc:subject:date:message-id:reply-to:content-type;\n\tbh=p4qhMs83tjWe8RfjgkHMORxmA1XMNp5mXSZub0Q/x6Q=;\n\tb=eFwWbKFQvshN4FL0o7lGP3tS/euJyClpKTLvQ58SEgBkbvrBLoj2gEjIXKgVU71zsV\n\tN0xuVlDBnNfOun+BnpxkAV7WWuR2n0XNzcIgVPufj06SQIS0afQseRu17kdvs8pjm+Ej\n\tupboQUXrTQFBlz/EvwJwGjYyu0+FlEiQANsfvXqf/MVnH8sQlHpHaK+k5rShnPECq3Ow\n\tIb+7Ksoyi537YkNChr1Jl6z3p57I8nysdRvFUxRy+bZut84blXsXjOcIUci5TcbvtvzN\n\tk1laM+sHr9jMKWrHNtdQyCAzcDiPTnVtw+OO8JyFF6Etd7kJoD7xOpOY5bpmQ++NGqMQ\n\tyygA==",
        "X-Gm-Message-State": "AOJu0YxJwSMx3yvxqko6QG64vwx7HngxS9Ez8AKJ5TIBYzof2B8I2Qjr\n\thMTRHfe6qz4Q0dtYD9+BljCXBvIkSu+sdBP9e0mzWyYSxfxguDdNdoq0KZICQw0dcuQDRzcs5mE\n\tOJaXCpxjKsr3kcOroA3r7kjUQPo56Zod3lD0Q1tiAs5EAFrdeLKlc3Ulh0Amb9JOEVKkCUbKRmI\n\t9ANzvRi9k7",
        "X-Gm-Gg": "AR+sD127muaG6cGEtEkJZg1SK6atsWdLMruD6QpX2MdXQmtIU/yYFgJ7GcAps+9lqmC\n\tVaR9CjI4ApWMOxXVuH9lWg3d/65M4ohW5azubV96PuJU24X54fexkn4KffsEiltcrZ2f9u+cBU4\n\tjpFpd0X/2W5kBKjkzSnIcKonnOiwEdDafru/ohFFaC/jbMG5Qt7BH9Tq1VX6qDnvOMy9qGOj+IG\n\t0mzPxcpUtTX+2lHvH/hWwHa0+lwhQhSg9vWmNxKxywwH/4IGJ/oBRcBBWV0wcl9Jbm9dZ+1BkhQ\n\t7lq6++10kQNWxmim71+cyI0UcjVOyGpPAYr/7O0S6sJ8fTXkddHJ1wSy1Fswcms7q99ZwSB/m2T\n\t5pNDiCjmx5rgOqgpamQZJlSPNnHNJnvhhgVTrvT8s6nOspZE0dXRD9BjFPv4vJ9+WtOmiXm6atJ\n\tAy26D6CblH8c8=",
        "X-Received": [
            "by 2002:a05:622a:1903:b0:51a:8c86:bd44 with SMTP id\n\td75a77b69052e-529d714760amr30821321cf.65.1785259494018; \n\tTue, 28 Jul 2026 10:24:54 -0700 (PDT)",
            "by 2002:a05:622a:1903:b0:51a:8c86:bd44 with SMTP id\n\td75a77b69052e-529d714760amr30820941cf.65.1785259493359; \n\tTue, 28 Jul 2026 10:24:53 -0700 (PDT)"
        ],
        "From": "Hans de Goede <johannes.goede@oss.qualcomm.com>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Cc": "Jacopo Mondi <jacopo.mondi@ideasonboard.com>, =?utf-8?q?Niklas_S=C3=B6?=\n\t=?utf-8?q?derlund?= <niklas.soderlund+renesas@ragnatech.se>, Loic Poulain\n\t<loic.poulain@oss.qualcomm.com>, Hans de Goede\n\t<johannes.goede@oss.qualcomm.com>",
        "Subject": "[PATCH v6 3/5] ipa: Allow pipelines to have differently named IPA",
        "Date": "Tue, 28 Jul 2026 19:24:45 +0200",
        "Message-ID": "<20260728172447.68551-4-johannes.goede@oss.qualcomm.com>",
        "X-Mailer": "git-send-email 2.54.0",
        "In-Reply-To": "<20260728172447.68551-1-johannes.goede@oss.qualcomm.com>",
        "References": "<20260728172447.68551-1-johannes.goede@oss.qualcomm.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "X-Proofpoint-GUID": "aaXTkZFYBUJKVq-IP4mz2nOgRhyb-fwh",
        "X-Proofpoint-ORIG-GUID": "aaXTkZFYBUJKVq-IP4mz2nOgRhyb-fwh",
        "X-Proofpoint-Spam-Details-Enc": "AW1haW4tMjYwNzI4MDE1MyBTYWx0ZWRfX1nJoUy4V9dX3\n\twZLglKGNRu/lm8UFHVFsRWU3JTkBEKLkXdoHAM5Q7Z6JEL5JJUb1O3dkDttGJ1DLmka+r+JJJJx\n\tKA/rXY1dKRepMPPpJil2yRuNNSAsr/FMcG50VQHLa6QgYmoBVNriVNqL4+W+wZD+2e9arloAOMD\n\tri5IQp27ut8kv2fpvNWpU7FQDIdYcXvZs8YqZifm01CPhhL+fO19HYN5wE/Vp8gI/mUGBC/Yepa\n\t1muGqlWyc2u0i2xwvHT+F66Sr2UgQ47nF8/LHEbG0VCBdT98uyMtTjRwc8LNipT8KhXqMXf8MvD\n\tPgIyhMgD6fJdA8BaLSRszjhCI3PXembVC0Z7lz1TDXMAhT/S7BYBfFdL3zf8HeYlZlG5ApsmPBt\n\tROpL43999ulj7mqK7NhQlBUU1u9gYIyqWjxVX4zCc8dg1db6qCwB+He1cfJes/xvVfem5mQUyLV\n\tmd2+lJ7XpxhQIdjtgqw==",
        "X-Authority-Analysis": "v=2.4 cv=aoWCzyZV c=1 sm=1 tr=0 ts=6a68e5e6 cx=c_pps\n\ta=EVbN6Ke/fEF3bsl7X48z0g==:117 a=xqWC_Br6kY4A:10 a=RAioF0-LDSMA:10\n\ta=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22\n\ta=rJkE3RaqiGZ5pbrm-msn:22 a=P1BnusSwAAAA:8 a=EUspDBNiAAAA:8\n\ta=c6ydndUcIca2Pb-fbGsA:9 a=a_PwQJl-kcHnX1M80qC6:22\n\ta=D0XLA9XvdZm18NrgonBM:22",
        "X-Proofpoint-Spam-Info": "AW1haW4tMjYwNzI4MDE1MyBTYWx0ZWRfXx6WekFbRg43d\n\thUHgbVjCiTmskT6P5zDFW/UwvKmv391Y9U2XC4TQzwpcfvQV9aOg8jXBSbdZnhMgyzsoOpwGbRF\n\tXq5tNOFFgdJiitsymaDXDLBSrsJp18U=",
        "X-Proofpoint-Virus-Version": "vendor=baseguard\n\tengine=ICAP:2.0.293, Aquarius:18.0.1143, Hydra:6.1.134,\n\tFMLib:17.12.100.49\n\tdefinitions=2026-07-28_04,2026-07-28_02,2025-10-01_01",
        "X-Proofpoint-Spam-Details": "rule=outbound_notspam policy=outbound score=0\n\tpriorityscore=1501 lowpriorityscore=0 clxscore=1015 spamscore=0\n\tbulkscore=0\n\tadultscore=0 malwarescore=0 impostorscore=0 phishscore=0\n\tsuspectscore=0\n\tclassifier=typeunknown authscore=0 authtc= authcc= route=outbound\n\tadjust=0\n\treason=mlx scancount=1 engine=8.22.0-2606150000\n\tdefinitions=main-2607280153",
        "X-BeenThere": "libcamera-devel@lists.libcamera.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "<libcamera-devel.lists.libcamera.org>",
        "List-Unsubscribe": "<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>",
        "List-Archive": "<https://lists.libcamera.org/pipermail/libcamera-devel/>",
        "List-Post": "<mailto:libcamera-devel@lists.libcamera.org>",
        "List-Help": "<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>",
        "List-Subscribe": "<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>",
        "Errors-To": "libcamera-devel-bounces@lists.libcamera.org",
        "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"
    },
    "content": "From: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n\nRight now the build system assumes a 1-to-1 matching between a pipeline\nhandler name and an IPA module.\n\nThis, as also acknowledged by a \\todo comment, is quite a rigid\nrequirement and only allows a 1-to-1 matching between pipeline and IPA\nnames. The more platforms libcamera supports, the more it is likely that\na pipeline handler could re-use an IPA module. This is particularly\nrelevant for the softISP IPA module which could theoretically be plugged\nto any pipeline. Likewise, the forthcoming R-Car Gen4 support uses the\nRkISP1 IPA and at the moment would require building the 'rkisp1'\npipeline in to have the IPA module available.\n\nWhen building IPAs, the build system iterates the list of enabled\npipeline handlers and for each of them tries to verify if the 'ipas'\nlist contains a corresponding entry for it. The 'ipas' meson options is\nan array option and, as no default value is specified for it, it\ncontains by default all its possible choices.\n\nIn this way if no value is specified for the 'ipas' option, compiling\nthe pipeline handlers ['X','Y', 'Z'] will compile the ['X', 'Y', 'Z']\nIPAs. If instead the user specifies '-Dipas=X' during the configuration\nthen only IPA module ['X'] will be built, regardless of which pipeline is\nenabled. Building an IPA module will anyway require to build a\ncorresponding pipeline with the same name.\n\nRelax the 1-to-1 'pipeline'-'IPA' naming requirement by introducing a\ndictionary that associates pipelines with IPA modules.\n\nFor each enabled pipeline:\n1) Make sure an IPA module exists for it\n2) Make sure the IPA module is enabled by the 'ipas' option\n3) Make sure the IPA is compiled once only\n\nThis will require every new pipeline to add an entry to the dictionary\nand specify which IPA module they would like to use.\n\nReviewed-by: Hans de Goede <johannes.goede@oss.qualcomm.com>\nSigned-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\nSigned-off-by: Hans de Goede <johannes.goede@oss.qualcomm.com>\n---\n src/ipa/meson.build | 40 ++++++++++++++++++++++++++++++----------\n 1 file changed, 30 insertions(+), 10 deletions(-)",
    "diff": "diff --git a/src/ipa/meson.build b/src/ipa/meson.build\nindex eb7846e47..c583c7efd 100644\n--- a/src/ipa/meson.build\n+++ b/src/ipa/meson.build\n@@ -24,6 +24,16 @@ subdir('libipa')\n \n ipa_sign = files('ipa-sign.sh')\n \n+supported_ipas = {\n+    'ipu3':       'ipu3',\n+    'mali-c55':   'mali-c55',\n+    'rkisp1':     'rkisp1',\n+    'rpi/pisp':   'rpi/pisp',\n+    'rpi/vc4':    'rpi/vc4',\n+    'simple':     'simple',\n+    'vimc':       'vimc'\n+}\n+\n ipa_modules = get_option('ipas')\n \n # Tests require the vimc IPA, similar to vimc pipline-handler for their\n@@ -39,24 +49,34 @@ ipa_names = []\n \n subdirs = []\n foreach pipeline : pipelines\n-    # The current implementation expects the IPA module name to match the\n-    # pipeline name.\n-    # \\todo Make the IPA naming scheme more flexible.\n-    if not ipa_modules.contains(pipeline)\n+    # Make sure an IPA exists for the pipeline\n+    if not supported_ipas.has_key(pipeline)\n         continue\n     endif\n-    enabled_ipa_names += pipeline\n+\n+    ipa = supported_ipas.get(pipeline)\n+\n+    # Only build IPAs specified with '-Dipas'\n+    if not ipa_modules.contains(ipa)\n+        continue\n+    endif\n+\n+    # If enabled already do not add it twice\n+    if enabled_ipa_names.contains(ipa)\n+        continue\n+    endif\n+    enabled_ipa_names += ipa\n \n     # Allow multi-level directory structuring for the IPAs if needed.\n-    pipeline = pipeline.split('/')[0]\n-    if pipeline in subdirs\n+    ipa = ipa.split('/')[0]\n+    if ipa in subdirs\n         continue\n     endif\n \n-    subdirs += pipeline\n-    subdir(pipeline)\n+    subdirs += ipa\n+    subdir(ipa)\n \n-    # Don't reuse the pipeline variable below, the subdirectory may have\n+    # Don't reuse the ipa variable below, the subdirectory may have\n     # overwritten it.\n endforeach\n \n",
    "prefixes": [
        "v6",
        "3/5"
    ]
}