Show a patch.

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

{
    "id": 22304,
    "url": "https://patchwork.libcamera.org/api/patches/22304/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/22304/",
    "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": "<20241213060319.2877936-1-qi.hou@nxp.com>",
    "date": "2024-12-13T06:03:19",
    "name": "[v2] gstreamer: keep same transfer with that in negotiated caps",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "11b153e0b5b6db40fa802b635760a6c55e933d09",
    "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/22304/mbox/",
    "series": [
        {
            "id": 4880,
            "url": "https://patchwork.libcamera.org/api/series/4880/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4880",
            "date": "2024-12-13T06:03:19",
            "name": "[v2] gstreamer: keep same transfer with that in negotiated caps",
            "version": 2,
            "mbox": "https://patchwork.libcamera.org/series/4880/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/22304/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/22304/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 EF65EC32F0\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 13 Dec 2024 06:04:15 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D717967EDE;\n\tFri, 13 Dec 2024 07:04:14 +0100 (CET)",
            "from EUR02-AM0-obe.outbound.protection.outlook.com\n\t(mail-am0eur02on2061d.outbound.protection.outlook.com\n\t[IPv6:2a01:111:f403:2606::61d])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 663646189B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 13 Dec 2024 07:03:44 +0100 (CET)",
            "from PAXPR04MB8285.eurprd04.prod.outlook.com\n\t(2603:10a6:102:1ca::15)\n\tby PA2PR04MB10186.eurprd04.prod.outlook.com (2603:10a6:102:404::7)\n\twith Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8251.16;\n\tFri, 13 Dec 2024 06:03:42 +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\tFri, 13 Dec 2024 06:03:41 +0000"
        ],
        "Authentication-Results": [
            "lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"EaQF+cOb\";\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=JrJdq+/RG9ZN1UWe65H38TdSx4MkHCzD0XoZ8uaumV8jh1ly4fJRzRrmlmBOQp9sJytP8OaRLwkPlrgOaHkAxUW+o06nO07sUyUm8AGymi87uGfCCv3//timWAYifWiTtuxL1wMbt18F2czd7NJxpfD+DI3QWrIaRKS30VfLemCgDtnvN/pjD5eb6KG5m97SEQe4sTUic3XguDYC9v/jV5o40m5nuhcorHbXM9nUjdAgx0xzor+AdnMNYgkFW6kLnKG8wz4wMNSh6tSDgYBv2vz21twiue+GLinGk0I640HLSoeLa7mWsJ9QrGfD54momWx7nTq6saIzQEhtBlQXFw==",
        "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=9nvM3iY+Prcb5FORfjI4WVoI++cmP+ZsJ78var6NgUw=;\n\tb=Cis2Yw5kERV65S3JMPwLMhEFYTPyg2U75bkrgPsDGkTy8kuSVr0Z5L4OhpmOkf/jZprfrjhDVIFtm0/Ugg/KYG4POlhPkVZEzdj2wOFxS5i+X5qLF7JIZbg7MG8MPlBjUqZP7SQWuduGbiQI+kv0kEawSVmwWBdyeD5r0KnLGMGJLAaBFc3r4zuxC01dXjBGLVhKKzOMF1lGRMZfzMiP45SP39VoFCMeOFD9XsU/tc6tqNyJc5sMoYYX/+MW6m+N6hrC+s6RRIrY3WisjGj3+/R4elivnqrpnhRROCj+i2je2w8aO+48c8fvCu9UvcD7tiaG/92hTUsY+HtyXbxujg==",
        "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=9nvM3iY+Prcb5FORfjI4WVoI++cmP+ZsJ78var6NgUw=;\n\tb=EaQF+cObt6LXu/AtRZCORWbRYwLzBWKUKGRdwvggVUW+Z6gZujEcBHbiPyvJP6UG28eIlzKPbjGtg85iy6EySVNXlchIIGf/iQQKAyMFSMvxiddXw3UP7iZ6PDV87Bz5czyWGKy3uEPt998JhPDqRWJftWGvhJanKOyshgfaeDQrnd+VKCwKVJs8MmysajAD15sgnhvgVjS+q8Aw8dZg3bdQ3lW9u+CEG6nYZFhlIZoIdDqNXorW61JS3B+xs4wCH5FoBcJeulgXsnqP86j9EWQf7FLzfHHCNhVR4fd0iPhig4o8FqDxUKFekHOjD5XJlUxvoj8gwnUMB5E7m7WXqQ==",
        "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 v2] gstreamer: keep same transfer with that in negotiated\n\tcaps",
        "Date": "Fri, 13 Dec 2024 15:03:19 +0900",
        "Message-Id": "<20241213060319.2877936-1-qi.hou@nxp.com>",
        "X-Mailer": "git-send-email 2.34.1",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-ClientProxiedBy": "JH0PR01CA0136.apcprd01.prod.exchangelabs.com\n\t(2603:1096:990:5b::12) 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_|PA2PR04MB10186:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "ac34df83-d952-442c-8c54-08dd1b3be4e4",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;\n\tARA:13230040|52116014|376014|366016|1800799024|38350700014; ",
        "X-Microsoft-Antispam-Message-Info": "kEDUGsaNn4TsjZyCpwAmAZ4mzR99jxGca0UsfSK+kUWGH1d4hva/LbLQiQCixLFoln7quqjNJ4vnAUxgQ8IeSwYvgsGCNMdOHgHmrJ7SfHX+mkxhOpxZy0RW6KwjAZs81CHOARifTBgG9ngGj+vMRcGu6QdqQdK1YhYD+0jZRZbU4bykC/pziG9Iy3AH1YPrdarvl93CT7KNvbVHCFhnKGPlgPOnvb9mo1r/7VsvZ6Huf/iDo7oDmvACCStQEovFgjmqXrTPV3c9+YPI08c3UsN2OsQo06QTTi2LHYEjS5Sttt/AehiQHEu6TufTG7DGcrRVngGuO14rBW8IJyaVvI48wkKuMxeT2Vjhy1LKxRNo/mlJJO4NAeQiTeBPaaXcX2NBz4Ec1r8ST6FPZNaD6BdizrJUdi1oF0CHlx9kEUc/V/XUDUVcmBcf+H7Eij5uAkwZs1+/QAwSF13jjzO5T5KaH1U8xLbpU82yvwITFXY+XCl+owUpgFWWocrSMraahBemUaVqX5yFPzfjL0SKIDsiQU9v5eZ1kX63UWqaDzz67fwni+8WxaOjgheO06q8XMHRwtw3NhJATUDbTtrmDarlVoGMAnsPtDPIWiX7BO/noqZ5QAVQ/YWbNWtBuyXwsO/7WTQ1F8aB+GI92FmAZTOOWfeX+Nsp9oKWsCROcZAdRCTKrxgfrDCbYb00kKeWK0RQyoXtwl4BFXGwizRFhYhTFQgCnDfU0MKFMjvxBv2Wo+TjoZVaA4Ac9jiFGsNBEZjnBs45LRYFqXe63/gfdVAYZveW3AQ9qcDjF5FSzp/l2qJiqLbrE17pTwhITFzbdLh8JyEtP6uxY3qupHlESfax/RV04+pqzixRV3HNEwpM1paCSTvLxVslC2WQZiRSecAxfgK2Y6sxcsdKWaqPgTTaabQoASWDQp1Ya5w4adffMqY0TI9mA3DLlhPvAZpLRyb2Q0Jccxh/nArRYhZBibbwmHyr7Ujj6qVmOpF2Vw9hM9jbZJLIeD59pnSiAcUdO1VgdDYEkZi7Gav1ksDixX5gpkXTjOzWMYOIjZrcPK0Xd7fLCQCMIfUUvNAQgOjiAprmVpqcNwKenZ/oWNbuxftXnnuIFrNldYXWm9CdasH46/s6HQ5fRcdpg2QoBsBhL5cKTTz3vcr+SzbzLK7n/oWEPEcB8bJLjuDhpbm4dz3p6tyIBALv5j7jrAb9trOmQXlYDdGGuGBKfKHtXPuiKXinpm7GZPWy/KBXv5E5tRXO1OziYW/kyNAchUc376AHbQe5qHFF43XaVx7a/kaRBL2F7HhMm7mWh45tSfp9Y0kIfjiTIbKutt674NjBZR9rsg3GZLKFlJhkMDQBE40pLgS4Fsd+pVy9Cll9r7qHzWo=",
        "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)(376014)(366016)(1800799024)(38350700014);\n\tDIR:OUT; SFP:1101; ",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "YMkwE+zJ6D/yn40t3+zwbjCyOtT2dhrBY81Z2Tdwz41vL+FZYVGAfDTQo+oXLHp+dfcVt/yzL/T8qZms9KvT+8Ie8t288ciyJH542du3bOsqkZ4Vz8ilc2rpqkys2+4USkBkwIOhAW+DjrdI50klYGwp7XwxTbm3FR0m7ivS+zFoXj/H6HbIS6d7yg49eLNWL5Gfha4v4KGJPBobTnba36o9yOTdhq/i4l8VFzohBd0kHPK7JNTeagOKAznB67Zyrv14fDQMcRj22uY0yS1AGJE73UrpujeVfv+3VNR1vL3roItsenyDWp62q/lehLchi9WuXxJ/skBHrh6xPbC3AnXueqpvielE1kjs/sPhy3zxcJ+OL6l8qn3EO0D3JFNxuAvlSzo1hUjAe0vywBI61rYFDD/LHDA2M8+V8zH26onCgpCdpJjf8W0eVQWFeStsvP53g/qV7hNzeslhdwXpNlqgimoQf8EiFl3HRxUGdq82wqLjL2ktZAMMYPIEOeUM5tkDljmyYyTsezF1cOWEVY6Q8icohaK2nccmV5xo8qPkb55RcIpL2C4Xr6qxN8lzxbubrwd3BFVAje2mGnQQBq8Y0HtnNZ8VFh5xtzYc3f2psW6xl3q6x/t5xmMhplpulLjKym9I58qGrHxiSiU7XbRlXqGT/DvTXCvEFryPK05XlAu52azJESouwcdXyycBt4goD1T7j2ywGhnXVyCSTe8wtq67zrVNq6N58GH4UmU4bP4fja/JBO71GKH6bMC9TYiYg5ZVketrDBlAzbAlpB/UyvQjhtG1ZQi5vMDfWX5dJcL/hQJh7qqG1nMiAt2lIpe1x5oRWLUfRBRYsTNZwvuAwn2Kp9UqmvT2tN07rAQc3caDOrR6zSKNY6pA5BfH+0yDsMVTC4ZvVcrP2TZuDyjr69ZcMgG1hlEgS9RsVvw98u3bL+dFVNl/joaMLNObUV2D6n4IdhCWkYCHm6SinrHHraT9sEzVpw9oNwxnt5Rb9rHDDvHZ4t0bEIzqq7bR1yAjo4iq+7vRKaKOimX6QYOexOasyMOnALhL0TLJwXk7G1hbypFrHGeh/4ArOhyTjHImTlG82Jejw+hAgZ7QiqqWZfOCs/jQB3diTtgW/7BrNQAyClq+t7zn0aovdXrhaDgRXTQvnhA+AfH2j21JgdyVflWfl3Hc3YyGuy4q3s9qte58EmjEkzAXHiw/zJXBFPFP5St4IqbT276panqK7/PwTfRi7Kn7lBgV+w6rnl72KMawraaOkkw4Mkk8VZd8gdrCTIPZU4zRKFe8OaVYvJMAUkO6ux81uLWEHDvAXbuIgaiOjVv568JUyJWmqGylEx6A66cfp7Fn7Yb6fK3XiXig/qGJDa3TdsFCXsFVffDxgqWKEH5yAWtiFhaWDrZzrGDUu22U5qLcRcsXGvI6VE5JABdyQYme60kO7PqAwrv0CYZYjGRsxX2JwNFDGI2yNwbh3F7BM7QXKibGqLAkgD7AVF/9kjN12SWAN4qIxHoj+2SpoWi/aYCK2r8zUXIUTlUm8X7SpVi/uEVSuA6cJdP0coues1Ft8X+h+bBSU+k=",
        "X-OriginatorOrg": "nxp.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "ac34df83-d952-442c-8c54-08dd1b3be4e4",
        "X-MS-Exchange-CrossTenant-AuthSource": "PAXPR04MB8285.eurprd04.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "13 Dec 2024 06:03:41.8330\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": "MhX6z+bEK0+cKvHacYuFwWorEjLSUQI8S3McJX1q+P49ngB4Ol3PvB0hK/7VrLJc",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "PA2PR04MB10186",
        "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 | 19 +++++++++++--------\n src/gstreamer/gstlibcamera-utils.h   |  5 +++--\n src/gstreamer/gstlibcamerasrc.cpp    |  6 ++++--\n 3 files changed, 18 insertions(+), 12 deletions(-)",
    "diff": "diff --git a/src/gstreamer/gstlibcamera-utils.cpp b/src/gstreamer/gstlibcamera-utils.cpp\nindex 732987ef..23756b15 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)\n+\t\t\tcolorimetry.transfer = transfer;\n \t\tbreak;\n \t}\n \n@@ -144,7 +146,7 @@ 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, GstVideoTransferFunction *transfer)\n {\n \tstd::optional<ColorSpace> colorspace = ColorSpace::Raw;\n \n@@ -188,6 +190,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 +382,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 +394,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 +409,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 +498,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..0f0d501e 100644\n--- a/src/gstreamer/gstlibcamerasrc.cpp\n+++ b/src/gstreamer/gstlibcamerasrc.cpp\n@@ -433,12 +433,14 @@ static bool\n gst_libcamera_src_negotiate(GstLibcameraSrc *self)\n {\n \tGstLibcameraSrcState *state = self->state;\n+\tGstVideoTransferFunction transfer[state->srcpads_.size()];\n \n \tg_autoptr(GstStructure) element_caps = gst_structure_new_empty(\"caps\");\n \n \tfor (gsize i = 0; i < state->srcpads_.size(); i++) {\n \t\tGstPad *srcpad = state->srcpads_[i];\n \t\tStreamConfiguration &stream_cfg = state->config_->at(i);\n+\t\ttransfer[i] = GST_VIDEO_TRANSFER_UNKNOWN;\n \n \t\t/* Retrieve the supported caps. */\n \t\tg_autoptr(GstCaps) filter = gst_libcamera_stream_formats_to_caps(stream_cfg.formats());\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": [
        "v2"
    ]
}