From patchwork Wed Jul 22 03:40:11 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Elliot Chen (OSS)" X-Patchwork-Id: 27434 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 6D2D1BDE17 for ; Wed, 22 Jul 2026 03:40:25 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 8707A67E7C; Wed, 22 Jul 2026 05:40:24 +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="s82WtrV1"; dkim-atps=neutral Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazlp170100001.outbound.protection.outlook.com [IPv6:2a01:111:f403:c201::1]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 73B7267E44 for ; Wed, 22 Jul 2026 05:40:22 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=mUPcLHbOdf1qt1olob5HFzAnpXq8n9m4S6U3zkxXHmevaFBfhyphOoP76HD5L6Y91IazQiqxEph+XbSda2WlwBBjxPbGzGToPzqd8UBMsBlQg/Sp0Rj0mV83bX0wmAqX20PGnbmRx6uEe1YpKwgLv6ZTVO49TPcAPxViI3Yof0V6PPcBBXDFpBzUlq7HQVrjTppwMmQMjIe2VfZFeRuO9HbqkqtwShuXKPHh1LJIvr2TUPAP/O/xQilgGVRz4t/kfTTATH5HiEaWhTnqgNZPb3y1dbJA2x5ESmBY3XordQfiq/pNzNFbSBpj91aCGFIr46dMqFYeyKF4Ip//nWQgfw== 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=06JQmtQkDRqhj2JFDZPpQP8q9A8Hdq+3TSRnQGrnxTA=; b=v5SQdJt62raTPrxB97minTmCjqG5MXKtjuO1fsf5YlZQQIu7aqH6Zr8B2c4OhnmButA0ANfyelFlZJxVQbS3I9TqTddolWxM7YCcLrOuF5+5juM60nGuppvqmWaendZTq0eqxOn2BtJjmx9nuKMa2O/u8w7LkTRAedqSYPXpv7RWEq+uEvTbyME3oQXbiGbfSVFriHuMDao8MReNtM15hBU6YxBaeYMx/hxKeMR2zEMuvh0d8rMXqnx2YrriREm8oKvojjncrtwix/F4ZvDXmD53wU2MK5oFFTpisC1WlbW5pkP0E5Fb5dJDPloT7jNBNT4I6jXlF6nRbzJbMP1hQA== 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=06JQmtQkDRqhj2JFDZPpQP8q9A8Hdq+3TSRnQGrnxTA=; b=s82WtrV1p1MkTPJ2H21OWX4zODOl4mZMej2baojU0li75RyQ6r0junFM1Lxxe/u+sCeCXx5cFFmMXEgebM7duhZy29gFv3dpRmifw1sHKF/HNwmJ0cUgsqfwIp58X0PGjS374E06mtVA7CeWtDLlE2rl60/aMPcPaRdODJQ7HxraV0CAk0Uu7rZ9J9AXyMSLbW6rW2AN6xHVTq4QWtutFZQ2qYwFyLXjIjUHZJSGf52/IUMrTkdiI8Se+mxboLPfr3b0UrEpP+XFofuvx1zynvAamxJxNgaRODhSwi5IWTN97AonK4ZF399KJYoK8FpSvY94GrOJrQQaCMVWT7VEnA== 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 VI1PR04MB7184.eurprd04.prod.outlook.com (2603:10a6:800:125::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Wed, 22 Jul 2026 03:40:20 +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; Wed, 22 Jul 2026 03:40:20 +0000 From: elliot.chen@oss.nxp.com To: libcamera-devel@lists.libcamera.org, elliot.chen@nxp.com Subject: [PATCH v2] gstreamer: Honor downstream format preferences in caps negotiation Date: Wed, 22 Jul 2026 12:40:11 +0900 Message-Id: <20260722034011.1016641-1-elliot.chen@oss.nxp.com> X-Mailer: git-send-email 2.34.1 X-ClientProxiedBy: MA5PR01CA0026.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a01:178::7) To AM9PR04MB8244.eurprd04.prod.outlook.com (2603:10a6:20b:3e0::24) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM9PR04MB8244:EE_|VI1PR04MB7184:EE_ X-MS-Office365-Filtering-Correlation-Id: ae7edd6b-3b33-46a9-cdb3-08dee7a2f470 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|19092799006|366016|23010399003|1800799024|5023799004|56012099006|11063799006|10067099003|6133799003|18002099003|3023799007; X-Microsoft-Antispam-Message-Info: N2JP0h+3PI+UnyaQG5MYCra1BBwnjoIe74KBx23sQAhPp7cM+MDt5iQtxgRLgRb3S5wUtZiLxPFpWSZfCC6tnMZ6EfpFoY+K0YCpwl7IM5tmGzxyTga7lVHC2xIFRaxMc0dYPOTijcVLgoKBvB/uqck3eiWc8v6RsyMjS/SJloALbTRo8g+0ttImIcCeJSYa24Hh0Ezriu7wLD+l20Omhkfo+qWygcAJYw9q6btYajewOmiZJTwZlWX2+Fia+vRrka+ebnzk7O92jg2b+lQyyiSnSFSCu8CZIdr0v72AnNyUrNV6bRO2sOygSETT4+SmVYAYo/kKgjn8KxyZJKAF9IsEXPwYDeSaRZ74w5s+EmDIX/OHzVTJW5QtL3s1GPGliqrNKYuqt65PQPhjW++PW7TctL0Cu6gjaTgKGIlRBLVminB5+b4Csu6f70RLFJhDlRKDITwxTIzbU1QH+ixi3v5pBFz0nOGCjgD9khklql/mkNGMXeKFgTp9xdvurxf8V4J/ZLGWQk2dZgKydN6CBAkFaoYomEeRQwTeViCGpA1CFWQVPEiF3PEsMmk6UBBm2HYV55PtHJ4kijytqdU0XBGtuuBYF0V9ZqxkrnzivfsiPlr3d5kw1P09wvVuO3Tzma5Yw/V0T13wTT0jSdSC3dpYzjbTyAxV6x5OlvgrFyE= 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)(376014)(19092799006)(366016)(23010399003)(1800799024)(5023799004)(56012099006)(11063799006)(10067099003)(6133799003)(18002099003)(3023799007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: n7gn0VKfHr6R/d2NKgL93N/Rm2cICjFiENw0OWdDhx7qZI6ip+PDQBsGsQJ5cqt3UsMgWEwpQLGw7Sd8L1dT4BpsurjcFjQfeufKGnwnbEPy+dOoQyjMLaaCHeVS36rHPheIn/70PKMrMnpHmziJo76yFpsQxpxApVgeDVpBrRBs/s2ZveT4ZEvTzXQKtHP+UVc22Mcct8OPid4STwScFWECPBA2K1ibdWzl3idskTB6mC1Y99kknt87iaFXLbBx7Oqo3yRuiPpSc+pO64cKP+22DvW+cVJsKsHXPjLL4S4T7ArN/h5asf2tR0j4Ys5HthfDMkwSguuBZHX7wi9tTcNH6EmrK+hzFedO9d5K+R83p4PvQYYo8FCkjA5UupSeAppYXVbouiTQHgBiXrP7i2lydh8ef0rX3YXdpLo2fumPQ0CFRox9ZFFi2zI4pZTqOI8ApPfZZkHS4A3ZTCV+yzzSiTT2z9/k0NS+rVHJ1+LgwZOKBI6ANYURh/Gnxfdxl1vzx13isF3ud4sUo8/N8IjLjUOwaCft97Iqe6xR4MbyPvyecrB7Gn3L0avhpRdX671VNYCnu4U+8ZerGDVLajgdS8vEMDFmH5q2X7vz7xY1IzecTaWVChH/Btz8WXmn+7q1El9ki869p+15RJI6888KvcHVVsTWWM8Rg6nAAOA0PCLVLdJx8S0QHcBkp6CWs9EYKQEcRYSyUN7BnOKpdUldCKGfG3V0l0v9auDgdWT8uEiz1n++T5IlhXVHwcD92KqhP0tlbSISwso7b0Wq0EJcvQ6s5o0Iuv29NfDze33I107v4VpbKSGR2oAZ9VtsBELwmerYSLpWAo5ngxb+sD+HdIa5JetkkQhpDNmu+uI7cJ/9w7qkZWHuRe+x4i75Tmiv05IYiyFv5WYPk57/eNNF1eCTNoZdAdXyEdR/65m4XjNa4phmLaQLhEiCBPg2X6BDE4EAWdrgX6hA7D94ObZZRzlIlY/0LTMG+OHaxdbh3JquVhbyC9KIWJOgyG7O5VNgvz0RinK6eHwtZKAmndCJiYlOPsNJ7SYnKGXiOdPIZjAIxMz/qMyAvNaFSYXQYv6DQ8IZZ/bGmnO1TIOSFLmWAmNKGZYkJ9JcavBhp83bI4mIgik1Xa2VNKM8nhIn439AF8dbUmoyz39DgLCyNrL4KQWj+HGTE7HtH1Kttsx3f+IiGyL8Xj6mOTWdi5oY+AA50uWudTEmV4w1CFQQCp0EZGxLyiMtKfeABoWLPdaGgrRmiZ0oLPdxOtMAzSo6Exwu5ujtyxmjJgGUwYsS+j7WbTsDHmrCUJrqq6mmyR1Ov22glx0R7jxURz5RJi4+c+cvrWyqJkkOq8x7Ny0+4Nm1DeEHAm1L0nHYvA2XwCoSERg8vs0lDvflhl2BvNgBFd5/tF6cP7M0Cn9HV5k9d2XrfLb5/n5faI2exJj+E8O5K9i+eLTT5a4ecgkR+aF6nr7Ym/6SUXVk+MfJVDxytbIP7y4xMoV2LoEp6TzAcApS/0Tlo1FL/Q8QxpPEBff4J3iYJBDCGwGKb2hvgE82MKgoypNyUrgatTWoSkF/A8Kh5Ys9Q+eTxU6c3DwgrxxN4Z607PMB02cmplxQCTzQ1/5Nx+8dpmmCSoYnsarDPtjHSdqZgU66p0lLKyP28DO3f/9WljV+v1Hj3XjhoM7AblMaICZ+9+uKhlD+7YwHzlUIGU0qadisWzyqOuZMQJs+SATmm3lWzYpP9dvvZTLhnk1Sk8kIGWPe5EqBo74lnOY2Wu01FNgsl0rThxlF8ea+ X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: ae7edd6b-3b33-46a9-cdb3-08dee7a2f470 X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8244.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jul 2026 03:40:20.7269 (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: +NPFTNrnnrAZYkmvxPn3fBIj89BlygHSSSPUsy6UEMdwdPOkyYzyHmcWk0zgc/yoE4ufUZDYHm2BzqGZzGcHEUKiSD7Aiuu4MsX/oZHrW/gis382RCe5ZZGxblitkbQD X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7184 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 using libcamerasrc as a camera source in camerabin with a video-source-filter that specifies a particular output format, the negotiated format was not respecting the downstream preference. This occurred because gst_pad_peer_query_caps() was called with the libcamera stream format filter directly as its filter argument, which caused the returned caps to be ordered by the libcamera source format list rather than by the downstream element's preference. Fix this by splitting the caps query into two steps: first query the full set of caps supported by the downstream peer without any filter, then intersect with the libcamera stream formats using GST_CAPS_INTERSECT_FIRST. This intersection mode preserves the order of the first operand (the downstream peer caps), so when the caps are subsequently fixated, the format preferred by the downstream element (e.g. the video-source-filter in camerabin) is selected. 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..579bd466d 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;