[{"id":39905,"web_url":"https://patchwork.libcamera.org/comment/39905/","msgid":"<PA4PR04MB96889F7B643D479CC2AA14D7EAC92@PA4PR04MB9688.eurprd04.prod.outlook.com>","date":"2026-07-30T08:36:01","subject":"RE: [PATCH] gstreamer: Reconfigure when peer caps gain extra fields","submitter":{"id":452,"url":"https://patchwork.libcamera.org/api/people/452/","name":"Elliot Chen","email":"elliot.chen@nxp.com"},"content":"Add a description about the issue that this patch resolves. \n1. There is one issue if using libcamerasrc as a camera source in camerabin when changing from preview status to video recording mode. The fps drops a lot when starting recording with camerabin which is caused by libcamerasrc.\n2. In preview status, there is no colorimetry field when libcamerasrc outputs the caps. When starting recording, v4l2 encoder will append colorimetry field to the caps. \n    Currently, libcamerasrc only handles empty peer caps and will not reconfigure to perform caps negotiation for above cases. Then videoconvert will perform colorimetry conversion which can trigger fps drop. The simplified pipeline is as below.\n3. Should obtain the first caps in the queried caps information and compare it and the original caps. \n+---------------------------------------------+ \n| \t\t\t\t     | -----> + ... + preview sink\n| libcamerasrc + videoconvert +...   | -----> + ... + v4l2 encoder + ... + filesink\n|                                                             | -----> + ... + image encoder + ... + filesink\n+---------------------------------------------+\n\n-----Original Message-----\nFrom: Elliot Chen (OSS) <elliot.chen@oss.nxp.com> \nSent: Tuesday, July 28, 2026 1:43 PM\nTo: libcamera-devel@lists.libcamera.org; Elliot Chen <elliot.chen@nxp.com>\nSubject: [PATCH] gstreamer: Reconfigure when peer caps gain extra fields\n\nFrom: Elliot Chen <elliot.chen@nxp.com>\n\nAfter initial negotiation, a downstream element may append extra fields to the caps (e.g. colorimetry). The existing check only handles empty peer caps. Add a structure comparison to detect such changes and trigger reconfiguration with caps renegotiation.\n\nSigned-off-by: Elliot Chen <elliot.chen@nxp.com>\n---\n src/gstreamer/gstlibcamerasrc.cpp | 12 ++++++++++++\n 1 file changed, 12 insertions(+)\n\ndiff --git a/src/gstreamer/gstlibcamerasrc.cpp b/src/gstreamer/gstlibcamerasrc.cpp\nindex 9061f9163..88717b048 100644\n--- a/src/gstreamer/gstlibcamerasrc.cpp\n+++ b/src/gstreamer/gstlibcamerasrc.cpp\n@@ -744,6 +744,18 @@ gst_libcamera_src_task_run(gpointer user_data)\n \t\t\t\treconfigure = true;\n \t\t\t\tbreak;\n \t\t\t}\n+\n+\t\t\t/*\n+\t\t\t * Caps may gain extra fields after the initial negotiation (e.g.\n+\t\t\t * colorimetry added by a downstream element). Detect such changes\n+\t\t\t * and trigger reconfiguration.\n+\t\t\t */\n+\t\t\tconst GstStructure *s = caps ? gst_caps_get_structure(caps, 0) : nullptr;\n+\t\t\tconst GstStructure *peer_s = peercaps ? gst_caps_get_structure(peercaps, 0) : nullptr;\n+\t\t\tif (!s || !peer_s || !gst_structure_is_equal(s, peer_s)) {\n+\t\t\t\treconfigure = true;\n+\t\t\t\tbreak;\n+\t\t\t}\n \t\t}\n \t}\n \n--\n2.34.1","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 DC5CCBDE4C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 30 Jul 2026 08:36:05 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C77EF67FB4;\n\tThu, 30 Jul 2026 10:36:04 +0200 (CEST)","from MRWPR03CU001.outbound.protection.outlook.com\n\t(mail-francesouthazlp170110003.outbound.protection.outlook.com\n\t[IPv6:2a01:111:f403:c207::3])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id A4BBC67F22\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 30 Jul 2026 10:36:03 +0200 (CEST)","from PA4PR04MB9688.eurprd04.prod.outlook.com (2603:10a6:102:271::5)\n\tby DB8PR04MB6986.eurprd04.prod.outlook.com (2603:10a6:10:116::13)\n\twith Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.270.12;\n\tThu, 30 Jul 2026 08:36:01 +0000","from PA4PR04MB9688.eurprd04.prod.outlook.com\n\t([fe80::3012:9dfe:3b7e:2ff4]) by\n\tPA4PR04MB9688.eurprd04.prod.outlook.com\n\t([fe80::3012:9dfe:3b7e:2ff4%2]) with mapi id 15.21.0270.012;\n\tThu, 30 Jul 2026 08:36:01 +0000"],"Authentication-Results":["lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"INAoYcEz\";\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=vetb48ODYz0aaJIEAJfqxYbl6MW5e5JuIrQDm1fD46bhrrWAM6Qx6kotCEGgioJoFuYrLf+IdKgCFvFt3n53LSpq6HJvzE6mXsLy704mU53f0BI3O50259DKh86RVv2mh+ipqbHsKhwGu8wdrBCBLKi8uSWI0LSC+cbwej0gn1yAm4/6FhTPapALsbyg0VimwNN+bKSMjXItKv4CrShrGWrc4Szw0i/WZOF7Stumw+0gunHMX02Nf1/jwDX7LxzPqwpt7Ut4N7WuAB0kptjjAddn60mBLZ9+w537IHIrDwd/EOw0ltRKKOsIJVSs2hvcMZ9iJvyOX910wCEH740Vyg==","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=6oKEypklR3gE7Kyi6dnMy/DOkwFdTLDrt0BhVeQJDzM=;\n\tb=xoAxBxaOHT/j4mfdr13dXqJCpQMXRtzUv3TIJBCYLTquyB17k3IGFyZOr+xWrOKNqp7XxnNDGJnHEEtHnJIRazjedLSwkxI/gVv41o1mbYzqrqLVYuurfaHrKko11F9C565Wjjds2upI8/4PCM6aUY/RlRFxLf2f+O7vow1Rkczybzp263giQ8i2f9LqBanFs08cGKGRJaFiVrUUIL6iawOIlXJ8KoC5r5+dx+GhpuLAW5JJD++fZHp0EAo5WOE4cfIebBTh7bNMun2Rf0sXWaLYc6TcJ796u0wSzaw8oQEI3LjX2Fmg2BRxtfHjypQ09r2lYoEUQaWoJCvMEgcegQ==","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=6oKEypklR3gE7Kyi6dnMy/DOkwFdTLDrt0BhVeQJDzM=;\n\tb=INAoYcEzvZSRPPFM/4JyBAhhLN5BbNOWrURLfTvRM2z+owdwwnhc6D19XHVgNeycos0Lv3rR4LZj/t9XuJg81tqbr0HaDJNRfztwq2cKWP7bI2X/B7yfZrEQLb4QBlADL7PhLcmePxvFuG4ucF+lLnRWD9GYrgbBlBD7dnaPwdr21E0OX93jxu4PbHG9uFDEDflwe0VTLqeyDT6nNOwlTAm0/VeXWZ3euHTxczf2VLSaeRpDWWwOlZ1FWkkWNZ4ZnjNvZD5+/nNZlI/IZFMt961ifK3NHiEMHWQ6REcNpulkXdlNw5lgZqnZ9LDT3XZvmfXkL65+ZpW7ANeBr7+JgQ==","From":"Elliot Chen <elliot.chen@nxp.com>","To":"\"Elliot Chen (OSS)\" <elliot.chen@oss.nxp.com>,\n\t\"libcamera-devel@lists.libcamera.org\"\n\t<libcamera-devel@lists.libcamera.org>","Subject":"RE: [PATCH] gstreamer: Reconfigure when peer caps gain extra fields","Thread-Topic":"[PATCH] gstreamer: Reconfigure when peer caps gain extra fields","Thread-Index":"AQHdHlQAPrzKIB5ErEOXPLB9y1hqVbaFte/g","Date":"Thu, 30 Jul 2026 08:36:01 +0000","Message-ID":"<PA4PR04MB96889F7B643D479CC2AA14D7EAC92@PA4PR04MB9688.eurprd04.prod.outlook.com>","References":"<20260728054311.482231-1-elliot.chen@oss.nxp.com>","In-Reply-To":"<20260728054311.482231-1-elliot.chen@oss.nxp.com>","Accept-Language":"en-US","Content-Language":"en-US","X-MS-Has-Attach":"","X-MS-TNEF-Correlator":"","authentication-results":["lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"INAoYcEz\";\n\tdkim-atps=neutral","dkim=none (message not signed)\n\theader.d=none;dmarc=none action=none header.from=nxp.com;"],"x-ms-publictraffictype":"Email","x-ms-traffictypediagnostic":"PA4PR04MB9688:EE_|DB8PR04MB6986:EE_","x-ms-office365-filtering-correlation-id":"a40e94ef-b654-489e-0fb1-08deee159622","x-ms-exchange-senderadcheck":"1","x-ms-exchange-antispam-relay":"0","x-microsoft-antispam":"BCL:0;\n\tARA:13230040|1800799024|19092799006|376014|366016|23010399003|38070700021|6133799003|5023799004|11063799006|56012099006|10067099003|22082099003|3023799007|18002099003;","x-microsoft-antispam-message-info":"JUYKMcwG8m3vyBBY17ok2fIkgnX3msRw7bqWtR1hayNhS0ClLsRjyKbFCBVpl6J6BkWlAUDAqzHqpdd0Kq2YQ53B4D6TGDmoLFhBHZ60t4/zZ4DhC9vmQg6kbpJK4CnyvplobRav+59f0uFBsTdIKn5H83IkwBZLZv7fVmlo5wBNV35p8KVPfBaaFi3L+rD02HLMaBas2WY5OSl3/YxKyoI0izqcls8jF+tJ82sqnzc88pyZHOO3bTLFRKqUWchBoXnMAZ01GsAjEFJysEcaxWzJU37kpV+2z2YmqUg3gRgJad5PAn41Kdvv3dz8JPvJgQyaRGOjOls6nBHaNwJ5fRFnhaUmWVpWEIjpi74IUeoTHa4LbR6uGj0PG+wZyuPYqOcGvvnZhCxeTMu+uMnrTbbS1YoxwK63QYjkJ2M5dCP7isyjHQKejNoZYlvD/RLoZcj+/ikJut8FcnB182M336Tm4cn83oEa51dGeHLHhcmp/OxTccVvOnFfBL+dd9s5uUPNdN697YqVNFuCp6ApT+seWK8+EHCRqEdgwOLmsEtsHn4eO80lufij9kYml0nmut02B5qnNbBsCQowcvdat/3O7WOSUtAN3/VYkSXnD4xMSK1hIgewwRjJVSUaeiRoDChE70ALfwvs68IvKyWWMptqNwCn1SRuDFG/PF6ElUiNtofsAQvxSZbykn+wSTlIGuW3gPcWJi8PV26cOTI/qUGmVotJGJWfMWVbkQzVGGc=","x-forefront-antispam-report":"CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n\tIPV:NLI; SFV:NSPM; H:PA4PR04MB9688.eurprd04.prod.outlook.com; PTR:;\n\tCAT:NONE; \n\tSFS:(13230040)(1800799024)(19092799006)(376014)(366016)(23010399003)(38070700021)(6133799003)(5023799004)(11063799006)(56012099006)(10067099003)(22082099003)(3023799007)(18002099003);\n\tDIR:OUT; SFP:1101; ","x-ms-exchange-antispam-messagedata-chunkcount":"1","x-ms-exchange-antispam-messagedata-0":"dXy6Y+LrxZ8w997EElrmyOS9AQ3h6jZgOES0w8mMgsQL8OHpkDkcW0PmkzG1v3zD4cXc8v5N/UfNOs1ql4dNcVYCmMauyoMDvKQImkBZprkFTSWeZnUXl8BMYK5XWQHEqaiWg2v1Rg7zCwvqNVDIeZ78cKwM6WYLcZHKd2T5uGqwFaIS+ABKJeZUNmfI3K3X9erzM/RcFyqdTFtHB23uLxlUJZpVs3Xg7Vn2UU/aLeZfsmN5Sbr33gKIjLGOPl3OgSHjrf7c/2WIZXKzGWgYh3zG5iGXL+CkFWNXWbpm4E3kKoh0MOkXlJ38N/08xflFO8VsP2jUvIXZ/JiU1brEEDtb3Z4DuKt0xa164GgMlXDBF3C1yL2RTFnnquvoYlFE+0NLe0Uwr3wDeONuLlVY+9jOfCbFFg+LiadWvYrhreKJKBjRa6TYhOFIybgz6M2MpAPeCaw8CQoSGiX6JWWJVG1HWnXyhWTrWzrT0aF32lqtiq7k0LNHXTi+gNsvQJyFHu9naXGK7bghfJvL/b/iuHhcrE45fPD9nj1sqYexeIDOaY6+GhfpLDVnM02FOUoqwK/VkXvrw7FNAd1AO+0uUExd3zqs1XBTUS8mft2EpaMN+781iDAxI0M4LwhBz8UaQj5CTmpJbwkG6n4CzwmlbBdd85WWQ050V+bidxna+UU0FMVa2/kr4BpvdE9iRCSskPZKMpd/9oeY5EZcXI3Q6mYgrI+oo7B2o1ZTT92XvHlj/+mQQ1Yx4bsnKzTeYahRXjASkaHMrVzFci9Yn5ItXLyOr3eIvFIwTHF5IOaUFLGwQqh4FXygiS5cNNugwIlnnPA3Vh8pWAGf+IFLPvJtqQw6BnTenoWtxoLdlcx3l/iK37Ikq+nABoi4rbMaMvxvV20XMCvXJvl/FPasqR45bvgMz/vHpZB8gEtc4FuAC+WlTLqVcLe0HXFwOCXv6tEAkUmPrUpnqbX7V/STnq14Krl75Yg0OPbHQJyCWx26JbOGD158CRLWJu9oD0kyng3+6Sqrnzfswjg77gA+Pf+At3qxfFDKGDXBIr/A44B1CtfCENHznUKcFf/SmJUB0zIGpzAspoH7qdzt2JQRj7AidtngfBWh1equcGAR0l7q99eOHg8yagTbZ9Jxq9N2W0kxbv2UzXaj6iBFDhCSTn403YHNDno1dbGS2P8ksD5dHZ5BGeusGvQvH0uAkcTl01s+g0pMlkS++48LNQPE7gU1AHY3mzhhU5/p3YMB7W7hPPR7tF3XeudTpXkk6G6AeV+1yvuVyU3hhcmRNvKyH6qCNMtGr/n1YhB0Evl9/NJSdsChlaCsH+WY9a0JKW5fkXEAp7MoDdULMsv39RI/UQ6Pw32AbE0+O2JtIT0IuaR063kZ6ULx8g6JpLA7cxFhVVoPCwZjNjtkU8JptMPu+quBM5yHlrDuOXUt737iaARHpB3bpP4wDACdQie/Q5sQX8eeg7qqsVZNxh5Y6Kf1dOlCJ6DTMIu+bWTPduZoBmnX2UFRxyEK7lcqsbRNrN8NPTWcYV6MxVV4l1YxcB9TJ2wr+CVKTBUTmaJFBiySyN1XddTWBqE7S1DCaHCQNZ2e02e/F2fkZvx/RISgCa769fu23Yd6SOCr/RNmgsNV70zLTTDs5FCiXUxH6Wnvpv89AExd7Ppy2jEK5V3hs/oeTbjduozECDjUKaZ2PemZn7aJtTOraqlnmvMmkp88t4h3iKzH","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"quoted-printable","MIME-Version":"1.0","X-OriginatorOrg":"nxp.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-AuthSource":"PA4PR04MB9688.eurprd04.prod.outlook.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"a40e94ef-b654-489e-0fb1-08deee159622","X-MS-Exchange-CrossTenant-originalarrivaltime":"30 Jul 2026 08:36:01.3527\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":"r9cE1m1NBlf8AVhw7L8vbVI5XBJ8zLyo6uoKCziFArZZWmGWNGdpCtWGnlWav0lEltndaNsPQqSE9TME9zyHdA==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"DB8PR04MB6986","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>"}}]