Show a patch.

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

{
    "id": 22330,
    "url": "https://patchwork.libcamera.org/api/patches/22330/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/22330/",
    "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": "<20241216043044.1760345-1-qi.hou@nxp.com>",
    "date": "2024-12-16T04:30:44",
    "name": "[v4] gstreamer: keep same transfer with that in negotiated caps",
    "commit_ref": "e9a876acc6d3a3d8ce1cfc99e4cbcf1c6122d591",
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "b2c8d9dc455409b9b4aa41121f54037ed503ca33",
    "submitter": {
        "id": 195,
        "url": "https://patchwork.libcamera.org/api/people/195/?format=api",
        "name": "Qi Hou",
        "email": "qi.hou@nxp.com"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/22330/mbox/",
    "series": [
        {
            "id": 4891,
            "url": "https://patchwork.libcamera.org/api/series/4891/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4891",
            "date": "2024-12-16T04:30:44",
            "name": "[v4] gstreamer: keep same transfer with that in negotiated caps",
            "version": 4,
            "mbox": "https://patchwork.libcamera.org/series/4891/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/22330/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/22330/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 5586FC32F9\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 16 Dec 2024 04:31:12 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 7A10162C8A;\n\tMon, 16 Dec 2024 05:31:11 +0100 (CET)",
            "from AM0PR83CU005.outbound.protection.outlook.com\n\t(mail-westeuropeazlp170100000.outbound.protection.outlook.com\n\t[IPv6:2a01:111:f403:c201::])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 1A22F62C8A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 16 Dec 2024 05:31:09 +0100 (CET)",
            "from PAXPR04MB8285.eurprd04.prod.outlook.com\n\t(2603:10a6:102:1ca::15)\n\tby GVXPR04MB9949.eurprd04.prod.outlook.com (2603:10a6:150:112::5)\n\twith Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8251.21;\n\tMon, 16 Dec 2024 04:31:07 +0000",
            "from PAXPR04MB8285.eurprd04.prod.outlook.com\n\t([fe80::e003:8fb:64ea:acfd]) by\n\tPAXPR04MB8285.eurprd04.prod.outlook.com\n\t([fe80::e003:8fb:64ea:acfd%6]) with mapi id 15.20.8251.015;\n\tMon, 16 Dec 2024 04:31:07 +0000"
        ],
        "Authentication-Results": [
            "lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"ku2eiCRN\";\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=qhNkqG+slr73jT2VzcKNBMVi/TkSX40dAiGJM1xWBDsclDDtynlKfvj8eVergbms2Fq14bhquQNoQ96ChbdBG0BNwbhOqq1Ku6bvB21dXJlobR6nHcpbhcFZO7I4DtDgVTFd/Bm7CJUK0+g0L5+YZ7YTAow+iMGsUuWWkX5xcm/ETxkXeEawHmh6IILB552vUHwiNNewG0wvOZhX/8KyV2yXhIpC4dCP7OqsiXCBEKAB1IhjeK2W3SfNuiJXeyVMkWx3p6Lhwvpo3yePBcoD0XM6SkbH9IVfSOfxNqUaHO/Rki93ARksO5HOivQSHs38VNURA0gAHgxIYOtD8ovPwQ==",
        "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=LQ1K0ZYHWmNHG68miq1+fDxtoMoHUUfzA5m3Wode9yg=;\n\tb=hIdTTeEaNheURMKvJ07f1jWkh3eEPtSbarYnAt30NXKDFVYBmsEOQUdfh/3xJUrFxJk7h02+l3yu9EQ6t+BAoPeV68VnesH/RwnrYx98GotuTZ4pX8LZsn0MtEfBwWEIWUueqKZUsYGeovISxnjrlY8CXeAII3xZLg/S4ALBiw/WNrFdCbimilcbHbsYYZ9X+aLIGFLKggMdWQh810h4haYZ01ynyxu1zuZGzkql2QsWzQyxkV6h7CPWWIwyV1gypnf6NknGA3rXeMCwX/5m/E+5S8fNm1wJblhs77ELubVj1I1odwAczpYPNRnHt8WIKjAhJ1Zp7jZpL1hmWKAq4w==",
        "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=LQ1K0ZYHWmNHG68miq1+fDxtoMoHUUfzA5m3Wode9yg=;\n\tb=ku2eiCRNc1EUfiI9fsH/iZxpkDxecPkHwn8uvAbD+6hNo8o1jzTnJSmvxCl4D/Q7bPoJblanL6Axl89XND4+HaLJcWp0FKZ5A3f8J/4jqZwWZtyaWOFHJnLLdh2d8YnX3ghaSgQZBNLEcX+pWs7ACdLrs27GVJguynAulupGi77RtKkGGKCz3RKf3cU96hMqcqOiWyj8O6ZJimeWSaQ15REZWfwoCdBbaHPFXLJ7hxUmLkuDpzXIui0FFL8S+SkRwmijY53aMAiDPY2/KpVwBtZpNb1TSEWVv/xfyt71BAZsNLHnGFA9uFiS0dliONNP7ydAWVg0i0hSKVjtvEqjIA==",
        "From": "Hou Qi <qi.hou@nxp.com>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Cc": "jared.hu@nxp.com,\n\tqi.hou@nxp.com,\n\tjulien.vuillaumier@nxp.com",
        "Subject": "[PATCH v4] gstreamer: keep same transfer with that in negotiated\n\tcaps",
        "Date": "Mon, 16 Dec 2024 13:30:44 +0900",
        "Message-Id": "<20241216043044.1760345-1-qi.hou@nxp.com>",
        "X-Mailer": "git-send-email 2.34.1",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-ClientProxiedBy": "SG2PR04CA0179.apcprd04.prod.outlook.com\n\t(2603:1096:4:14::17) To PAXPR04MB8285.eurprd04.prod.outlook.com\n\t(2603:10a6:102:1ca::15)",
        "MIME-Version": "1.0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "PAXPR04MB8285:EE_|GVXPR04MB9949:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "603f5fa8-1075-4902-c35b-08dd1d8a7561",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;\n\tARA:13230040|52116014|1800799024|376014|366016|38350700014; ",
        "X-Microsoft-Antispam-Message-Info": "2r48uVUBK23mWfHULvv2hc1bxXcdeLOq9blG26SDvR7TTcGzGse9xLKdFVZ4ANQU9KfeE60aT7n5BIw+WAffNE52WGOq1SWddcwMA0qjvquMdXP9OpsnnN0jNZTirG6OmvZE5H1A9XR0QNunNBI6rdN6fAmyI13Plx90bu9U1v56ShBdtqJGNSQwTx6X/Dt6tW8Orw5sp9sPA1NBHYyrV6zb27ujgysJ1JZewa9JIe4r5AmmzqdBNZBr0mY780llWrLeS83NsUxJF5UVSRwOZvB7yefUWhR7PAx41vmOP8g5eX49U/wKMP50NvPaMugZMJzCW/5P5E552BE+BuzVO/8V7CNqZVmbV6jQqlVVxaiBSNWNmxTbkG5lmO5NEVhkidM0exROEqFWxzB7PjK2jUcjHgIFhia1RsM3mFmfOCoeNHuplFccFGyUhEp+B3+nwLDx8esxTEIjW1w2ZZkPkApa80ptMgIqEW9CZt23a2syy3ora4shJySdLcnom1b/sXykAqR0twDU9c00QHTTwq8tXOCzNKT28g6oa0A/EsY+w5HkHBjJXLK59B7vt4CUOF2N+aNsmDYe9A3j4n1EciLo09FDz7XEbsnraaT+oE+mUH8LRaP6QWDq2wV3xHXrNsyPHyl0Y6XCBoKeNkseP0oQIDTicBGgbPODbjSycXVwJBKdwHtqQlX/h3r2Y3TTQyEbnt9HGFp5w9ypL2EotH5AH5LRAyoL94wunqGOrdGUB2DzB9sX57jDS7vFI2v0P2y3zyQcpLEnYmIJ6lmCGK161RvKTcc3qZhannAWDyV0J5PUFK+v4jpms72gAWS6t9e3+T7/mMN5M6ImOSOyDQt1A7y3DKG4S0PaUx5E1bgUdFwOl+YTalMB27KyXGaTTDSmhtI1i7gL6qJkUXxU2TQiSSpqEgmOhbXQi7Gne0Y7n88/Ei8VbTJTCKszLTcvGDIW/3WGEKs7aGQVsKSRyuajmKnnnPtlcasfH1F+qEpqIJTTif6+YyXw1+vR60ToG5CZ3gU1wK5BPP0t5UAEelN1PmP+V4TFZY6RWp42v6XNyL7Wi2Fvge6tbdHTg/c4MR7XeefcVY/E9kYNdGr3v0DfFv310/7SfU3+U2xkvSdgG382G7mg3lcW19Ye881jB0MkvVrE6wLq/GnfA+zAPrFS48q9/oU26L9vMoA7iHK+f+70sh+mHDi6r1EMop0CGDoTtBRcQrOQpW6QvSSfkFogeRdMgNjUOuoy5V/qzWVoUHh8vwKVPphKRDQ1htBkJ2CP3omGqFmC2PBQ3L0Ufy6tJLIs1TO1CAYLGbtHoH0hJEpzl+iX8pMRKI85IzaU5F+WnSHoXVYJWjFqKP1zVkjAxCdvvXBuF8cYqHBiB/taI9VnVkcuFNHURT6B3Lj1",
        "X-Forefront-Antispam-Report": "CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n\tIPV:NLI; SFV:NSPM; H:PAXPR04MB8285.eurprd04.prod.outlook.com; PTR:;\n\tCAT:NONE; \n\tSFS:(13230040)(52116014)(1800799024)(376014)(366016)(38350700014);\n\tDIR:OUT; SFP:1101; ",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "vRm/H4J9VQfn58tg5EWrByK69L95k/8JSRGKxja0nC3G2K+sbFNcJCtlHBnlTHSBgVikTTZit0jssxmplF4fMUqFdt8mgOOAt44xZ3pmslax8xc0Rx4WE0mOsCp2Uz4cSX1G2ZWAAznng5joAFaGWJvd2nQpfljcfOrZ68spypfHcxzTHA2L1IhMPSFKn6UgwUHx5Kz9ZpUrpEzddLIAXVIMgAs0+PCi7eJ+IQDle2OdL/O2ISLqSTDJNPoZlJiNvjKC5PW9NPFFr12sBgbBmU8q218/9SErV2OIELvEuSYsrGzeFcAJdmQo2wFzy8Q0hd2QBJZmO1tQi7qmDHb7DxZtIM6BNY/CfsyO2DVzqcUNEkkV6sqIjGjPXyUzof2axvKftqf5cg6gdQVA8WcWJHJu2JANgXTUr5GC080M1B7iLPOgwolpj4z7Up9d/2mb+ZrCRoZNtuQIsxRP33K3pvfKqowwoLtFQThrWSwqflOSEBJwJjTz3blPpziGqo2KEz5Lu41aO4JiLS4we9myS/6w6ZAbqe/az73K3lMBK7p6iTRYZr8GRPPls7cktPh2fPl+6QBDgPEqaeQypf2gc9qHKd6uagol7b1z9pBuUGRsBdIjTdC6QWkgIVHfVWRNNDbowcmoWjF/5nv2Oh0H4neZbXZmzg5qcIbrc3OmKH2gNXpVuVw+yFaMGmbdP+wgQLXyEtTVRjh6Gx1/02JUSdI25+Fd9gl31IIwvh0KEcLwVmhAHRLIDxxa1pVe54VVstfc4QJ6bjlrmgWWucqDluY+SiGRwwAdQp6VQBPQ85U5zTMHN5GQz7BXF0luUCuO7Oswt6aIgOm82qjgSarlITvddQ7UisX3tsHbaDq4GWCKAoNuxu924oTr2eSHaJToG7097k5OzZwELtK+ltNS8QTE5aMtp8zbrux7VSXRp0eiD94odAaikfUWmKDss21/qGAgLPz1+GZ94T6ivjAKRtOmpjr96vLLhXMe5/+rYzHpQW3G/r1RZdPmfLTEK/0gxBwa1SsT+wAEI3KO2cBR1PWO0+6gcAsbWLXvHsYKIMgoLK/W8QktV/K9zSvpB4T+64y9BwT1K8Gz9xeIRZsJ2Bdwrp0rGi1NcLeWOGASCXmMRRfNPaGt45SBjjHsrLNLbclZXXZW/sYxiDDC4gx4pqeRSN2tyTEs7K+N5cTmUmLQmzMk46wHoHJS6Bg4QdcHVCtoFtNaMDQ6aa4K22QstQ0LdapQJI5PsJhwz4nTnb/Fji4+NgBdJoXooy1AuoWFAHSt4Oa5JLvj0lBWZUAz3xs5bYUhXkR0pyp0fH3m6FT2f8ishHnzNH6o3ZRcPd2XH9AcQTDP47CwZ36KccdejmRPlkbFUoy+UydWrSt2x9odJHEq5gc554F2rj/b2drmVnFc8MeXRCLUJs/GIp1O2l5VDtQr8hOlt99km2SiIn5xtfV+Ka6azoC1s9r97SwXhyT84SBLSWiX6UyOxTyZw2mDJ5v3In7XxItpipx/XgqqyYeCX5o0uqdvBu530Wm7TsyImjBDYKAlYpNtYngrQ8GSp0Wo4/fmCk6lZvbOHdjutDJXwxTkEN1LRUcRA8or",
        "X-OriginatorOrg": "nxp.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "603f5fa8-1075-4902-c35b-08dd1d8a7561",
        "X-MS-Exchange-CrossTenant-AuthSource": "PAXPR04MB8285.eurprd04.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "16 Dec 2024 04:31:07.0559\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": "yCQf8Rj6mHvpr06Prtl56yyxCNaXFCO4UlEqjcZcxVv/dXNqNJZ3EahtW0xv6sLl",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "GVXPR04MB9949",
        "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 conversions back and forth between GStreamer colorimetry and\nlibcamera color space are not invariant for the bt601 colorimetry.\nThe reason is that Rec709 transfer function defined in GStreamer\nas GST_VIDEO_TRANSFER_BT709 (5), is to be replaced by its alias\nGST_VIDEO_TRANSFER_BT601 (16) only for the case of bt601 (aka 2:4:16:4)\ncolorimetry - see [1].\n\nCurrently the composition of the GStreamer/libcamera conversions:\ncolorimetry_from_colorspace (colorspace_from_colorimetry (bt601))\nreturns 2:4:5:4 instead of the expected 2:4:16:4 (bt601). This\ncauses negotiation error when the downstream element explicitly\nexpects bt601 colorimetry.\n\nMinimal example to reproduce the issue is with a pipeline handler\nthat do not set the optional color space in the stream configuration,\nfor instance vimc or imx8-isi:\nexport LIBCAMERA_PIPELINES_MATCH_LIST=\"vimc,imx8-isi\"\ngst-launch-1.0 -v libcamerasrc ! video/x-raw,colorimetry=bt601 ! fakesink\n\nAbove pipeline fails to start. This change memorizes downstream required\ntransfer function when mapped libcamera transfer is Rec709 in\ngst_libcamera_configure_stream_from_caps(), and restores the transfer\nfunction in gst_libcamera_stream_formats_to_caps().\n\n[1] https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/724\n\nBug: https://bugs.libcamera.org/show_bug.cgi?id=150\nSigned-off-by: Hou Qi <qi.hou@nxp.com>\n---\n src/gstreamer/gstlibcamera-utils.cpp | 20 ++++++++++++--------\n src/gstreamer/gstlibcamera-utils.h   |  5 +++--\n src/gstreamer/gstlibcamerasrc.cpp    |  6 ++++--\n 3 files changed, 19 insertions(+), 12 deletions(-)",
    "diff": "diff --git a/src/gstreamer/gstlibcamera-utils.cpp b/src/gstreamer/gstlibcamera-utils.cpp\nindex 732987ef..a466b305 100644\n--- a/src/gstreamer/gstlibcamera-utils.cpp\n+++ b/src/gstreamer/gstlibcamera-utils.cpp\n@@ -85,7 +85,7 @@ static struct {\n };\n \n static GstVideoColorimetry\n-colorimetry_from_colorspace(const ColorSpace &colorSpace)\n+colorimetry_from_colorspace(const ColorSpace &colorSpace, GstVideoTransferFunction transfer)\n {\n \tGstVideoColorimetry colorimetry;\n \n@@ -113,6 +113,8 @@ colorimetry_from_colorspace(const ColorSpace &colorSpace)\n \t\tbreak;\n \tcase ColorSpace::TransferFunction::Rec709:\n \t\tcolorimetry.transfer = GST_VIDEO_TRANSFER_BT709;\n+\t\tif (transfer != GST_VIDEO_TRANSFER_UNKNOWN)\n+\t\t\tcolorimetry.transfer = transfer;\n \t\tbreak;\n \t}\n \n@@ -144,7 +146,8 @@ colorimetry_from_colorspace(const ColorSpace &colorSpace)\n }\n \n static std::optional<ColorSpace>\n-colorspace_from_colorimetry(const GstVideoColorimetry &colorimetry)\n+colorspace_from_colorimetry(const GstVideoColorimetry &colorimetry,\n+\t\t\t    GstVideoTransferFunction *transfer)\n {\n \tstd::optional<ColorSpace> colorspace = ColorSpace::Raw;\n \n@@ -188,6 +191,7 @@ colorspace_from_colorimetry(const GstVideoColorimetry &colorimetry)\n \tcase GST_VIDEO_TRANSFER_BT2020_12:\n \tcase GST_VIDEO_TRANSFER_BT709:\n \t\tcolorspace->transferFunction = ColorSpace::TransferFunction::Rec709;\n+\t\t*transfer = colorimetry.transfer;\n \t\tbreak;\n \tdefault:\n \t\tGST_WARNING(\"Colorimetry transfer function %d not mapped in gstlibcamera\",\n@@ -379,7 +383,8 @@ gst_libcamera_stream_formats_to_caps(const StreamFormats &formats)\n }\n \n GstCaps *\n-gst_libcamera_stream_configuration_to_caps(const StreamConfiguration &stream_cfg)\n+gst_libcamera_stream_configuration_to_caps(const StreamConfiguration &stream_cfg,\n+\t\t\t\t\t   GstVideoTransferFunction transfer)\n {\n \tGstCaps *caps = gst_caps_new_empty();\n \tGstStructure *s = bare_structure_from_format(stream_cfg.pixelFormat);\n@@ -390,7 +395,7 @@ gst_libcamera_stream_configuration_to_caps(const StreamConfiguration &stream_cfg\n \t\t\t  nullptr);\n \n \tif (stream_cfg.colorSpace) {\n-\t\tGstVideoColorimetry colorimetry = colorimetry_from_colorspace(stream_cfg.colorSpace.value());\n+\t\tGstVideoColorimetry colorimetry = colorimetry_from_colorspace(stream_cfg.colorSpace.value(), transfer);\n \t\tg_autofree gchar *colorimetry_str = gst_video_colorimetry_to_string(&colorimetry);\n \n \t\tif (colorimetry_str)\n@@ -405,9 +410,8 @@ gst_libcamera_stream_configuration_to_caps(const StreamConfiguration &stream_cfg\n \treturn caps;\n }\n \n-void\n-gst_libcamera_configure_stream_from_caps(StreamConfiguration &stream_cfg,\n-\t\t\t\t\t GstCaps *caps)\n+void gst_libcamera_configure_stream_from_caps(StreamConfiguration &stream_cfg,\n+\t\t\t\t\t      GstCaps *caps, GstVideoTransferFunction *transfer)\n {\n \tGstVideoFormat gst_format = pixel_format_to_gst_format(stream_cfg.pixelFormat);\n \tguint i;\n@@ -495,7 +499,7 @@ gst_libcamera_configure_stream_from_caps(StreamConfiguration &stream_cfg,\n \t\tif (!gst_video_colorimetry_from_string(&colorimetry, colorimetry_str))\n \t\t\tg_critical(\"Invalid colorimetry %s\", colorimetry_str);\n \n-\t\tstream_cfg.colorSpace = colorspace_from_colorimetry(colorimetry);\n+\t\tstream_cfg.colorSpace = colorspace_from_colorimetry(colorimetry, transfer);\n \t}\n }\n \ndiff --git a/src/gstreamer/gstlibcamera-utils.h b/src/gstreamer/gstlibcamera-utils.h\nindex cab1c814..4978987c 100644\n--- a/src/gstreamer/gstlibcamera-utils.h\n+++ b/src/gstreamer/gstlibcamera-utils.h\n@@ -16,9 +16,10 @@\n #include <gst/video/video.h>\n \n GstCaps *gst_libcamera_stream_formats_to_caps(const libcamera::StreamFormats &formats);\n-GstCaps *gst_libcamera_stream_configuration_to_caps(const libcamera::StreamConfiguration &stream_cfg);\n+GstCaps *gst_libcamera_stream_configuration_to_caps(const libcamera::StreamConfiguration &stream_cfg,\n+\t\t\t\t\t\t    GstVideoTransferFunction transfer);\n void gst_libcamera_configure_stream_from_caps(libcamera::StreamConfiguration &stream_cfg,\n-\t\t\t\t\t      GstCaps *caps);\n+\t\t\t\t\t      GstCaps *caps, GstVideoTransferFunction *transfer);\n void gst_libcamera_get_framerate_from_caps(GstCaps *caps, GstStructure *element_caps);\n void gst_libcamera_clamp_and_set_frameduration(libcamera::ControlList &controls,\n \t\t\t\t\t       const libcamera::ControlInfoMap &camera_controls,\ndiff --git a/src/gstreamer/gstlibcamerasrc.cpp b/src/gstreamer/gstlibcamerasrc.cpp\nindex 8efa25f4..5e9e843d 100644\n--- a/src/gstreamer/gstlibcamerasrc.cpp\n+++ b/src/gstreamer/gstlibcamerasrc.cpp\n@@ -433,6 +433,8 @@ static bool\n gst_libcamera_src_negotiate(GstLibcameraSrc *self)\n {\n \tGstLibcameraSrcState *state = self->state;\n+\tstd::vector<GstVideoTransferFunction> transfer(state->srcpads_.size(),\n+\t\t\t\t\t\t       GST_VIDEO_TRANSFER_UNKNOWN);\n \n \tg_autoptr(GstStructure) element_caps = gst_structure_new_empty(\"caps\");\n \n@@ -448,7 +450,7 @@ gst_libcamera_src_negotiate(GstLibcameraSrc *self)\n \n \t\t/* Fixate caps and configure the stream. */\n \t\tcaps = gst_caps_make_writable(caps);\n-\t\tgst_libcamera_configure_stream_from_caps(stream_cfg, caps);\n+\t\tgst_libcamera_configure_stream_from_caps(stream_cfg, caps, &transfer[i]);\n \t\tgst_libcamera_get_framerate_from_caps(caps, element_caps);\n \t}\n \n@@ -476,7 +478,7 @@ gst_libcamera_src_negotiate(GstLibcameraSrc *self)\n \t\tGstPad *srcpad = state->srcpads_[i];\n \t\tconst StreamConfiguration &stream_cfg = state->config_->at(i);\n \n-\t\tg_autoptr(GstCaps) caps = gst_libcamera_stream_configuration_to_caps(stream_cfg);\n+\t\tg_autoptr(GstCaps) caps = gst_libcamera_stream_configuration_to_caps(stream_cfg, transfer[i]);\n \t\tgst_libcamera_framerate_to_caps(caps, element_caps);\n \n \t\tif (!gst_pad_push_event(srcpad, gst_event_new_caps(caps)))\n",
    "prefixes": [
        "v4"
    ]
}