Show a patch.

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

{
    "id": 22855,
    "url": "https://patchwork.libcamera.org/api/1.1/patches/22855/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/22855/",
    "project": {
        "id": 1,
        "url": "https://patchwork.libcamera.org/api/1.1/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": "<20250225021023.2112783-1-hui.fang@nxp.com>",
    "date": "2025-02-25T02:10:23",
    "name": "libcamera: simple: Check all media devices matched the pipeline",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "8a7dad3080faf1c519ebfb01d0ccb59ca89e4cb6",
    "submitter": {
        "id": 186,
        "url": "https://patchwork.libcamera.org/api/1.1/people/186/?format=api",
        "name": "Fang Hui",
        "email": "hui.fang@nxp.com"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/22855/mbox/",
    "series": [
        {
            "id": 5018,
            "url": "https://patchwork.libcamera.org/api/1.1/series/5018/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5018",
            "date": "2025-02-25T02:10:23",
            "name": "libcamera: simple: Check all media devices matched the pipeline",
            "version": 1,
            "mbox": "https://patchwork.libcamera.org/series/5018/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/22855/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/22855/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 DF349BF415\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 25 Feb 2025 02:49:20 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id F346468711;\n\tTue, 25 Feb 2025 03:49:19 +0100 (CET)",
            "from EUR02-AM0-obe.outbound.protection.outlook.com\n\t(mail-am0eur02on2060d.outbound.protection.outlook.com\n\t[IPv6:2a01:111:f403:2606::60d])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 197E661853\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 25 Feb 2025 03:49:18 +0100 (CET)",
            "from DB9PR04MB9284.eurprd04.prod.outlook.com (2603:10a6:10:36c::8)\n\tby AS8PR04MB7958.eurprd04.prod.outlook.com (2603:10a6:20b:2a5::12)\n\twith Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.17;\n\tTue, 25 Feb 2025 02:49:16 +0000",
            "from DB9PR04MB9284.eurprd04.prod.outlook.com\n\t([fe80::c5dc:4676:2254:2f4]) by\n\tDB9PR04MB9284.eurprd04.prod.outlook.com\n\t([fe80::c5dc:4676:2254:2f4%4]) with mapi id 15.20.8466.016;\n\tTue, 25 Feb 2025 02:49:16 +0000"
        ],
        "Authentication-Results": [
            "lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"lV1yflAM\";\n\tdkim-atps=neutral",
            "dkim=none (message not signed)\n\theader.d=none;dmarc=none action=none header.from=nxp.com;"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n\tb=oDSSsb+9kWSODDKMJehyHUATzSAFAGJtuJcu21DiXOANpjZkai2CO+UhTzREqr047ve2qaEmLQhD5iLVxmj8F7R9BgGXqOFLxiKXSIJ2QHc0NtIRemJfIw4uvIjjoXIWTVLRZqKu63sp0IWS8tTE2buWE0Z8wnqh5abYsyd5dIwwibjg4TqFUh5wAdODKW53doVOI6PnkepBZRCrz6yN9+JP/cpyrRLknJ7erXuElIfXTnL4KJifrzsK8QEeVK/Mtxlkcr1KPBjZxJPFHHoai0HG+xHc0JJTjqQW1sGS4xfMnrfMFMAKnX4qCWq4Pb+vmHLHG+f0szzRaOiZEGQIMQ==",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n\ts=arcselector10001;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n\tbh=keVYfLVbueGiQl9dCyDyMXxzlzJklVSrhK0/vwmnxZA=;\n\tb=dRZ7QNhx72g2y/TvzTDPB5EwYp3OoGJwL9cAMGFVn5tfKK9RjQn6j3an4mUo7mV/NQGrnUedyHz6vYnGVG/PdOmEfimOL1K2tmEZP9sbewry5DNOxkneg8lc1sJq4wEWIAuQRq9F7RRiZ/Zh7x8EpN/QDFDJu9CqQKkiRjheCdmwqgBC+iJNM9QdV91NJmvR/XqTV8VgjjHBlNpQJh7fI2HTURdhhjAubnnDtSD1AgA9136nnK6ZODcwPcw2Sp9D3Y76U62DAP049buZBfQYwDAcSJCpD4SbCoRx6KrlBU9h8fXCzH0PNxni5i2W4w3S1QZDZXa2fk/Duc7k31Iggg==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass\n\tsmtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com;\n\tdkim=pass header.d=nxp.com; arc=none",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n\tbh=keVYfLVbueGiQl9dCyDyMXxzlzJklVSrhK0/vwmnxZA=;\n\tb=lV1yflAM9U8CqpEuW35dzxulSknQ/rT2WsvdVjmnbr08xoMLlhW71J2XmeL+ACF8rygUpf5AeRPVbt3ZlXTa1ECunYMm0yaTyTP3blbIViuaWjs2f+EiP9JnDbZMHGU9Qg7m7Nsu9DxKghjmx3D74lliI0iF8O5vOuHWDnqajcmqebCZSKL0Xb6lxUgFQ8DvWdSOuYqPeqmmd3QEsN82D3H57NRfHWrghiDhvOMMlEz/zSoKRatj7Cke1BbiH+XEl3OoOP9N92LinuLTGjR0jChUeBsq78sONCxsDdifj9hKiDTiT38dPTc6aZvRmFO7lk3xA5F0ZZ8p+2ZdxRsPPg==",
        "From": "Fang Hui <hui.fang@nxp.com>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Cc": "jacopo.mondi@ideasonboard.com, mzamazal@redhat.com,\n\tdan.scally@ideasonboard.com, hui.fang@nxp.com, antoine.bouyer@nxp.com",
        "Subject": "[PATCH] libcamera: simple: Check all media devices matched the\n\tpipeline",
        "Date": "Tue, 25 Feb 2025 10:10:23 +0800",
        "Message-Id": "<20250225021023.2112783-1-hui.fang@nxp.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-ClientProxiedBy": "SGXP274CA0009.SGPP274.PROD.OUTLOOK.COM\n\t(2603:1096:4:b8::21)\n\tTo DB9PR04MB9284.eurprd04.prod.outlook.com\n\t(2603:10a6:10:36c::8)",
        "MIME-Version": "1.0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "DB9PR04MB9284:EE_|AS8PR04MB7958:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "bfc74485-fa90-4c2a-0655-08dd5546fe88",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;\n\tARA:13230040|376014|52116014|1800799024|366016|38350700014; ",
        "X-Microsoft-Antispam-Message-Info": "BX/wG8haa+yCPg81KydWCssQ/9IWQTrSHlXENsj6uxEAZebA5AhUSI0s9yQQnsGx3iTf68QdhHpuBaFrP0mgdfAqJaWwkkVc+i+PtgR/cvbK+k0urcdby388N6ERGUS3rbnBid/MEvBXSpwk5fslSqloq1u9LMTP+25J6iUBINX4nZu4GZ5d0iK8cKsuBP8auTvsbxbyC3RWwbjwMuG2x06S/9++KSPXQ1dhcDmoShk3aX/h0eoDX2MqP2HI13U8DhLnjzXx6a0LcSU4qxymb9PjK95tUwMCus9aNCsuqbnxnMqasGg56zeIrbV3yeHhG12AtyYYBUvXNlWmJ1UgsqMf17Y4ZdXVzjNLjNWznZpx3d5+h718sF+XECbO3wDTIE8NaB8zzmCoCMbnDkn49mZT6otkDlhEyTX3mrd3Xw4ZRuPtb7v5lXTJ1f+trpKn1DaxtC1WQDMUkRHDyYrwJIqW6ClMh/r+/iWs5Q8lysf8ptW5fLF1PPPoJq+t8HZl4Wg6mv6tC6giSir7kSaklplwnk7qwJ/jWYU6Beh/5a9P7JyQ2GtzfyQOcq4y6aZ9DkASbNLopoJ1TTEr/UwVAIJv4S/At8IJMSzNv4sCSjsPrN6ZNXfX5SPpMHTZQ0Ak8dqgnRTb3b3SLiF5Zfqv7gr5exXFVf2emfZpHmCuG2IPdHUnCNRT0DrorfT38YsCLk7WskxJVJeJu4jf4jaJTNWb9JN5xFLSL4J94U7tCVqxOhdzJ3upRU6UEr4bi1n+D2Knjad6Mn0LUiL9XUWwsXxpALMQ/tcL/HRp9UKWdFvMyS8QNI7JJ0zbMYyyAEJjQ1UEUo+37iLfVlao/dcjNxo57608ImLQ76XtVwyuspfE+3v1vkHXH2gY9XpOa4onw397fvc+ftCyMfyhbv/0Obz2+hPJUfLAvL873ewVDitexbZuaFq4B7cRa+r59n29MpIW2oAR2KrtLnIVaNFFhNOwz+PdVDxw6E2gJB/TKkwsYZf1tWTUT1sfnsVI2sEY/z1nyV8pRLB76tJZQgGwBdmApDUOTuCP/8WtvP2KW/SokhnYoN5FtBEaD0rNFfYoa6P2VahJMQxG+ZnFg19FEATjFm1guDvEjmPl5iTevO00qhjQLnk/4zDpirY2lWbQG6K7KFEHb8YTU905/0trXGcZmJcrxT7S8Pnej6LLJxgssNGfGw6Huw3uvEIJt3ipCiGjhlMgiCvSrz1VtGej41QkV/8SL2BB5nL2juMIWr6Sd3lgxZTJExORMkfZithmeg1pLv15NzB8OKYUaOyvQfOhoB4vz/rLDPyrkMgWaVWJqdqDRQDu5LtQjeDjb9QAgZL5ViS75GXsyEY0ADe2fBlvpbY1rfgwyxq9KxCyCP58LC2z7HcBDz/+urJl+QLszCd2BKg5R60TYa6M0WJsAmhEdQS06vNJe56ECfkqblm6XcVHCCZnHcIsFLC6O9GP",
        "X-Forefront-Antispam-Report": "CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n\tIPV:NLI; SFV:NSPM; H:DB9PR04MB9284.eurprd04.prod.outlook.com; PTR:;\n\tCAT:NONE; \n\tSFS:(13230040)(376014)(52116014)(1800799024)(366016)(38350700014);\n\tDIR:OUT; SFP:1101; ",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "lkybwso2ZDBlseVUtyOARzGkf6ty8CFD5KzLem+UkTH/9EIsvwmcf6+SSGzATmkyzPWTmXdLFITgdqbxC5KDXmgRkQtrLwrFJH7R8LOfpm7AkYoQLiChpSFiBLde3KhzrL8GdTfd8i+LiUWFrnhBgJ9C29pHHNg0Df5ggWWDLa5cOKk3EmwyyqcZunbZmQOHWC2QlqQzKtBZ7tt44UfO+IVo3Xu1+fw2DRY7qB/yiqvd6JIMqJDN5KzlRyh1dPmLn74Fh4/TMfExAnXodwthNsjKJIBV+PPetduzHL7t0T/fDzlBUqBIHT//Lv/b3lfeOsfZQmDY+oaIZfYtTC6t6DC9IX4J3VuL/dCP2DpmKWjNa9DF8f9u3KSaOksLDAaXHKGLTPOFUrgMt6sGc9oNE37EFrT0to46jil49VtzcQ0GghTZH5SiHDhfqA453WBIq64NadxPZFV1gFH2MA8lvfj02E5NAwz6YTrLR8Ls7h0KuE3aSqPoSl5N7wP3WqnNXj9YufGd88YV+YH80IFdow3zR4bMDVEU+K2shI067cZq8aMI4xm1OkL6uWSK4/5IAeZz0q3/20Xg7eO1QNwMRLbpLZPovXTMIWY8lfFzhcHRzo8hHCi91aAStxdseui0i6TtYpTDqGCO95KbBuO2llY3CQkdsfZcMq1XDdfvCyomCyc/6ZgbQJb8GpFW6rFSqk6MEsrdvxdYXez5v8zxdlTANGWw0ayhydkaltQkzaOSz267O4qglOVsQUBfJgsGxY+7kSqhlj0AvUMTdPwevkaxzFeXCE0fixq5CPN/T2hgr5uxJw0qawlPLwdf67zr+8FgwFcdNwIh3roWnUsQ+vcLo0Bkt0lybR6FRcy8yiXQHVxcjylj4+rbca+gusiYnPdiESXoVAulbWaTa5ZS7SDLPv2+TztpOwvVK9rp8jIqte3C5U7m8302vF3LnBtQGM3wLOLP/n/SRLsZCap//ZSe+bpFz1aAbEL5z+tDB8mouRQ0WaXUSFQLNJ2MMjBgEb7AQNFS4fMIC15Uu5dR2dYM4RfakoXSJRDlq+LNNl7nH8rCZ0U/3N4Ei6eXmAyDYhGHx8GKbqRVy3qjdG1503YFDd2L5D/SqqrWEc2YuQVMA3ukk8K345LLk2kvx2++jAmtSTimy3aVqiNyQ1xIOWeYt70r2SgJmO7RjWj4W6KmjJ8t9P8pU7q2pzitt7IO/Oj6qPirfjW0YdeE/KSMGqSflXsVeqt+gUYise5homy5epMGfZxm8Cu7lpvEEtOjtt4vjj/nzrIfaFPoxq0dMwghBTdGuwbSuo1EcMXeZjC0kR+NLszlg5ph49BqcoLK58Oa9bSfJEK2xEptIpHL5y6LxtkBW3Jb8B0S3VoeGAxEyo7tPQj6Ez0ZmuF+vr5I9l1qmhavZzkOg4xGxr9I5rlkGVpx+Fm7zn9oevntjO9Yciv22xaOupgwfMigVCU0tZAebVgZ2zKJtZUCKJB+db5lHx75Eyegcfr6uEOrABbBfiO6BPqguE4++yCvvklg00pQylLIQnVSoRT3nIZBQLjtAnPySbA7C1ldv80m6Hjlsj5i7oyAT5s5aDeHZ+hk",
        "X-OriginatorOrg": "nxp.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "bfc74485-fa90-4c2a-0655-08dd5546fe88",
        "X-MS-Exchange-CrossTenant-AuthSource": "DB9PR04MB9284.eurprd04.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "25 Feb 2025 02:49:16.4594\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "686ea1d3-bc2b-4c6f-a92c-d99c5c301635",
        "X-MS-Exchange-CrossTenant-MailboxType": "HOSTED",
        "X-MS-Exchange-CrossTenant-UserPrincipalName": "G3JaXiO+W8fAYH16557KwfEa1DxzIX/cmATVinnSOfeUGT+oZ8+jg28UzEkCaIneBv1hUtDgDVcXwhSVZyDw9A==",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "AS8PR04MB7958",
        "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": "The current implementation of SimplePipelineHandler::match() will return false\nonce meet an un-complete media device such as no sensor plugged. Thus the rest\nmedia devices will lost the chance to be discovered.\nTo discover all the cameras present, this change instanciates the cameras\ndiscovery procedure for each media device that contains a supported camera port.\n\nSigned-off-by: Fang Hui <hui.fang@nxp.com>\n---\n src/libcamera/pipeline/simple/simple.cpp | 50 +++++++++++++++++-------\n 1 file changed, 35 insertions(+), 15 deletions(-)",
    "diff": "diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\nindex 6e039bf3..134f0a07 100644\n--- a/src/libcamera/pipeline/simple/simple.cpp\n+++ b/src/libcamera/pipeline/simple/simple.cpp\n@@ -379,6 +379,8 @@ private:\n \tconst MediaPad *acquirePipeline(SimpleCameraData *data);\n \tvoid releasePipeline(SimpleCameraData *data);\n \n+\tbool matchMedia(DeviceEnumerator *enumerator, const SimplePipelineInfo *info, MediaDevice *media);\n+\n \tstd::map<const MediaEntity *, EntityData> entities_;\n \n \tMediaDevice *converter_;\n@@ -1532,23 +1534,9 @@ int SimplePipelineHandler::resetRoutingTable(V4L2Subdevice *subdev)\n \treturn 0;\n }\n \n-bool SimplePipelineHandler::match(DeviceEnumerator *enumerator)\n+bool SimplePipelineHandler::matchMedia(DeviceEnumerator *enumerator, const SimplePipelineInfo *info, MediaDevice *media)\n {\n-\tconst SimplePipelineInfo *info = nullptr;\n \tunsigned int numStreams = 1;\n-\tMediaDevice *media;\n-\n-\tfor (const SimplePipelineInfo &inf : supportedDevices) {\n-\t\tDeviceMatch dm(inf.driver);\n-\t\tmedia = acquireMediaDevice(enumerator, dm);\n-\t\tif (media) {\n-\t\t\tinfo = &inf;\n-\t\t\tbreak;\n-\t\t}\n-\t}\n-\n-\tif (!media)\n-\t\treturn false;\n \n \tfor (const auto &[name, streams] : info->converters) {\n \t\tDeviceMatch converterMatch(name);\n@@ -1678,6 +1666,38 @@ bool SimplePipelineHandler::match(DeviceEnumerator *enumerator)\n \treturn registered;\n }\n \n+bool SimplePipelineHandler::match(DeviceEnumerator *enumerator)\n+{\n+\tMediaDevice *media;\n+\tstd::map<MediaDevice *, const SimplePipelineInfo *> mediaDevices;\n+\n+\tfor (const SimplePipelineInfo &inf : supportedDevices) {\n+\t\tLOG(SimplePipeline, Debug) << \"check simple pipeline \" << inf.driver;\n+\t\tDeviceMatch dm(inf.driver);\n+\n+\t\tdo {\n+\t\t\tmedia = acquireMediaDevice(enumerator, dm);\n+\t\t\tif (media) {\n+\t\t\t\tmediaDevices[media] = &inf;\n+\t\t\t\tLOG(SimplePipeline, Debug) << \"found media \" << media->deviceNode();\n+\t\t\t}\n+\t\t} while (media);\n+\t}\n+\n+\tbool matched = false;\n+\n+\tfor (auto it = mediaDevices.begin(); it != mediaDevices.end(); it++) {\n+\t\tMediaDevice *media = it->first;\n+\t\tconst SimplePipelineInfo *info = it->second;\n+\t\tLOG(SimplePipeline, Debug)\n+\t\t\t<< \"call matchMedia for pipeline \"\n+\t\t\t<< info->driver << \", media \" << media->deviceNode();\n+\t\tmatched |= matchMedia(enumerator, info, media);\n+\t}\n+\n+\treturn matched;\n+}\n+\n V4L2VideoDevice *SimplePipelineHandler::video(const MediaEntity *entity)\n {\n \tauto iter = entities_.find(entity);\n",
    "prefixes": []
}