From patchwork Tue Jul 21 10:44:11 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: elliot.chen@oss.nxp.com X-Patchwork-Id: 27424 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 53B77C3264 for ; Tue, 21 Jul 2026 10:47:15 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 5B1FA67E67; Tue, 21 Jul 2026 12:47:14 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="QOxwzT8L"; dkim-atps=neutral Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazlp170130007.outbound.protection.outlook.com [IPv6:2a01:111:f403:c20a::7]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 9EB586601C for ; Tue, 21 Jul 2026 12:44:21 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=s2kl/pw4iZND43KzIVZ0Cy3GSUBR79Q05s1+bMW+cWfad/YBxCfv7sEwYLpssU/dYsncZ9yXN84dKcM5Nuf2VIJwSyvUK38pk4jwCEvyQ0zjd87HgqW6klasn3Gr9t5xZYMTxbIXEtpNG9heZZaY+7LDwd41WTsuwm0n9iByhCo0HoLu9E7IaD1pa08OdTmChHvo1uPQfQGS5wn5mCFUfI4DDNKXKLW4LlsQo2zW2EwSdJNV68ZADNUioO7zTl7+6Ur/4MZrlOnJ4RWyvcl5MwKDAOSLVOj9RKz+479OvIUIPgegq+mzqjPARLJOemDhHOvIP28C6AUwSCfELbel2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=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; bh=QfWBOzzETMns02dvr5rKepPUWZorU5lEg9vw/KGHH3w=; b=lYGX4lKhwFonLG+LoBPzMP20kvABEYiT0RHwXZcEVV3IM7reVZ+Z83rfeF3y0yvWz7Y32RgFsnY1a1+SRfmaGlE+hFfpjZv5Fi2vibMbJRWsoJTu/mSGy256c6U3zxFVKUnIzxmS3LfwpMhIqNPKU7iEF8Luat3QlIN39FUucryBGsQPNxTb5C0ZRfgRbHeQOUvxQAsp1cTAe1e6nAkXuPYvte7ehm1+TR38SNS2ZuPG1M9ONdcJiryWiXdFQRQ3p/yukeNVbwxe2Gm3vnNbNYOl3GZ8pFIyD4nox+rSo5EcwvrqexqSyByocllQ6+BwgCyO9dyfr3L4Q006qlmHLw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QfWBOzzETMns02dvr5rKepPUWZorU5lEg9vw/KGHH3w=; b=QOxwzT8LCLMQneGw/AfOXV2XdAhnxZbNROTE9vnruryOs/gD4vUGQhDMqmsiYdQiF51s2yCp+qYbcWEtoEYICJy6tb/jZ1MotGP/JANGe1wv80NsSpGiThMwFRcY1Ctc6d/Sqrs/bO1DnneMzCADlptDP9hnzgQQXjpiZjoGI6hvPPLR7KMA2bCKxHZDZqWszCQdrRyv9l12FmDFbZSX4EprNhho7WLomaBUsig0Zi5oEzkIquOeSO46NiXHMzCfzvGA8gsJuSrg4hSu3GQVA7AhsiEp8ZzWs/Pd37XJcOVOU9XiAa5nVKZQyQdhhSLp3OSXCVDOnAjyCbPyhdKqlg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from AM9PR04MB8244.eurprd04.prod.outlook.com (2603:10a6:20b:3e0::24) by VI2PR04MB10810.eurprd04.prod.outlook.com (2603:10a6:800:27e::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.223.18; Tue, 21 Jul 2026 10:44:19 +0000 Received: from AM9PR04MB8244.eurprd04.prod.outlook.com ([fe80::a59f:4bc2:f026:4012]) by AM9PR04MB8244.eurprd04.prod.outlook.com ([fe80::a59f:4bc2:f026:4012%4]) with mapi id 15.21.0245.009; Tue, 21 Jul 2026 10:44:18 +0000 From: elliot.chen@oss.nxp.com To: libcamera-devel@lists.libcamera.org Subject: [PATCH] gstreamer: Honor downstream format preferences in caps negotiation Date: Tue, 21 Jul 2026 19:44:11 +0900 Message-Id: <20260721104411.2393571-1-elliot.chen@oss.nxp.com> X-Mailer: git-send-email 2.34.1 X-ClientProxiedBy: SI3PR02CA0014.apcprd02.prod.outlook.com (2603:1096:4:295::6) To AM9PR04MB8244.eurprd04.prod.outlook.com (2603:10a6:20b:3e0::24) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM9PR04MB8244:EE_|VI2PR04MB10810:EE_ X-MS-Office365-Filtering-Correlation-Id: 594befbe-fc4c-431e-5332-08dee715041e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|376014|1800799024|19092799006|23010399003|18002099003|11063799006|56012099006|10067099003|6133799003; X-Microsoft-Antispam-Message-Info: RF1FeZrAofO9cNWtiJlJBgBtGGrYOlcJS/KjlRKIqMX7tX6McA7Hx7h/n7yFYjIK6l7EaLBDhMmxRRY+BzW82Omy5Qxix8iLVycUZL5hIs5Fw4oWyPfd37HxZ28LjbjilRquZHB2BcKtFaVBXAItqXDddoUuPIbG61ZCv9VmaiREG3KLDu+cIkYenP2EKnBchGizUZkFML4Hi04RuS35/BjqjguYJmli9PnrCEbhYMe3C36cuDcvfLuIswrDAaIR56jvDpRhu4rZSQTAYHxxPZhGKyhCaWJ4uF98ismxt1k63Mij5tOtVf+Hbtx3o7MBzYNZVYgoa4jeq6uVmzv8HK+5znmY2dRlCyLq1rAau5DuAWuoTpCeg/8vHg6oFVxkkz5S1LM4tKxDR1LB7B0Ceq69BEm0MlxvjT5e5ngQseykXl2vxMrF3HRPA+9nLS2hpjJPrRfIRH+Dk4FsC6rrRtr3wfnqfwjSH+mIg5xELxFldDPgrw65GriaK087F0oDKafUz1PZKVHTjV+GVeZaqpSvBlferpjtIvvHC815IB7ITnj5O8rPMzcv43E2jS7iDA7gQybCndN9l/FIj/aErBYOelrnFTJBYzXG46vurQOj/ZI8fU1t1dBJt97ZgW1OB9FdvUQaHgqZXpV/NyEGHSzqhOQ4BxMYlBf+OWokIfc= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM9PR04MB8244.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024)(19092799006)(23010399003)(18002099003)(11063799006)(56012099006)(10067099003)(6133799003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: laIUacARpH80iqhvSx1+4N2vjVbN+KS7HJyxhmJDmCcHd/0UKEYg+PUEzWQiVxBGh4Ao4g9/7XsV9aBzx/0z0NzBlNevc5o/n0GD3pw35r/zdHI/PS/BPvIeKbcbRgIpSLYmX9C5bDtgyus2kKEEOxwCauZ++mCCdEeZhsVBZhgtTJ4ygCA9T2vEzUE7GxEbGuSqUlxxieoK2aMFXeH92uXTJax/dupzW7Amdeu9HkPMrfu5n2tSR8bei8RGLT+/1oIeVdauoYM3P/BjARKPoqlOmGMX0BQCTPDdMab1pIrVtbvhZYSDUiueAGmGP+3wPH9E69nx05dRDGsmsmmo6mcYFLg+iVLKacEwU5Yu/fhYSP+GneSoHs60BDQB4966O9JeTg44bbF95glPzobYwokl4oSUaUuXgVv3JF4KcQOSfplUxeY+VkDI/8lH4autgAviRkrnLeUHUIdX8sUTrnHaBMkpyozYB8xGV+bpE/mgprzH6h6Vf29U0DuaGGiu/bUvrzYP7J3/H0qycxlsCW8A83JOYrGry8uvF9bK4rBh/bwfCSTjER0MwfBmudh051t7TVF9mRCODOgzKQoJdYumPiw5YoM/nMrJl9usUUcH1Ya/T6TKC7AQTmU+NtKPOJdTusiG/PpvCf4sxEvnjanljTaq+qJbLqDm0bg2Pznhe0DAg7/6KxW1F24cCs3fz7Nhaw54m+vPEdOyG8bTcRXB1b0wQK73wC0ON6WW5XgETB9+wvTiNB70adCCE9hdSZddfrmXLRWNUFEqnkAyfNbneHJn8HY7Gk/Rz1vO0aAzQklwSxyv0cTerFZWdpEwaoUbQ8SSDcNjMZvpWvkwzlexLC9cph5s9IeVzmYOiJseBTdCCnQDbaSspurSFYRemQaIvOUnU1t3UkI2e2LW1saGX+mH3B75WE5mKonDLp1ISbyWYANoNrj+/Dc8kpXQwNOXXgiMjUK6pd8Hc0zKN5FbkEAFdDAcucZHCZE9NO/EHtDjTkwInXLFf9eBMkntYDgzD2iA0d3rFH9fsFTniXaVoIBqQIuF5AOwi66bDIylZz+6xJNnjvyYMboV01jDuHZeJRuBeCDcklFBtkc1b45X1Ux5neAXD5OdfsIBYxCfUaZwIE8c1doiaK7G98Nvjk0gZeYbxw8ruCE8T18tq89CASviG/fUULIZikT8nAa5aiGytC4wQQPG9QsgB/1FX6kFfY/Pr5iQ2/ZBQC1zl/pGBuqC8aMaD1E8Z7WrwnLlV1io/LcKNVm5y4zRT6GHB4CXEcY/n5ff91q8bqdvpvfEjtrzEgwuXsqhKqIJyNBg1UWgrwh6g92NzhDoUaW23EyS0pALOxqL49Cw36BPyuNWUyHv0qKYhNaKYGc69VMGGbcXKEAxKugzRu0TEM47GJMEDk/2CIAd0kZtylVgpYYoXWTZxZFXbmqS+wDLiN/cXDTED78S/Xj7CBnFz+IFIwANKsuR8opFiukq+2ngsRGN4WfPF1JAW32YYpO7JhMy7agdN5acUMxTR9t8aPYXhTlUIzRd61gW5uv0z3oOkj24CjQcrSpwygnTyFJ90BDO9R1TmQzblocOEWZDZtVfKYn9oTHyFMklOXwecRL53jWCR51AvoPCbvp0x8vjhelaV4nghjScqr2VVtuJP+ijGKPAlLo1k9u9CrERbNsqk1tcGQf0wkH4p2l40Un4SddX/BEs6Kk8BeFKzEDuT7r8t9JNCymi+TB/p67azrCefGRkoBGPQZS3n8wjdidnXum8/2a62nHnjArBwwv3BltS X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 594befbe-fc4c-431e-5332-08dee715041e X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8244.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jul 2026 10:44:18.3539 (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: bxHDdyfM/2iV7ci9jUlu7LEp+yv8d7SkQFddU47dAXfDP3KlEJKlJCSHk1mzNlx6JsICfc8wj1+V3CoNWhZTiWM+YI8Z2p6gv96HaihFRl3jyU3M3KDnmeGW2QYp2jC3 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI2PR04MB10810 X-Mailman-Approved-At: Tue, 21 Jul 2026 12:47:12 +0200 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" From: Elliot Chen When negotiating caps in gst_libcamera_src_negotiate(), the previous approach passed the libcamera stream format filter directly to gst_pad_peer_query_caps(), which caused the negotiated format to be selected based on the source format order rather than the preference from downstream element. Split the caps query into two steps: first query the full set of caps supported by the downstream peer, then intersect with the libcamera stream formats using GST_CAPS_INTERSECT_FIRST. This mode preserves the order of the first operand (caps from downstream), so the preferred format from downstream element is selected during fixation. Signed-off-by: Elliot Chen --- src/gstreamer/gstlibcamerasrc.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/gstreamer/gstlibcamerasrc.cpp b/src/gstreamer/gstlibcamerasrc.cpp index 9061f9163..ba4c2d81d 100644 --- a/src/gstreamer/gstlibcamerasrc.cpp +++ b/src/gstreamer/gstlibcamerasrc.cpp @@ -598,8 +598,13 @@ gst_libcamera_src_negotiate(GstLibcameraSrc *self) StreamConfiguration &stream_cfg = state->config_->at(i); /* Retrieve the supported caps. */ + g_autoptr(GstCaps) peer_caps = gst_pad_peer_query_caps(srcpad, NULL); + if (!peer_caps || gst_caps_is_empty(peer_caps)) + return false; + g_autoptr(GstCaps) filter = gst_libcamera_stream_formats_to_caps(stream_cfg.formats()); - g_autoptr(GstCaps) caps = gst_pad_peer_query_caps(srcpad, filter); + /* Intersect with downstream's preferred format order first */ + g_autoptr(GstCaps) caps = gst_caps_intersect_full(peer_caps, filter, GST_CAPS_INTERSECT_FIRST); if (gst_caps_is_empty(caps)) return false;