[{"id":32119,"web_url":"https://patchwork.libcamera.org/comment/32119/","msgid":"<20241112083432.GC5359@pendragon.ideasonboard.com>","date":"2024-11-12T08:34:32","subject":"Re: [PATCH] gstreamer: Read correct colorimetry from caps into the\n\tstream configuration","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Hou,\n\n(CC'ing Nicolas Dufresne)\n\nThank you for the patch.\n\nOn Fri, Nov 08, 2024 at 06:12:46PM +0900, Hou Qi wrote:\n> When libcamerasrc is negotiating with downstream element, it first\n> extracts colorimetry field from downstream supported caps, then set\n> this colorimetry to its stream configuration and propagates the\n> colorimetry downstream.\n> \n> Currently libamerasrc only considers the case there is one colorimetry\n> in colorimetry field of downstream caps. But the issue is that\n> downstream caps may report a list of supported colorimetry, which\n> causes libcamerasrc to set unknown colorimetry to stream configuration\n> and negotiate fail with downstream element.\n> \n> In order to fix the issue, get the first string if colorimetry field\n> holds string list to set it to stream configuration.\n> \n> Signed-off-by: Hou Qi <qi.hou@nxp.com>\n> ---\n>  src/gstreamer/gstlibcamera-utils.cpp | 15 ++++++++++++++-\n>  1 file changed, 14 insertions(+), 1 deletion(-)\n> \n> diff --git a/src/gstreamer/gstlibcamera-utils.cpp b/src/gstreamer/gstlibcamera-utils.cpp\n> index 732987ef..2c1ebce8 100644\n> --- a/src/gstreamer/gstlibcamera-utils.cpp\n> +++ b/src/gstreamer/gstlibcamera-utils.cpp\n> @@ -489,9 +489,22 @@ gst_libcamera_configure_stream_from_caps(StreamConfiguration &stream_cfg,\n>  \n>  \t/* Configure colorimetry */\n>  \tif (gst_structure_has_field(s, \"colorimetry\")) {\n> -\t\tconst gchar *colorimetry_str = gst_structure_get_string(s, \"colorimetry\");\n> +\t\tconst GValue *mode;\n> +\t\tconst gchar *colorimetry_str = NULL;\n>  \t\tGstVideoColorimetry colorimetry;\n>  \n> +\t\tmode = gst_structure_get_value(s, \"colorimetry\");\n\n\"mode\" seems a weird name, how about calling it \"value\" ?\n\n> +\n> +\t\tif (G_VALUE_HOLDS_STRING(mode)) {\n> +\t\t\tcolorimetry_str = gst_structure_get_string(s, \"colorimetry\");\n> +\t\t} else if (GST_VALUE_HOLDS_LIST(mode)) {\n> +\t\t\tconst GValue *first_element = gst_value_list_get_value(mode, 0);\n> +\n> +\t\t\tif (G_VALUE_HOLDS_STRING(first_element)) {\n> +\t\t\t\tcolorimetry_str = g_value_get_string(first_element);\n> +\t\t\t}\n\nNo need for curly brackets here.\n\n> +\t\t}\n\nWould the following be simpler and more readable ?\n\n\t\tif (GST_VALUE_HOLDS_LIST(value))\n\t\t\tvalue = gst_value_list_get_value(value, 0);\n\t\tif (G_VALUE_HOLDS_STRING(value))\n\t\t\tcolorimetry_str = g_value_get_string(value);\n\nWhat happens if neither condition is true though, will\ngst_video_colorimetry_from_string() handle a null colorimetry_str\ngracefully ?\n\n> +\n>  \t\tif (!gst_video_colorimetry_from_string(&colorimetry, colorimetry_str))\n>  \t\t\tg_critical(\"Invalid colorimetry %s\", colorimetry_str);\n>","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 21ECABE173\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 12 Nov 2024 08:34:42 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4FBA5657DF;\n\tTue, 12 Nov 2024 09:34:41 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 54CDA65474\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 12 Nov 2024 09:34:40 +0100 (CET)","from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi\n\t[81.175.209.231])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id D60C16AF;\n\tTue, 12 Nov 2024 09:34:27 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"Piu0pEzO\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1731400468;\n\tbh=pZUIKviVyA7KeywyPZPSm12JT9pfx06twSgN+yMvjYo=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=Piu0pEzOaerTRlFf6eOScwS4V2vQNORwsAcLkySDz46kqx0X2Q5CqfG2wOYqCfKSJ\n\tqEjrTgBwu+68J4IgXv3i8KLuPh0+VCQ0ZM+Tlu5y71Wd3qqZbITby0F/neze4ZDp4E\n\tMijOa2rE6QFWv5j6xfMvLnGyad/V5a2sa76ZRigQ=","Date":"Tue, 12 Nov 2024 10:34:32 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Hou Qi <qi.hou@nxp.com>","Cc":"libcamera-devel@lists.libcamera.org, jared.hu@nxp.com,\n\tjulien.vuillaumier@nxp.com, Nicolas Dufresne <nicolas@ndufresne.ca>","Subject":"Re: [PATCH] gstreamer: Read correct colorimetry from caps into the\n\tstream configuration","Message-ID":"<20241112083432.GC5359@pendragon.ideasonboard.com>","References":"<20241108091246.3753388-1-qi.hou@nxp.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20241108091246.3753388-1-qi.hou@nxp.com>","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>"}},{"id":32126,"web_url":"https://patchwork.libcamera.org/comment/32126/","msgid":"<c92beed89861907d92e3e2dc2d9bf64485c707c1.camel@ndufresne.ca>","date":"2024-11-12T18:02:48","subject":"Re: [PATCH] gstreamer: Read correct colorimetry from caps into the\n\tstream configuration","submitter":{"id":30,"url":"https://patchwork.libcamera.org/api/people/30/","name":"Nicolas Dufresne","email":"nicolas@ndufresne.ca"},"content":"Le vendredi 08 novembre 2024 à 18:12 +0900, Hou Qi a écrit :\n> When libcamerasrc is negotiating with downstream element, it first\n> extracts colorimetry field from downstream supported caps, then set\n> this colorimetry to its stream configuration and propagates the\n> colorimetry downstream.\n> \n> Currently libamerasrc only considers the case there is one colorimetry\n> in colorimetry field of downstream caps. But the issue is that\n> downstream caps may report a list of supported colorimetry, which\n> causes libcamerasrc to set unknown colorimetry to stream configuration\n> and negotiate fail with downstream element.\n> \n> In order to fix the issue, get the first string if colorimetry field\n> holds string list to set it to stream configuration.\n> \n> Signed-off-by: Hou Qi <qi.hou@nxp.com>\n> ---\n>  src/gstreamer/gstlibcamera-utils.cpp | 15 ++++++++++++++-\n>  1 file changed, 14 insertions(+), 1 deletion(-)\n> \n> diff --git a/src/gstreamer/gstlibcamera-utils.cpp b/src/gstreamer/gstlibcamera-utils.cpp\n> index 732987ef..2c1ebce8 100644\n> --- a/src/gstreamer/gstlibcamera-utils.cpp\n> +++ b/src/gstreamer/gstlibcamera-utils.cpp\n> @@ -489,9 +489,22 @@ gst_libcamera_configure_stream_from_caps(StreamConfiguration &stream_cfg,\n>  \n>  \t/* Configure colorimetry */\n>  \tif (gst_structure_has_field(s, \"colorimetry\")) {\n> -\t\tconst gchar *colorimetry_str = gst_structure_get_string(s, \"colorimetry\");\n> +\t\tconst GValue *mode;\n> +\t\tconst gchar *colorimetry_str = NULL;\n>  \t\tGstVideoColorimetry colorimetry;\n>  \n> +\t\tmode = gst_structure_get_value(s, \"colorimetry\");\n> +\n> +\t\tif (G_VALUE_HOLDS_STRING(mode)) {\n> +\t\t\tcolorimetry_str = gst_structure_get_string(s, \"colorimetry\");\n> +\t\t} else if (GST_VALUE_HOLDS_LIST(mode)) {\n> +\t\t\tconst GValue *first_element = gst_value_list_get_value(mode, 0);\n> +\n> +\t\t\tif (G_VALUE_HOLDS_STRING(first_element)) {\n> +\t\t\t\tcolorimetry_str = g_value_get_string(first_element);\n> +\t\t\t}\n> +\t\t}\n> +\n\ngst_libcamera_configure_stream_from_caps() is exepected to be called with fixed\ncaps. Feel free to add an assert on that, fixation should happen earlier\ninstead. This could be as simple as gst_caps_fixate(), specially that you are\npicking the first value in the list.\n\nNicolas\n\n>  \t\tif (!gst_video_colorimetry_from_string(&colorimetry, colorimetry_str))\n>  \t\t\tg_critical(\"Invalid colorimetry %s\", colorimetry_str);\n>","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 899A4C324C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 12 Nov 2024 18:02:53 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 8F916657F7;\n\tTue, 12 Nov 2024 19:02:52 +0100 (CET)","from mail-qt1-x82b.google.com (mail-qt1-x82b.google.com\n\t[IPv6:2607:f8b0:4864:20::82b])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 44902657B0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 12 Nov 2024 19:02:51 +0100 (CET)","by mail-qt1-x82b.google.com with SMTP id\n\td75a77b69052e-46098928354so44725761cf.1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 12 Nov 2024 10:02:51 -0800 (PST)","from nicolas-tpx395.localdomain ([2606:6d00:15:862e::580])\n\tby smtp.gmail.com with ESMTPSA id\n\td75a77b69052e-462ff57e935sm77752381cf.57.2024.11.12.10.02.49\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tTue, 12 Nov 2024 10:02:49 -0800 (PST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=ndufresne-ca.20230601.gappssmtp.com\n\theader.i=@ndufresne-ca.20230601.gappssmtp.com\n\theader.b=\"M/IgTnLZ\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=ndufresne-ca.20230601.gappssmtp.com; s=20230601; t=1731434570;\n\tx=1732039370; darn=lists.libcamera.org; \n\th=mime-version:user-agent:content-transfer-encoding:references\n\t:in-reply-to:date:cc:to:from:subject:message-id:from:to:cc:subject\n\t:date:message-id:reply-to;\n\tbh=ecJ2Gerc1dec89xpJ7IOqtwNnYYWXIwldhqNJylV6Fg=;\n\tb=M/IgTnLZ/Bmw2NR4BXoFcFEZ0N07L9+rNXql0+aiva9h74t80Ys/llElS3V5mwR4HP\n\tWI9u3qsxCJsj2/7rKrzpYhdsaeetCg3K7SXh8dkd1QeGo6FcSASfP4z/KwiB1A2BeDKp\n\twiTVlmZpgPbreKoAPFJjLELzScPAZTRgzHVAapO4Umm9rkIIuGq6Ugql24IsLkCoSIga\n\tb/HrS5ugm9Cy0/BIYLbyjWR8DpTasEUXFLE+eb1QyH1nbDlU1sK+viiE4oIOZoQm2RKl\n\tTKBlqkAqippVyugogsUyucNAtPu3ommrImyzp7H24Kl7k+LTsWY39pRs2lhImZhuNnqw\n\trUzQ==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1731434570; x=1732039370;\n\th=mime-version:user-agent:content-transfer-encoding:references\n\t:in-reply-to:date:cc:to:from:subject:message-id:x-gm-message-state\n\t:from:to:cc:subject:date:message-id:reply-to;\n\tbh=ecJ2Gerc1dec89xpJ7IOqtwNnYYWXIwldhqNJylV6Fg=;\n\tb=hrPopTMhQyawCcEbGgSRSPdyfiXTh3WVj7pftBzvTcN8igrlYm2vWY6Ua6EpDFtIdl\n\t8zArUpw2A70WxtE8aFnsaJ/hTW1F7f8fgNYdc83GyQnMBqEHYr4lcAfxbN7cEFh3bpZj\n\t6svLYwz1pLRAFkPQdszdUul1w4RqmnVCzY3/Ye/c4l5ybxceT2iYVKrwGm2BqwgzJ1Jq\n\tBh/m3Z22xupifmVNN6CxhslnFYJdvWTsbGb83NgtO4HflEus+ZueBmQSBYAjalD7QTrT\n\tBHInbk7E4EyQeXuHg22uV65+zVLXxz7zpsksymZdrVaeyQlrt3lh6VpFrYPPY63F3oMa\n\tqgRw==","X-Forwarded-Encrypted":"i=1;\n\tAJvYcCWM24FHSI7Ad3hkSmIJx8gA7/fEaZy+dxg0JMCYDP8hRyU3Scs7eP3RRjYpjyjBo1jeIAqxpTjelKbzAyr/E1A=@lists.libcamera.org","X-Gm-Message-State":"AOJu0YxyEOl5s5MzAk6PDpdjW35UZXjaYbM0ZMaS/BXyfqfEm+I2z0Jq\n\t48yrp0vdeaOzOGyMZSFV3nVJN6EsL9uI/rBqpIxGwBW2ovIl1rc7vqYkYX3LVfE=","X-Google-Smtp-Source":"AGHT+IHLCbAZWXBCB/zeH5TXCfsZDEsRS4oyA6RvSdsdKgZJvoV8BALYsOzB0LtJPD0KUmp1spIMeg==","X-Received":"by 2002:a05:622a:610a:b0:460:e9d3:e989 with SMTP id\n\td75a77b69052e-4630931924emr241019381cf.8.1731434569975; \n\tTue, 12 Nov 2024 10:02:49 -0800 (PST)","Message-ID":"<c92beed89861907d92e3e2dc2d9bf64485c707c1.camel@ndufresne.ca>","Subject":"Re: [PATCH] gstreamer: Read correct colorimetry from caps into the\n\tstream configuration","From":"Nicolas Dufresne <nicolas@ndufresne.ca>","To":"Hou Qi <qi.hou@nxp.com>, libcamera-devel@lists.libcamera.org","Cc":"jared.hu@nxp.com, julien.vuillaumier@nxp.com","Date":"Tue, 12 Nov 2024 13:02:48 -0500","In-Reply-To":"<20241108091246.3753388-1-qi.hou@nxp.com>","References":"<20241108091246.3753388-1-qi.hou@nxp.com>","Content-Type":"text/plain; charset=\"UTF-8\"","Content-Transfer-Encoding":"quoted-printable","User-Agent":"Evolution 3.54.1 (3.54.1-1.fc41) ","MIME-Version":"1.0","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>"}},{"id":32138,"web_url":"https://patchwork.libcamera.org/comment/32138/","msgid":"<PAXPR04MB82856EF0035096323B1A3365975A2@PAXPR04MB8285.eurprd04.prod.outlook.com>","date":"2024-11-13T10:20:24","subject":"RE: [EXT] Re: [PATCH] gstreamer: Read correct colorimetry from caps\n\tinto the stream configuration","submitter":{"id":195,"url":"https://patchwork.libcamera.org/api/people/195/","name":"Qi Hou","email":"qi.hou@nxp.com"},"content":"Hi Nicolas,\n\nI see there is already assert check in gst_libcamera_configure_stream_from_caps().\n\n\t/* First fixate the caps using default configuration value. */\n\tg_assert(gst_caps_is_writable(caps));\n\nRegards,\nQi Hou\n\n-----Original Message-----\nFrom: Nicolas Dufresne <nicolas@ndufresne.ca> \nSent: 2024年11月13日 2:03\nTo: Qi Hou <qi.hou@nxp.com>; libcamera-devel@lists.libcamera.org\nCc: Jared Hu <jared.hu@nxp.com>; Julien Vuillaumier <julien.vuillaumier@nxp.com>\nSubject: [EXT] Re: [PATCH] gstreamer: Read correct colorimetry from caps into the stream configuration\n\nCaution: This is an external email. Please take care when clicking links or opening attachments. When in doubt, report the message using the 'Report this email' button\n\n\nLe vendredi 08 novembre 2024 à 18:12 +0900, Hou Qi a écrit :\n> When libcamerasrc is negotiating with downstream element, it first \n> extracts colorimetry field from downstream supported caps, then set \n> this colorimetry to its stream configuration and propagates the \n> colorimetry downstream.\n>\n> Currently libamerasrc only considers the case there is one colorimetry \n> in colorimetry field of downstream caps. But the issue is that \n> downstream caps may report a list of supported colorimetry, which \n> causes libcamerasrc to set unknown colorimetry to stream configuration \n> and negotiate fail with downstream element.\n>\n> In order to fix the issue, get the first string if colorimetry field \n> holds string list to set it to stream configuration.\n>\n> Signed-off-by: Hou Qi <qi.hou@nxp.com>\n> ---\n>  src/gstreamer/gstlibcamera-utils.cpp | 15 ++++++++++++++-\n>  1 file changed, 14 insertions(+), 1 deletion(-)\n>\n> diff --git a/src/gstreamer/gstlibcamera-utils.cpp \n> b/src/gstreamer/gstlibcamera-utils.cpp\n> index 732987ef..2c1ebce8 100644\n> --- a/src/gstreamer/gstlibcamera-utils.cpp\n> +++ b/src/gstreamer/gstlibcamera-utils.cpp\n> @@ -489,9 +489,22 @@ \n> gst_libcamera_configure_stream_from_caps(StreamConfiguration \n> &stream_cfg,\n>\n>       /* Configure colorimetry */\n>       if (gst_structure_has_field(s, \"colorimetry\")) {\n> -             const gchar *colorimetry_str = gst_structure_get_string(s, \"colorimetry\");\n> +             const GValue *mode;\n> +             const gchar *colorimetry_str = NULL;\n>               GstVideoColorimetry colorimetry;\n>\n> +             mode = gst_structure_get_value(s, \"colorimetry\");\n> +\n> +             if (G_VALUE_HOLDS_STRING(mode)) {\n> +                     colorimetry_str = gst_structure_get_string(s, \"colorimetry\");\n> +             } else if (GST_VALUE_HOLDS_LIST(mode)) {\n> +                     const GValue *first_element = \n> + gst_value_list_get_value(mode, 0);\n> +\n> +                     if (G_VALUE_HOLDS_STRING(first_element)) {\n> +                             colorimetry_str = g_value_get_string(first_element);\n> +                     }\n> +             }\n> +\n\ngst_libcamera_configure_stream_from_caps() is exepected to be called with fixed caps. Feel free to add an assert on that, fixation should happen earlier instead. This could be as simple as gst_caps_fixate(), specially that you are picking the first value in the list.\n\nNicolas\n\n>               if (!gst_video_colorimetry_from_string(&colorimetry, colorimetry_str))\n>                       g_critical(\"Invalid colorimetry %s\", \n> colorimetry_str);\n>","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 33BB9BE173\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 13 Nov 2024 10:20:35 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 3414C65802;\n\tWed, 13 Nov 2024 11:20:34 +0100 (CET)","from EUR05-VI1-obe.outbound.protection.outlook.com\n\t(mail-vi1eur05on2061c.outbound.protection.outlook.com\n\t[IPv6:2a01:111:f403:2613::61c])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 3214B605B5\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 13 Nov 2024 11:20:32 +0100 (CET)","from PAXPR04MB8285.eurprd04.prod.outlook.com\n\t(2603:10a6:102:1ca::15)\n\tby DU0PR04MB9347.eurprd04.prod.outlook.com (2603:10a6:10:357::18)\n\twith Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.28;\n\tWed, 13 Nov 2024 10:20:25 +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%3]) with mapi id 15.20.8158.013;\n\tWed, 13 Nov 2024 10:20:25 +0000"],"Authentication-Results":["lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"Y49djM/l\";\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=BVpuIYq1uPtpz3Gn2iAa2Z+FE7piUUl61BMXs2abxNYK/F4s9NAetFLyRCM8qpS/C/3tjPLIys9T5y1CjozscStap8+wVtWYPWEICPHQRxvF8RdAdVHm/3BkIW9OMEGpb+Qgk55aheKbfkOyO6uKEMdVGdbZ6YdAdZzuwIgEtO42Q2zOLJgpjc+TFkMm3+HTLWZQ0a8jQv2eprNIOGpIdSqexauC1PQFodPhZ4kRY2sY63dtLas7tM2BZOcCw+DcNLt8VDAvj9HcnVHTMAGpJQWqmvwi15s2hQ4Jyl0Vea+lYSOP6SmEEOpVHOv1mAJQJrIS6rqxDCGt0XtmklY9MQ==","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=g1Au4GtiE2LdDgLa7ivMYWmOeRoaGu+yH93lF9sJ9WY=;\n\tb=Gwy7CL4m0jP0O9FWYQ1YFB5JATnNVWp2gHQo+rHF8/dmtQEFQ7wFBmmI9H9OWi8Sylit0GFm9D+P7JDWcV5jAhJTdEP4qPA5D7qxXFi3jO5Yic7Hx48Nvb6X+DN5qVaKUHKZrbf2cl80FR1NLwhwd34VUOEyK8xqaktvDRYT2EkjSze8YojXig00zKPeDRsA7V1tJ1Xh77J+G3BWakgvqsG8TyPrKvgPPYnW8cI3ZTympTrHi5LxhbEleTLrsk7sD+JLhVGQmR8ocAl4X/obx30pp1Vt66mjXUMaZTA2DMijy0oBSLwBPNm9hwuxq6FR94EgL5Xxc2URbFIJccXhhQ==","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=g1Au4GtiE2LdDgLa7ivMYWmOeRoaGu+yH93lF9sJ9WY=;\n\tb=Y49djM/lei/glubNLlWX0EF0wJbDNiWGzIr5nY2LX0DEXe/tBwRi5XH1Iyr5J265CSnQnWRJ/I1xgA7j2TeczkHYX9M+0xogoVjWUtuxDsbLUZPxnYoyKhnV9OrPKSh/MehdCOnvo7VtzwxTjINAPOut87qMviFGkLElrpyaqSNnGxaf0fOjgJdfVodL+Mv86mXDunsRH43feu4h2Zt2HNtPWN2fqAPSZzG2TTZv6kvoeRZHur1FG5/ZkB/VAYmwLTLrFqL/Eu0CfpfCj6nWuVrS8+7hIgcUhj8QhdKk/3toneMbeWwqdlLifH9tUHKk+rEF1tdnbesXOWl+Mv/XgA==","From":"Qi Hou <qi.hou@nxp.com>","To":"Nicolas Dufresne <nicolas@ndufresne.ca>,\n\t\"libcamera-devel@lists.libcamera.org\"\n\t<libcamera-devel@lists.libcamera.org>","CC":"Jared Hu <jared.hu@nxp.com>, Julien Vuillaumier\n\t<julien.vuillaumier@nxp.com>","Subject":"RE: [EXT] Re: [PATCH] gstreamer: Read correct colorimetry from caps\n\tinto the stream configuration","Thread-Topic":"[EXT] Re: [PATCH] gstreamer: Read correct colorimetry from caps\n\tinto the stream configuration","Thread-Index":"AQHbMb5p5zY8DYIQrUOXbxvo+3u0bbKz9q0AgAEQx6A=","Date":"Wed, 13 Nov 2024 10:20:24 +0000","Message-ID":"<PAXPR04MB82856EF0035096323B1A3365975A2@PAXPR04MB8285.eurprd04.prod.outlook.com>","References":"<20241108091246.3753388-1-qi.hou@nxp.com>\n\t<c92beed89861907d92e3e2dc2d9bf64485c707c1.camel@ndufresne.ca>","In-Reply-To":"<c92beed89861907d92e3e2dc2d9bf64485c707c1.camel@ndufresne.ca>","Accept-Language":"zh-CN, 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=\"Y49djM/l\";\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":"PAXPR04MB8285:EE_|DU0PR04MB9347:EE_","x-ms-office365-filtering-correlation-id":"9a4f7224-6032-4dff-0062-08dd03ccc9d6","x-ms-exchange-senderadcheck":"1","x-ms-exchange-antispam-relay":"0","x-microsoft-antispam":"BCL:0;\n\tARA:13230040|1800799024|366016|376014|38070700018; ","x-microsoft-antispam-message-info":"=?utf-8?q?Kj1/s/sO7Lsuuw5c5qHSGn+58fx8?=\n\t=?utf-8?q?u43Us8yJ9JqouiAjGVEwbnIzW3EfC04ETVRPifd5aQXt/svJzOYZ8mKv?=\n\t=?utf-8?q?IoIKLGlWg2iqXUyH0H84UGQXBcQfLN6DhVQEVtVOAjw7gyy21pvMv05y?=\n\t=?utf-8?q?IDan8GBMNbf99TonlrudLptgTEASVdYI1og9PUvaxL/WS5jNFBop+cqi?=\n\t=?utf-8?q?JoHJ8FuPbq7gJCqfgmsnEPLuTGnyxC5cxq90kxb5T8fos9GsYmsTXQvb?=\n\t=?utf-8?q?As6A69Aq7dVM03WamsrEF00e4llUXSG8F/31DLNaa0+Zv9dV/NrP3nbl?=\n\t=?utf-8?q?SFh+IKxndizt3954/ypeMsES7MzUwYO18UwX88tltgKlCWRcvOs32DbP?=\n\t=?utf-8?q?dyircuNrlCUd74eXqUr1hRIhnU2+CI4dcPG6WdblLvMPO3nH0LmhniJY?=\n\t=?utf-8?q?4lMFOeNChDcwEIJG0xWB05H1kzAOA46Nqc3yD2dIGVFgunNYVozochrO?=\n\t=?utf-8?q?02EEv8iWA+pCX+KgkIaPBLWMdkqeZhoS+Zm9IlQq4CyZVp3QlngOQnI5?=\n\t=?utf-8?q?NXooZSXtcjm0zO2iU8Z61+jELaKCtybaOsFHPFwzjEGvWITobHNV0YuC?=\n\t=?utf-8?q?6N8QMwk6tSssgNT60GPESi3DHXPqGuykkCq7FJZqtu5+DoSyOyHz2SMm?=\n\t=?utf-8?q?VD102A3/m4mvtCL2uRSelphHyhlIndrgsLq9fhGcVvnxCicTlRksjVVF?=\n\t=?utf-8?q?+s5AiKMjmDoLXFWS+n93RxqOxPK6R9y3v4vD/CpqLuZeBEjonGAL33dy?=\n\t=?utf-8?q?f8wVzuZoT8SzB8eyd3oiu0TW1eWt9Zq1E9OB5xTAfaIqns/zq4WJd8g/?=\n\t=?utf-8?q?5D0opzUPl6gU9HmsK8Qkq9mEtE4df/oTbdc2wWNYCnMThBuva2355tN3?=\n\t=?utf-8?q?4Dw1UvyDJDr+Z5w+6NYU6/IZ/vrKw/UONwlTcHqSF8I1hgB/sotGYcJk?=\n\t=?utf-8?q?jTsxSkXu6j4x78my/UI9FCBGgyUtU74PPYjX99YsQQ4ci7QZ9NWI0M06?=\n\t=?utf-8?q?pDG03VFp3cn8Ay5sXEJoFvy6HOzcAg3qWLFsJtzfdlLRHt2ZVtWMBdPB?=\n\t=?utf-8?q?DoxlXlBt6Pg74GhGi+hTiuU+JYWLNr8+nZO94gfOdT3R7VqxmjkdddHv?=\n\t=?utf-8?q?V/6nD8jDbfeHCAnJmBvsifXtdv30f51nTUaoAIiqqD9A1IKlvGdRrxjv?=\n\t=?utf-8?q?nq8SKJHUiTcCtDbuqa7CbJcdCwMR7jqwef/036k0KB/00dld7mFWyNdk?=\n\t=?utf-8?q?cUiIBDHnVDXk7cdk5QnbRoWO7AK+G/jXavGRzbh7fdkSV5tBuzWsN9b0?=\n\t=?utf-8?q?gLXAorV0F0VZ437AlH9YZdtsInQnzeYXJSyzxvLPWb94ab3xbEMasN2+?=\n\t=?utf-8?q?cobzC3UeP1IL5+WRdc/Xai/DxMCXiRLHmXMvyKnHKe6E9yQ5j2TX/f+u?=\n\t=?utf-8?q?RVm6tSnxvk74GIQ=3D?=","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)(1800799024)(366016)(376014)(38070700018); DIR:OUT;\n\tSFP:1101; ","x-ms-exchange-antispam-messagedata-chunkcount":"1","x-ms-exchange-antispam-messagedata-0":"=?utf-8?q?vtpc0/gy6El792gD2b1KIy60J?=\n\t=?utf-8?q?7e9dYr/YfdN/OoDEKIP8cyoinORDFOEorY1sqE/AfLNLdPCty+qI5Bo2?=\n\t=?utf-8?q?tFK3n8sQXT+6iFyPgum23l8MYiMVcbVWJZtMgghYA1HixjABj204ci09?=\n\t=?utf-8?q?f8xFnRtgUXoctGYhJKuQS9dQqEgYLvJ4Fl5F+wit4FMC4Fp8D7qsJjgC?=\n\t=?utf-8?q?DAkL5qnnmXWBqrVYJmivNEd14vFVQ3G8IkE8OhgH5AbCn+d4CzSRv6PN?=\n\t=?utf-8?q?TM4OYrGWyH5ANZfHrAjrMtcqnRWNubiMZAuWnbknnT/2ODx+rVXazydH?=\n\t=?utf-8?q?gLze+u+NvCRIG+T91JNSgJ8w1pSZ3eLSGRUR8Ra48PI2T41cCaI1PqQe?=\n\t=?utf-8?q?G0m7RcsQqXlRfjOwpxkPir/g2PLStTUC5WeV/Nrk3Db+MYpsSfK3aVsR?=\n\t=?utf-8?q?gG+hwPRYeGYBGm2Tp8Cnri9XdzdWN3SRVMqVCza51e4iXNtfHFb/rD0p?=\n\t=?utf-8?q?vuoG70kDLWvcYR7SvW969ZKEQ2jPYAR8nbGsRDS54PnoQ+GmXLuGxWyD?=\n\t=?utf-8?q?O6RK+jG1zo+z9Bb0PtiIOo4n5dumiNMo1yZUXEkaTWfpH4kL+iWZs7bw?=\n\t=?utf-8?q?hEcu3PXb7EuRJvKX/PX2TtPk5mwc5rj4KTmA9vVRP7l87EKqI2y58GJ1?=\n\t=?utf-8?q?sm+h91rtkCRtbMAqr8e6dRWi2GxiSQURfoM7z1BduJ8w52dumC8E0NJB?=\n\t=?utf-8?q?N071spFbc4hIRJNlNA/MHlw0u7u9BpcXeo7AlKnWxEVR4ZkgZCs80aap?=\n\t=?utf-8?q?4OcuTVQRFzL/vlq4hZfowCkFCUTzoy6im+ujAujjmt+zvXATv7RVC8Kw?=\n\t=?utf-8?q?n23U+qq+FdL8Z3lzEJRoHSHSfwIUROIlCL+xALH2Dk90R55Z+ypT01vJ?=\n\t=?utf-8?q?wT5IHnTxHa/3ReayfG4+tSwLifD8Q/BXBqUOTm97TfzJBobSZ/WheXKl?=\n\t=?utf-8?q?iWw/EFpmDrGaCBVODBRwMHcP86HBAHwYdDMdiijXDnrIxBVlh4rJLcLX?=\n\t=?utf-8?q?UOyjErwSzhJhG3VsssZYSj5xuvhEoomi/NhpvFF/lDegN9+0ANUpYVmo?=\n\t=?utf-8?q?jjSGsFdvfFSP6UNU1UFfDt7kqfs4vZZ+HpjN7Z+u9Y09BpZzPws9GRIU?=\n\t=?utf-8?q?95UUFzg/MRi7jBvUZMLAfs2H45+ObNrYWcR+afXrBo2FoPhaXEXOAsrq?=\n\t=?utf-8?q?Yck/ZLbvWvJEr7peCtooCf4pzf0phEkpuIWUOBGAWybnULp4fqQSqiev?=\n\t=?utf-8?q?6I6uxuHKrJZAFFacjCQ4ifvzJBSX+wG/srUzrkgrqWlVhZ85dCH5dgFG?=\n\t=?utf-8?q?7yeb6xiVNzgfHUBR85MnYvtURurvAbzPzRFZmFl2I6gd31UGw6bIg1Px?=\n\t=?utf-8?q?Mtyi7j6C75bEVzuNpK63mMBd/P8Yh+W18Tg10OcnVnKHQkUSU4chBCQK?=\n\t=?utf-8?q?DEtPC9EkYXveEmB5F0VelqhALH5ne1gAMUeciSLhNt+pSYMyv0TSJ01C?=\n\t=?utf-8?q?CnerEz6ws5woSNeQCKNm0CyjCMgTAKDdW7qk7gTOuoZ0cms0JvUsRuGL?=\n\t=?utf-8?q?f42Lq5NLEL0e7/LzOI//MXrJBYsR+2JhgB1an7F8B3y5R1Yf/hF3Odas?=\n\t=?utf-8?q?Fmgc0+oTgll5gTYhebvc1vYKksgOjzJBI1ss0lZjzM=3D?=","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","MIME-Version":"1.0","X-OriginatorOrg":"nxp.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-AuthSource":"PAXPR04MB8285.eurprd04.prod.outlook.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"9a4f7224-6032-4dff-0062-08dd03ccc9d6","X-MS-Exchange-CrossTenant-originalarrivaltime":"13 Nov 2024 10:20:25.0395\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":"PwE6JnXdBEtcpcHpMe+NeR6WjMozA0eUqPNkebODFo5xsozuQ1PU4QeO1QqSNRSr","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"DU0PR04MB9347","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>"}},{"id":32139,"web_url":"https://patchwork.libcamera.org/comment/32139/","msgid":"<PAXPR04MB8285776ADF21C6E3FD486BC0975A2@PAXPR04MB8285.eurprd04.prod.outlook.com>","date":"2024-11-13T10:21:15","subject":"RE: [EXT] Re: [PATCH] gstreamer: Read correct colorimetry from caps\n\tinto the stream configuration","submitter":{"id":195,"url":"https://patchwork.libcamera.org/api/people/195/","name":"Qi Hou","email":"qi.hou@nxp.com"},"content":"Hi Laurent Pinchart,\n\nPlease check my comments. Thanks for your advice. I have sent out v2.\n\nRegards,\nQi Hou\n\n-----Original Message-----\nFrom: Laurent Pinchart <laurent.pinchart@ideasonboard.com> \nSent: 2024年11月12日 16:35\nTo: Qi Hou <qi.hou@nxp.com>\nCc: libcamera-devel@lists.libcamera.org; Jared Hu <jared.hu@nxp.com>; Julien Vuillaumier <julien.vuillaumier@nxp.com>; Nicolas Dufresne <nicolas@ndufresne.ca>\nSubject: [EXT] Re: [PATCH] gstreamer: Read correct colorimetry from caps into the stream configuration\n\nCaution: This is an external email. Please take care when clicking links or opening attachments. When in doubt, report the message using the 'Report this email' button\n\n\nHi Hou,\n\n(CC'ing Nicolas Dufresne)\n\nThank you for the patch.\n\nOn Fri, Nov 08, 2024 at 06:12:46PM +0900, Hou Qi wrote:\n> When libcamerasrc is negotiating with downstream element, it first \n> extracts colorimetry field from downstream supported caps, then set \n> this colorimetry to its stream configuration and propagates the \n> colorimetry downstream.\n>\n> Currently libamerasrc only considers the case there is one colorimetry \n> in colorimetry field of downstream caps. But the issue is that \n> downstream caps may report a list of supported colorimetry, which \n> causes libcamerasrc to set unknown colorimetry to stream configuration \n> and negotiate fail with downstream element.\n>\n> In order to fix the issue, get the first string if colorimetry field \n> holds string list to set it to stream configuration.\n>\n> Signed-off-by: Hou Qi <qi.hou@nxp.com>\n> ---\n>  src/gstreamer/gstlibcamera-utils.cpp | 15 ++++++++++++++-\n>  1 file changed, 14 insertions(+), 1 deletion(-)\n>\n> diff --git a/src/gstreamer/gstlibcamera-utils.cpp \n> b/src/gstreamer/gstlibcamera-utils.cpp\n> index 732987ef..2c1ebce8 100644\n> --- a/src/gstreamer/gstlibcamera-utils.cpp\n> +++ b/src/gstreamer/gstlibcamera-utils.cpp\n> @@ -489,9 +489,22 @@ \n> gst_libcamera_configure_stream_from_caps(StreamConfiguration \n> &stream_cfg,\n>\n>       /* Configure colorimetry */\n>       if (gst_structure_has_field(s, \"colorimetry\")) {\n> -             const gchar *colorimetry_str = gst_structure_get_string(s, \"colorimetry\");\n> +             const GValue *mode;\n> +             const gchar *colorimetry_str = NULL;\n>               GstVideoColorimetry colorimetry;\n>\n> +             mode = gst_structure_get_value(s, \"colorimetry\");\n\n\"mode\" seems a weird name, how about calling it \"value\" ?\n[Qi Hou] ok, I renamed to \"value\".\n\n> +\n> +             if (G_VALUE_HOLDS_STRING(mode)) {\n> +                     colorimetry_str = gst_structure_get_string(s, \"colorimetry\");\n> +             } else if (GST_VALUE_HOLDS_LIST(mode)) {\n> +                     const GValue *first_element = \n> + gst_value_list_get_value(mode, 0);\n> +\n> +                     if (G_VALUE_HOLDS_STRING(first_element)) {\n> +                             colorimetry_str = g_value_get_string(first_element);\n> +                     }\n\nNo need for curly brackets here.\n\n> +             }\n\nWould the following be simpler and more readable ?\n[Qi Hou] Yes, thanks for your advice.\n\n                if (GST_VALUE_HOLDS_LIST(value))\n                        value = gst_value_list_get_value(value, 0);\n                if (G_VALUE_HOLDS_STRING(value))\n                        colorimetry_str = g_value_get_string(value);\n\nWhat happens if neither condition is true though, will\ngst_video_colorimetry_from_string() handle a null colorimetry_str gracefully ?\n[Qi Hou] If colorimetry_str is NULL, gst_video_colorimetry_from_string() return default unknown colorimetry 1:1:1:0.\n\n> +\n>               if (!gst_video_colorimetry_from_string(&colorimetry, colorimetry_str))\n>                       g_critical(\"Invalid colorimetry %s\", \n> colorimetry_str);\n>\n\n--\nRegards,\n\nLaurent Pinchart","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 8EFDFBE173\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 13 Nov 2024 10:21:19 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 24C9365809;\n\tWed, 13 Nov 2024 11:21:19 +0100 (CET)","from EUR02-AM0-obe.outbound.protection.outlook.com\n\t(mail-am0eur02on2062c.outbound.protection.outlook.com\n\t[IPv6:2a01:111:f403:2606::62c])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D4A5F605B5\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 13 Nov 2024 11:21:17 +0100 (CET)","from PAXPR04MB8285.eurprd04.prod.outlook.com\n\t(2603:10a6:102:1ca::15)\n\tby PAXPR04MB8428.eurprd04.prod.outlook.com (2603:10a6:102:1ce::8)\n\twith Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8158.17;\n\tWed, 13 Nov 2024 10:21:15 +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%3]) with mapi id 15.20.8158.013;\n\tWed, 13 Nov 2024 10:21:15 +0000"],"Authentication-Results":["lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"H4A9My4p\";\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=i92oBuT0kAq7uGMt84fS/ZVfjr0zU9H92LYRmRTtpM5re+MA4K7ZZvJ9MYVMaZPeoqBjoFxL0sd7TX9F4ap/BJGkTQDjMKuLm3/MhGZhugkJUowaEsAGTD8+ZBz85/5QGvdVj40Lzuoz880crq0RDr1vKYgk8tKW/RvkZi07XjXIb8h0v/f6NX3IvMjjnPQNjxJQFbVWKJDaT6GE8jHijIIPliQFNslfTLN/DpVoCJc4ZU6L9B3AENR69pnC34YsK+srBni2XyGf1eTNh+cDtZwAqVg4k3XVBpyl6lJ6wtYvNQUqjQx8uuY7tdwIXZ3eSXiq3cHjBI8mlXcYyFc1cA==","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=M1UxN6MA5j1lg5AU3r9XW7WXsJyFhlaOzaxoI51yds0=;\n\tb=s91Vp2HtZ3y0ZXme4C1+XcnvYQEsTaPUWTVzvZsygZaoZ891ZgYTxTAhkb2k6n1iqlFlC3yBv3/u0C8i5XB6m+gfAsFwwUATymcB/HeHZiZqYh7Dnx7ZEDZZ7GdzSE7GoVCNMKOpnfS8X3koiMHdSDBPl5YWqy3TdlH/PR1FnWpfHMwTZHxPyxB5Rw5QahxU4qM+IraKDCY/wru+qfs4a4PDXKHBZ+bkhEnCspDTOr3sPjY8BnAX7Qhz3TqU+0e9WX2erb3Pr0xAa75//Cd+iCHlfs4P0L8VOP6GKw4PBUFLN7oQAJgraAQ4IWCOFqU7Nk7YPullBS5ua9hfq6INxw==","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=M1UxN6MA5j1lg5AU3r9XW7WXsJyFhlaOzaxoI51yds0=;\n\tb=H4A9My4pmK9BB9viNubvU/xxaTqJJ0TlRJWMTpTUOSJtZZjQ8NnAgENfNI6nDjnIoC1rjqp09Lijz92zWjxlgcWiL0xI2ze6+IrC6VsUERx+dgfyowr6VK4l5nGlI35jz3zCnFSARXYm+FFKrKjNUs3J4EXmgowr3AiaMopshnlaCjVAu0JCxpkFOUU67eZK5h3CCTyLDdnQhl1ClGUHL0xBDAtNe9ssPDAO/ZQjonj7GklHDXGw8335Hzn/Cl5wiz9CS+OatT8czGvQbWuSkpNQ4V8TXcdTX38cSH3VulEGDEQvLCmj8IGgv+PUGVrMvYmNWnB6QN7XzjZmEL3N2w==","From":"Qi Hou <qi.hou@nxp.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","CC":"\"libcamera-devel@lists.libcamera.org\"\n\t<libcamera-devel@lists.libcamera.org>, Jared Hu <jared.hu@nxp.com>,\n\tJulien Vuillaumier <julien.vuillaumier@nxp.com>, Nicolas Dufresne\n\t<nicolas@ndufresne.ca>","Subject":"RE: [EXT] Re: [PATCH] gstreamer: Read correct colorimetry from caps\n\tinto the stream configuration","Thread-Topic":"[EXT] Re: [PATCH] gstreamer: Read correct colorimetry from caps\n\tinto the stream configuration","Thread-Index":"AQHbMb5p5zY8DYIQrUOXbxvo+3u0bbKzV+cAgAGuZGA=","Date":"Wed, 13 Nov 2024 10:21:15 +0000","Message-ID":"<PAXPR04MB8285776ADF21C6E3FD486BC0975A2@PAXPR04MB8285.eurprd04.prod.outlook.com>","References":"<20241108091246.3753388-1-qi.hou@nxp.com>\n\t<20241112083432.GC5359@pendragon.ideasonboard.com>","In-Reply-To":"<20241112083432.GC5359@pendragon.ideasonboard.com>","Accept-Language":"zh-CN, 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=\"H4A9My4p\";\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":"PAXPR04MB8285:EE_|PAXPR04MB8428:EE_","x-ms-office365-filtering-correlation-id":"5823f0ea-e0bb-486c-5c49-08dd03cce818","x-ld-processed":"686ea1d3-bc2b-4c6f-a92c-d99c5c301635,ExtAddr","x-ms-exchange-senderadcheck":"1","x-ms-exchange-antispam-relay":"0","x-microsoft-antispam":"BCL:0;\n\tARA:13230040|1800799024|376014|366016|38070700018; ","x-microsoft-antispam-message-info":"=?utf-8?q?A7rm65UOLBtvBJVBRP+3i0oajjlz?=\n\t=?utf-8?q?ZnuRKd3lkDONoHken+N//2WKHdHgi9IjNpDUDOMTZld0tQWNZXwJDUxS?=\n\t=?utf-8?q?rrNp44LqpgwBfqSjdzwXm1F/2aA44Vb7uyIQhaxnzyxdCnLPmPrgzBE4?=\n\t=?utf-8?q?YfbsYhzq1TGokxy82c3mnJj1HFCE06Yqghqr+yAUdbBj6AKLByFbhuKy?=\n\t=?utf-8?q?Lqmc5gkOwKR64rpjdrxABAn9umEMkb9/CjzpJmNMOyrSy7YgMJ5YsL91?=\n\t=?utf-8?q?0MzLIuu18dYZibyP5IymObSNiR9cVtwjpa6jB0UATrhSvOQiclTiBQ3x?=\n\t=?utf-8?q?lzagjvsiCdScsnAp9x01r1yTX2P2UWCmRxkcVbOsqrADc/oGSugaEmPC?=\n\t=?utf-8?q?8cUih6pXGaksW85ClSbKIZCkFlob0yBGUR6+BkaVNelgZCyd+s2G57Qy?=\n\t=?utf-8?q?hjFpeR+ksjTJTVUfG3aNLGXvWHzp+EPZ5ZtlPtC9aKULYpnVlSI/rFel?=\n\t=?utf-8?q?WTZszoXxUjzaPq040kszFAgtKgjSe3hqJgC+pArh5d4zQ74fUJnG/VFr?=\n\t=?utf-8?q?A1Qv6I4wwF2Lb6+z8gXEPlpbKFJ07bG/pFkHk1WUHQ98BI3JmS7NodeR?=\n\t=?utf-8?q?3GJBnLb8BMoCU3Pf3mA3d5oeKS14oHvwekADRfxc1gJgqC8jhHZbTe1B?=\n\t=?utf-8?q?89yENmw+bO551aChWc0+ub5/kSvuzDc4lKt41NnTcrKRMLfrViPXD4bD?=\n\t=?utf-8?q?aKH6ABk/2hR/RIhU0Hb9pyY9NHGjb76n77bVIjmQtnsD25uqHTENkSYI?=\n\t=?utf-8?q?uv0gKZZrbgNv3jcJFicE+4vsh8FEDWl6p/0EgVa+61mkRtWew+OT7QqU?=\n\t=?utf-8?q?dE3/sOkogNr8FVJ8sWJAUXqufGQF+EMrw+LU+0SqJN6Av1vp3NUfx5ok?=\n\t=?utf-8?q?y+0eOvt02D/GG45COB+VZmYogJEs/KwfefNZ6Wj5kG6VujqledznO6FV?=\n\t=?utf-8?q?2D1ial9zr9JGPmnTBa+tVMDXmY+JAXtMwkMUGhHnbWXreGAr+NNJJpc4?=\n\t=?utf-8?q?AOgzxkCg87xcEeDR2fX0PGFV1JQB0jwXvIGhlxBK8bb2ypQdlEkhLmRX?=\n\t=?utf-8?q?62raXTmXPYn0D7h/lnqqL7yxEHM546xkLa0BYorVGV0+pJ27+N2LtRKW?=\n\t=?utf-8?q?U0TOE0KStH5rQVDtrNd3RGH4aWjWu6vPc2Qiv0PsT3qBXF4oqKktVfqr?=\n\t=?utf-8?q?VTkOevfZn05NMSPVUJ0dSNxHbGRRhacoIzr46z+nvPQhgWJgf+Y+iKAE?=\n\t=?utf-8?q?Agz65vPGeAXfk+N98iPchz0z1SjkUTcuKv5mqoF9AlTc//5HgY0HNtd2?=\n\t=?utf-8?q?MNhDIptSlpNjaH3eSTNNJUdMS5DVQJWJK5xdbGKDc+GR13b5otE6r+8G?=\n\t=?utf-8?q?cQOxGiyM0/qKPqH2sYfgcNuQBVCyA364uzIbUbsLnNJSCY2cQPjKgYaO?=\n\t=?utf-8?q?WDiK/8iY1EmeIOM=3D?=","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)(1800799024)(376014)(366016)(38070700018); DIR:OUT;\n\tSFP:1101; ","x-ms-exchange-antispam-messagedata-chunkcount":"1","x-ms-exchange-antispam-messagedata-0":"=?utf-8?q?fa3B576bGUJlSNfi7/3gSifSk?=\n\t=?utf-8?q?PiRr2ErqQUAJ9MYDif9p/7qhHdNgP6x2UmFinLd9Si/edIS1Sq2Us+aK?=\n\t=?utf-8?q?HJchTOvnz+Zxo6gbed69nHrPwdRRLKeNOgY/QH+aeW3B3HgCJx7lZVcJ?=\n\t=?utf-8?q?EF4IK2g6ZuKbpctKdGp7uN+bTqsWHOVTKGk9xR6gQeGlTGJvAGshwldS?=\n\t=?utf-8?q?aW2tICzVTknOUayq4WEqAfzLUsZrTpW5AlPExZ0RsXIQLFPmoDIVGv1A?=\n\t=?utf-8?q?7djCDp2ZrH6VES0KCqte6Hi4JEmSpdedIf8WvWyR1HeyQL03CWuhrLWc?=\n\t=?utf-8?q?ONbhnKYpS8fccLXLIgmAC5NCp7hZi7B8w8ZP/BvIjGZRjUnunv3Q8l/v?=\n\t=?utf-8?q?ka6J/kqSfVl27jk0f19P5t0EtetEDAZxIrr5rGv4zxMMp9Pi597mZGC8?=\n\t=?utf-8?q?2pLrhQ1vsrsR6doRPhm8VMfDHHT+v2kayxNMFavRseDjrvmczkU7C6DF?=\n\t=?utf-8?q?olgkTUuJMA9dQruOxIMRn3cnbOiRosacNCsIlFVHsXuaeAr2cWJYalqa?=\n\t=?utf-8?q?Zz/E5YjjEFu7cX1OB0B2Awbgh1UNmAOtGFDjpwS1nvt+PgcIhcwvEkue?=\n\t=?utf-8?q?cdnMb4nJfMkn7cyAIsBUp2DdON1u0roMrdIf/CtvLLskDCNshjcQiuG9?=\n\t=?utf-8?q?l5HL58UUg/y+Y3zPsQ24hf1Dn83mn4R3wsp2MpqY5Zqc2UhBKm6pfetf?=\n\t=?utf-8?q?GFruA6dHUb1bhD7R/HtCuP91qpPpky7Wz2eEl0WVmIP7DixLmTTgh0ge?=\n\t=?utf-8?q?o8HazEJ/PZjWFNMUi8yN6rSnDJtb69W97kOoozUEl3n7PoWlWVl4fMeD?=\n\t=?utf-8?q?MP/2kFkfd0wLxtp67XlQcpd0yo7kCLNkhUtx8RVrGj0GhLGzlqPAr6gU?=\n\t=?utf-8?q?WZUp+rSZTuuaRBfYRw8uXofIoyw/f6EnpVqyKKzK5WchSb8Wq48+Exn/?=\n\t=?utf-8?q?25S16KAUAERfUOqEZx7zftC5PfHlHHm8FhZ4GHyWBFRfgrAokFwIXUAN?=\n\t=?utf-8?q?cOvbIzUg8ht7Je/unESSuJWkKetgpzgHg/rL+0nFwZOBlyQLew/xOmfX?=\n\t=?utf-8?q?FHUXE4cvdAGJ3Pca3LUeJ8ZJ6HDmimnD/Xft3vVvPfaGqCmwNLfnjLwo?=\n\t=?utf-8?q?cIilQPp5GDsui0B4iLHIGfP/SxGxb2tynrqDcYJS9E3uIbfkPbnrf8K2?=\n\t=?utf-8?q?gOjSj18JdjeWm7FfAPvoRrJjadBtyjG3RqUxbP+C1G5BSSBn71wNQt6P?=\n\t=?utf-8?q?YpRgHh9DG9zCealaSFIxR9P9OF3YrHZN5pFMzWy58VjMwljQiSzhlNuW?=\n\t=?utf-8?q?HJJBimaOD2eZ0R4tArS2Iviog3yi3NsD2vnhgqX2Zq/473rN+DOc/3Pu?=\n\t=?utf-8?q?0Pr7JQbpGAyWo59FY+czvVlw1OfhxJDqtFuYvHiZCwBk8QC1bF3O1jtR?=\n\t=?utf-8?q?EW3bJ7u1NnBBtVdMfZVuDmo5kCZ0nClZt3gn/9Q3i/PwSTf6aD5Z/ZTt?=\n\t=?utf-8?q?gOVFF4TOOint9S7x1pq3WUi+Ai0lh4g80qg4f+w15DvZZFbz2UlD8vMC?=\n\t=?utf-8?q?yB3tufN0Ts+why7VevKC3KbAO49faJtpNJBHzOyvTdVJJ5Egamcb/+wd?=\n\t=?utf-8?q?hDSd1bPX2kapMblQ+Eh0z24ffOvwSRpXXXhC6YpVpQ=3D?=","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","MIME-Version":"1.0","X-OriginatorOrg":"nxp.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-AuthSource":"PAXPR04MB8285.eurprd04.prod.outlook.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"5823f0ea-e0bb-486c-5c49-08dd03cce818","X-MS-Exchange-CrossTenant-originalarrivaltime":"13 Nov 2024 10:21:15.8110\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":"uVJBb6aQ8HipMtbfkS8lxFC/6LERkzT12TF0D2uets1t+9UGPLU+rwcjWeA3chvG","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"PAXPR04MB8428","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>"}},{"id":32155,"web_url":"https://patchwork.libcamera.org/comment/32155/","msgid":"<cef81cd47260e1c1ae281ad0335ded045f63d449.camel@ndufresne.ca>","date":"2024-11-13T19:29:05","subject":"Re: [EXT] Re: [PATCH] gstreamer: Read correct colorimetry from caps\n\tinto the stream configuration","submitter":{"id":30,"url":"https://patchwork.libcamera.org/api/people/30/","name":"Nicolas Dufresne","email":"nicolas@ndufresne.ca"},"content":"Le mercredi 13 novembre 2024 à 10:20 +0000, Qi Hou a écrit :\n> Hi Nicolas,\n> \n> I see there is already assert check in gst_libcamera_configure_stream_from_caps().\n> \n> \t/* First fixate the caps using default configuration value. */\n> \tg_assert(gst_caps_is_writable(caps));\n\nOh, sorry about this indirection, new comment below.\n\n> \n> Regards,\n> Qi Hou\n> \n> -----Original Message-----\n> From: Nicolas Dufresne <nicolas@ndufresne.ca> \n> Sent: 2024年11月13日 2:03\n> To: Qi Hou <qi.hou@nxp.com>; libcamera-devel@lists.libcamera.org\n> Cc: Jared Hu <jared.hu@nxp.com>; Julien Vuillaumier <julien.vuillaumier@nxp.com>\n> Subject: [EXT] Re: [PATCH] gstreamer: Read correct colorimetry from caps into the stream configuration\n> \n> Caution: This is an external email. Please take care when clicking links or opening attachments. When in doubt, report the message using the 'Report this email' button\n> \n> \n> Le vendredi 08 novembre 2024 à 18:12 +0900, Hou Qi a écrit :\n> > When libcamerasrc is negotiating with downstream element, it first \n> > extracts colorimetry field from downstream supported caps, then set \n> > this colorimetry to its stream configuration and propagates the \n> > colorimetry downstream.\n> > \n> > Currently libamerasrc only considers the case there is one colorimetry \n> > in colorimetry field of downstream caps. But the issue is that \n> > downstream caps may report a list of supported colorimetry, which \n> > causes libcamerasrc to set unknown colorimetry to stream configuration \n> > and negotiate fail with downstream element.\n> > \n> > In order to fix the issue, get the first string if colorimetry field \n> > holds string list to set it to stream configuration.\n> > \n> > Signed-off-by: Hou Qi <qi.hou@nxp.com>\n> > ---\n> >  src/gstreamer/gstlibcamera-utils.cpp | 15 ++++++++++++++-\n> >  1 file changed, 14 insertions(+), 1 deletion(-)\n> > \n> > diff --git a/src/gstreamer/gstlibcamera-utils.cpp \n> > b/src/gstreamer/gstlibcamera-utils.cpp\n> > index 732987ef..2c1ebce8 100644\n> > --- a/src/gstreamer/gstlibcamera-utils.cpp\n> > +++ b/src/gstreamer/gstlibcamera-utils.cpp\n> > @@ -489,9 +489,22 @@ \n> > gst_libcamera_configure_stream_from_caps(StreamConfiguration \n> > &stream_cfg,\n> > \n> >       /* Configure colorimetry */\n> >       if (gst_structure_has_field(s, \"colorimetry\")) {\n> > -             const gchar *colorimetry_str = gst_structure_get_string(s, \"colorimetry\");\n> > +             const GValue *mode;\n> > +             const gchar *colorimetry_str = NULL;\n> >               GstVideoColorimetry colorimetry;\n> > \n> > +             mode = gst_structure_get_value(s, \"colorimetry\");\n\nJust do:\n\t\tgst_structure_fixate_field (s, \"colorimetry\");\n\nAnd keep the original code. The caps implementation seems sub-optimal though. In\nan ideal world, we'd do this in stage:\n\n- Fixate the caps\n- So caps to GstVideoInfo\n- Fill the stream_cfg from the VideoInfo\n- Finally do GstVideoInfo to caps in order to push complete caps.\n\nThis will fill the proper default of the other video/x-raw field we are not\ncareful about, like stereo views, pixel-aspect ratio, etc. If you have time,\nthis can greatly improve caps negotiation an correctness for future users.\n\n> > +\n> > +             if (G_VALUE_HOLDS_STRING(mode)) {\n> > +                     colorimetry_str = gst_structure_get_string(s, \"colorimetry\");\n> > +             } else if (GST_VALUE_HOLDS_LIST(mode)) {\n> > +                     const GValue *first_element = \n> > + gst_value_list_get_value(mode, 0);\n> > +\n> > +                     if (G_VALUE_HOLDS_STRING(first_element)) {\n> > +                             colorimetry_str = g_value_get_string(first_element);\n> > +                     }\n> > +             }\n> > +\n> \n> gst_libcamera_configure_stream_from_caps() is exepected to be called with fixed caps. Feel free to add an assert on that, fixation should happen earlier instead. This could be as simple as gst_caps_fixate(), specially that you are picking the first value in the list.\n> \n> Nicolas\n> \n> >               if (!gst_video_colorimetry_from_string(&colorimetry, colorimetry_str))\n> >                       g_critical(\"Invalid colorimetry %s\", \n> > colorimetry_str);\n> > \n>","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 04F99C324C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 13 Nov 2024 19:29:10 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4986C65825;\n\tWed, 13 Nov 2024 20:29:09 +0100 (CET)","from mail-qk1-x730.google.com (mail-qk1-x730.google.com\n\t[IPv6:2607:f8b0:4864:20::730])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 2455B657CF\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 13 Nov 2024 20:29:07 +0100 (CET)","by mail-qk1-x730.google.com with SMTP id\n\taf79cd13be357-7b35b1eb7e3so1664285a.1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 13 Nov 2024 11:29:07 -0800 (PST)","from nicolas-tpx395.localdomain ([2606:6d00:15:862e::580])\n\tby smtp.gmail.com with ESMTPSA id\n\t6a1803df08f44-6d3966310b7sm87823586d6.112.2024.11.13.11.29.05\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tWed, 13 Nov 2024 11:29:05 -0800 (PST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=ndufresne-ca.20230601.gappssmtp.com\n\theader.i=@ndufresne-ca.20230601.gappssmtp.com\n\theader.b=\"YGkbLp/E\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=ndufresne-ca.20230601.gappssmtp.com; s=20230601; t=1731526146;\n\tx=1732130946; darn=lists.libcamera.org; \n\th=mime-version:user-agent:content-transfer-encoding:references\n\t:in-reply-to:date:cc:to:from:subject:message-id:from:to:cc:subject\n\t:date:message-id:reply-to;\n\tbh=DQdUJVFNexZWwK4yiQhCfNGdIeY9tOqReTbtScdqjPw=;\n\tb=YGkbLp/EOWHPC0OEhUCrH/0yd3bmhb8G7bwCFroSLY9vRllhCFIcje/N60M9+hQXSC\n\tj7yr14CSu3batKOdzC5dEiXoaK9xbLwZ8LmV0pYQJDqof1TCl99AlvFAVQWh/5cNU60V\n\te0HDyk4RzkYLPnfHPq36QmEJd0f291lzM/F5iTAY92tvIULBW4+wURoWsXM3YPxgAP/I\n\to52dy3U1YIgi++4Kn7FFEiUAM5IONeWLBBAaKL0zvs8DGMqOvr8IPsNEmgnpqn9sNKof\n\todDV/jZFwAPfuGN4yCBIvwS7NN1oy9ywJIxy9Ia1OgR1SqkaBCjv2EnsbVSGQ9Cuo5z3\n\tqKSA==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1731526146; x=1732130946;\n\th=mime-version:user-agent:content-transfer-encoding:references\n\t:in-reply-to:date:cc:to:from:subject:message-id:x-gm-message-state\n\t:from:to:cc:subject:date:message-id:reply-to;\n\tbh=DQdUJVFNexZWwK4yiQhCfNGdIeY9tOqReTbtScdqjPw=;\n\tb=XjNFmcz1ffmIyHzYYib/7dZMVEfiSPcjbpk7d5zHPGTv0MluCpOTiDUuIllq/5rWLl\n\t60lbyg0QjTStFsNw9ttixz/u9B6fi80EhXbKE3vmZWvosHp5EO0EcIVZBeNHVzvZndev\n\t/JsL0q+hMgRVzqhuFJHJ2FnHlfTjF06eQhhwvbKnss/Eqx/UlWbB30P2V9QkiunozcyB\n\tNa50y0Mfu797A105XrYZzFjnJ49rxfouNgYPEYt3lmcbJYkHI4X5DT0wr76RbEkKj5pk\n\t+rIXhYyQsxk7NCUnfiM21hSGwxH7KHgRvL7zHfqwexMKyQFru/jooEcwsdjTr/O6FGVq\n\tyJcw==","X-Forwarded-Encrypted":"i=1;\n\tAJvYcCXE24T0csA7qUyEEbF+inlP9ARPGLHSgibqsdM/yQm/L3CebJKwiOED5uuDYSzkQXq6RVf59OsFI6unXsdLoxg=@lists.libcamera.org","X-Gm-Message-State":"AOJu0YwwVVq3Jg/Oved0Sc1HqfzeBndFLsClcbJMa4UecXTgHTGm/kN1\n\tbCUnHM/4nySFhM6M5qf9xn8QyXVN196c1vq9G8o+MecTmu1VmKxF14OggLWgZDE=","X-Google-Smtp-Source":"AGHT+IGJAS/AR5EFyo0kK38G8EE1F58676rgfFKslxmqQdXWgGPs5Zy6Q7x6VgTyzx+XfzIlkJQgXA==","X-Received":"by 2002:a05:6214:21af:b0:6cb:ed27:145c with SMTP id\n\t6a1803df08f44-6d3e906aadfmr9208266d6.19.1731526146006; \n\tWed, 13 Nov 2024 11:29:06 -0800 (PST)","Message-ID":"<cef81cd47260e1c1ae281ad0335ded045f63d449.camel@ndufresne.ca>","Subject":"Re: [EXT] Re: [PATCH] gstreamer: Read correct colorimetry from caps\n\tinto the stream configuration","From":"Nicolas Dufresne <nicolas@ndufresne.ca>","To":"Qi Hou <qi.hou@nxp.com>, \"libcamera-devel@lists.libcamera.org\"\n\t<libcamera-devel@lists.libcamera.org>","Cc":"Jared Hu <jared.hu@nxp.com>, Julien Vuillaumier\n\t<julien.vuillaumier@nxp.com>","Date":"Wed, 13 Nov 2024 14:29:05 -0500","In-Reply-To":"<PAXPR04MB82856EF0035096323B1A3365975A2@PAXPR04MB8285.eurprd04.prod.outlook.com>","References":"<20241108091246.3753388-1-qi.hou@nxp.com>\n\t<c92beed89861907d92e3e2dc2d9bf64485c707c1.camel@ndufresne.ca>\n\t<PAXPR04MB82856EF0035096323B1A3365975A2@PAXPR04MB8285.eurprd04.prod.outlook.com>","Content-Type":"text/plain; charset=\"UTF-8\"","Content-Transfer-Encoding":"quoted-printable","User-Agent":"Evolution 3.54.1 (3.54.1-1.fc41) ","MIME-Version":"1.0","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>"}},{"id":32794,"web_url":"https://patchwork.libcamera.org/comment/32794/","msgid":"<PAXPR04MB8285506B7E0BB40652CEEEB997042@PAXPR04MB8285.eurprd04.prod.outlook.com>","date":"2024-12-17T02:27:45","subject":"RE: [EXT] Re: [PATCH] gstreamer: Read correct colorimetry from caps\n\tinto the stream configuration","submitter":{"id":195,"url":"https://patchwork.libcamera.org/api/people/195/","name":"Qi Hou","email":"qi.hou@nxp.com"},"content":"Hi Nicolas,\n\nI've sent out v3 to fixate colorimetry field. And for your suggestions to improve caps negotiating, I think I will do that later.\n\n- Fixate the caps\n- So caps to GstVideoInfo\n- Fill the stream_cfg from the VideoInfo\n- Finally do GstVideoInfo to caps in order to push complete caps.\n\nRegards,\nQi Hou\n\n-----Original Message-----\nFrom: Nicolas Dufresne <nicolas@ndufresne.ca> \nSent: 2024年11月14日 3:29\nTo: Qi Hou <qi.hou@nxp.com>; libcamera-devel@lists.libcamera.org\nCc: Jared Hu <jared.hu@nxp.com>; Julien Vuillaumier <julien.vuillaumier@nxp.com>\nSubject: Re: [EXT] Re: [PATCH] gstreamer: Read correct colorimetry from caps into the stream configuration\n\nCaution: This is an external email. Please take care when clicking links or opening attachments. When in doubt, report the message using the 'Report this email' button\n\n\nLe mercredi 13 novembre 2024 à 10:20 +0000, Qi Hou a écrit :\n> Hi Nicolas,\n>\n> I see there is already assert check in gst_libcamera_configure_stream_from_caps().\n>\n>       /* First fixate the caps using default configuration value. */\n>       g_assert(gst_caps_is_writable(caps));\n\nOh, sorry about this indirection, new comment below.\n\n>\n> Regards,\n> Qi Hou\n>\n> -----Original Message-----\n> From: Nicolas Dufresne <nicolas@ndufresne.ca>\n> Sent: 2024年11月13日 2:03\n> To: Qi Hou <qi.hou@nxp.com>; libcamera-devel@lists.libcamera.org\n> Cc: Jared Hu <jared.hu@nxp.com>; Julien Vuillaumier \n> <julien.vuillaumier@nxp.com>\n> Subject: [EXT] Re: [PATCH] gstreamer: Read correct colorimetry from \n> caps into the stream configuration\n>\n> Caution: This is an external email. Please take care when clicking \n> links or opening attachments. When in doubt, report the message using \n> the 'Report this email' button\n>\n>\n> Le vendredi 08 novembre 2024 à 18:12 +0900, Hou Qi a écrit :\n> > When libcamerasrc is negotiating with downstream element, it first \n> > extracts colorimetry field from downstream supported caps, then set \n> > this colorimetry to its stream configuration and propagates the \n> > colorimetry downstream.\n> >\n> > Currently libamerasrc only considers the case there is one \n> > colorimetry in colorimetry field of downstream caps. But the issue \n> > is that downstream caps may report a list of supported colorimetry, \n> > which causes libcamerasrc to set unknown colorimetry to stream \n> > configuration and negotiate fail with downstream element.\n> >\n> > In order to fix the issue, get the first string if colorimetry field \n> > holds string list to set it to stream configuration.\n> >\n> > Signed-off-by: Hou Qi <qi.hou@nxp.com>\n> > ---\n> >  src/gstreamer/gstlibcamera-utils.cpp | 15 ++++++++++++++-\n> >  1 file changed, 14 insertions(+), 1 deletion(-)\n> >\n> > diff --git a/src/gstreamer/gstlibcamera-utils.cpp\n> > b/src/gstreamer/gstlibcamera-utils.cpp\n> > index 732987ef..2c1ebce8 100644\n> > --- a/src/gstreamer/gstlibcamera-utils.cpp\n> > +++ b/src/gstreamer/gstlibcamera-utils.cpp\n> > @@ -489,9 +489,22 @@\n> > gst_libcamera_configure_stream_from_caps(StreamConfiguration\n> > &stream_cfg,\n> >\n> >       /* Configure colorimetry */\n> >       if (gst_structure_has_field(s, \"colorimetry\")) {\n> > -             const gchar *colorimetry_str = gst_structure_get_string(s, \"colorimetry\");\n> > +             const GValue *mode;\n> > +             const gchar *colorimetry_str = NULL;\n> >               GstVideoColorimetry colorimetry;\n> >\n> > +             mode = gst_structure_get_value(s, \"colorimetry\");\n\nJust do:\n                gst_structure_fixate_field (s, \"colorimetry\");\n\nAnd keep the original code. The caps implementation seems sub-optimal though. In an ideal world, we'd do this in stage:\n\n- Fixate the caps\n- So caps to GstVideoInfo\n- Fill the stream_cfg from the VideoInfo\n- Finally do GstVideoInfo to caps in order to push complete caps.\n\nThis will fill the proper default of the other video/x-raw field we are not careful about, like stereo views, pixel-aspect ratio, etc. If you have time, this can greatly improve caps negotiation an correctness for future users.\n\n> > +\n> > +             if (G_VALUE_HOLDS_STRING(mode)) {\n> > +                     colorimetry_str = gst_structure_get_string(s, \"colorimetry\");\n> > +             } else if (GST_VALUE_HOLDS_LIST(mode)) {\n> > +                     const GValue *first_element = \n> > + gst_value_list_get_value(mode, 0);\n> > +\n> > +                     if (G_VALUE_HOLDS_STRING(first_element)) {\n> > +                             colorimetry_str = g_value_get_string(first_element);\n> > +                     }\n> > +             }\n> > +\n>\n> gst_libcamera_configure_stream_from_caps() is exepected to be called with fixed caps. Feel free to add an assert on that, fixation should happen earlier instead. This could be as simple as gst_caps_fixate(), specially that you are picking the first value in the list.\n>\n> Nicolas\n>\n> >               if (!gst_video_colorimetry_from_string(&colorimetry, colorimetry_str))\n> >                       g_critical(\"Invalid colorimetry %s\", \n> > colorimetry_str);\n> >\n>","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 A3CFEC32AF\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 17 Dec 2024 02:27:48 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id DECB367FAD;\n\tTue, 17 Dec 2024 03:27:47 +0100 (CET)","from EUR05-AM6-obe.outbound.protection.outlook.com\n\t(mail-am6eur05on20628.outbound.protection.outlook.com\n\t[IPv6:2a01:111:f403:2612::628])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id C7FFF61899\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 17 Dec 2024 03:27:46 +0100 (CET)","from PAXPR04MB8285.eurprd04.prod.outlook.com\n\t(2603:10a6:102:1ca::15)\n\tby AM0PR04MB6913.eurprd04.prod.outlook.com (2603:10a6:208:184::24)\n\twith Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8251.22;\n\tTue, 17 Dec 2024 02:27:45 +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\tTue, 17 Dec 2024 02:27:45 +0000"],"Authentication-Results":["lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"jA2ddLhr\";\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=g/JbIVcSmXGek5seGKtg/2bBUQK/wHGgHcdGuI+OIk2CZeusR1MhP6Ow2X+Sol/OL/TIsF/sdGbWPpWPSuF01YvBi99rKamx2CSfNxENAfez2WtzUT5+/J1qkl/8B8d40fqU6pcjmN+5fF3e9xJ6ZtWmklDdhBIbpIl1ogVocIz83RmZO9kesN99smbhnQPHFDGWHz9Vep0/SyFhquYGvlgHzJ2OyePqTy377LPJaQ/tYfV0aRTfvUecgpVErxekCmn1sTSMywkKAB77P7hC3J6uXHhX0tIjSIZ8WFliKNmdHAdtYW6/LupA49EU2HaCb3UK12Lw0Za//YQm9EImBw==","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=7zjCGP5Oz5ul8fi1PnaBxgc/lyPqGPAyaOmCMjxAdfY=;\n\tb=bTRnLaYerhAFv9aFwMbD/CILlzOI3/zNJhXYqPh6ocqODF5jVqnLfRefIcsvsXCrQ/zCfwNHurKr63kaCnJy1Wu5SVcRHhEMLsAsrUe0eGUv48aDKYPrA/s/2vjZIqpNRJS/hDSJkO9vU5RUZLxMOlxi02WfgKzh04fBNvkNjN8J4z+rVsAV0zLJIZVHNPx0h3mIrjvnmlmrGRVGH2B92YjzfhvJmUYpd6hYy08R9dv+7FqhWM7N44k7EacTYnKuA8mfTm7DbvGRjmq08W3B52B9Tf6/qaKkNYFF/UmUGbZT3gDF6MP+2rhzJWQHcThrxSf+pFXX/ljb/ihqdQ3qoQ==","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=7zjCGP5Oz5ul8fi1PnaBxgc/lyPqGPAyaOmCMjxAdfY=;\n\tb=jA2ddLhrLUfVgGhYli2JLGuzm2qPj7KSJG9tqr5dsmYmVlqXXwpNAVoiDqcv9DWuwna7z4H3bs2nz5RTJINJWNFWmdqZDmRa4LcflNDlFFvB2Cg1MmzaXnyvHYrLiKrphmrR3KPslrCc1x6a+QPcGxOBRIIF7ScGtZfL/bvEQZSPkvW7oZbJx7cKFQ1UkZ9801HcAKt9ebcCIpb9SyoyXbc3MQ+T6zugk6Yg5wHSQw06jgrH7rcPllTB+sVCE4WI3SBwDBvLgJR28WKKWk8AnLAaNyh7wzgiEuEIY3Pgci/Vh7ehEkfjocfina4iRdfgxj8OM5ZtjN6nV7Cfkfrw/w==","From":"Qi Hou <qi.hou@nxp.com>","To":"Nicolas Dufresne <nicolas@ndufresne.ca>,\n\t\"libcamera-devel@lists.libcamera.org\"\n\t<libcamera-devel@lists.libcamera.org>","CC":"Jared Hu <jared.hu@nxp.com>, Julien Vuillaumier\n\t<julien.vuillaumier@nxp.com>","Subject":"RE: [EXT] Re: [PATCH] gstreamer: Read correct colorimetry from caps\n\tinto the stream configuration","Thread-Topic":"[EXT] Re: [PATCH] gstreamer: Read correct colorimetry from caps\n\tinto the stream configuration","Thread-Index":"AQHbMb5p5zY8DYIQrUOXbxvo+3u0bbKz9q0AgAEQx6CAAJmpgIA0UTqg","Date":"Tue, 17 Dec 2024 02:27:45 +0000","Message-ID":"<PAXPR04MB8285506B7E0BB40652CEEEB997042@PAXPR04MB8285.eurprd04.prod.outlook.com>","References":"<20241108091246.3753388-1-qi.hou@nxp.com>\n\t<c92beed89861907d92e3e2dc2d9bf64485c707c1.camel@ndufresne.ca>\n\t<PAXPR04MB82856EF0035096323B1A3365975A2@PAXPR04MB8285.eurprd04.prod.outlook.com>\n\t<cef81cd47260e1c1ae281ad0335ded045f63d449.camel@ndufresne.ca>","In-Reply-To":"<cef81cd47260e1c1ae281ad0335ded045f63d449.camel@ndufresne.ca>","Accept-Language":"zh-CN, 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=\"jA2ddLhr\";\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":"PAXPR04MB8285:EE_|AM0PR04MB6913:EE_","x-ms-office365-filtering-correlation-id":"d2166749-8757-40b9-5a9f-08dd1e426431","x-ms-exchange-senderadcheck":"1","x-ms-exchange-antispam-relay":"0","x-microsoft-antispam":"BCL:0;\n\tARA:13230040|376014|1800799024|366016|38070700018; ","x-microsoft-antispam-message-info":"=?utf-8?q?ocGkuSlIVSwq9AZfDXFolIbZcXBR?=\n\t=?utf-8?q?hlrWtCdZUIRmGrrz5UOtC7ygNFcXqwDS7mv31oROuxbY+2gL8ipCzZ65?=\n\t=?utf-8?q?Ex5d7mBvFWNAD5DxKiXntfjyV+lMyxk2t+M1I9E6yZkgkzJWxOwII33D?=\n\t=?utf-8?q?jKhLsFpp5oj885PMiZgPP++hndoZ+Rm3zHX4nxn6HpNoUFa4px+G25ej?=\n\t=?utf-8?q?h+LynBeOlHhnUZasxAKmjsQ5EuUUGWA8UsggwaCfdRMvh1+CZVyylGNt?=\n\t=?utf-8?q?n2jmSwUMq8UWEBD0wi12wg7cZphTP/zQIZAOEuw+0BZu0Wc7vmuekh+r?=\n\t=?utf-8?q?rVzXaBBVNcboP3lRAE6uPcgseyvuCgn3m2NFj0yHCimVlRMkPYUswQN2?=\n\t=?utf-8?q?27L5tKenF8JrbrdwXcDv02EJO5i3yaqDh/PMfLfQY09TMoTdUEVngY0K?=\n\t=?utf-8?q?lsud2iDMN2xjItqN85ue+zIKnu0sNGTOOANpg3y8vxEgfBhvrtkEsAG5?=\n\t=?utf-8?q?wqXaVEWxPWMZ8+9tF6WdnispO3yM2J7Mt9hsQOwmuVJ3p2485c0C2T2Q?=\n\t=?utf-8?q?78mEPhF9d4QWr4LdGZGNifQ+XK8cCHn4rSjX1ZBO4DcBeUciCeWk6sHM?=\n\t=?utf-8?q?xHOv9j4HUu9oy2S4y9x+wL6ttSBJ+tvaOY0OfKre24LSqzZDyw+J5Iyq?=\n\t=?utf-8?q?Sf0IVv1XZw8Gw9sbR0jOKgmdUzEe7qVW066s0XUwIlpmwAc8G4/xh82y?=\n\t=?utf-8?q?dJC7FCrblFwlE5j5OdEOVaU/JaI3bjwPm7QVmgOG5gPXotoXG+b5Fmk6?=\n\t=?utf-8?q?yf31OM38e6H0rOybQvXuUUgcm8wx0NUTAvjNYKY/XV/wECt50tLxAebb?=\n\t=?utf-8?q?oNDkMMWR49Cz/jjfORJMdPorox34u133lhZ6Qv8SIY7nOsMNnJAQXDX7?=\n\t=?utf-8?q?VCzrlRTv5c7Bjrdt6Zb2nGY0FI9VY+EED0OwBsj9LqVPrTJbw3kGCOOt?=\n\t=?utf-8?q?2FbOLQeMyLlBDuc/UJlL1Nc9sVfDnN0ocngvpZZRNXTtYv+Qxqw9v6e4?=\n\t=?utf-8?q?PFZyxwjMf50tg7e3LlFvvLCz3MIUcepNwDpHHBsyz9N5Fk7NrJheI+I8?=\n\t=?utf-8?q?xlvGPtjPISfT8gH9lkz4751cDPXhWobgjV96u2OdWFW9jrWjHkzvJnQk?=\n\t=?utf-8?q?iuQocaSUhxAacQPOZ93ObfAAr2+upxVR6RSkSUhFKf4azazdKPTTouFg?=\n\t=?utf-8?q?iB/CIKlym3iKUbTqwqnH9PvQhBeiOaHQBaVUtQJ0CMO1DT7tLO8wfdhb?=\n\t=?utf-8?q?vMOkdlCVs3IjFpmJeT3AWQK6oB0vG/TwEVqYcSQEhOAAQ2VCXRCOohDY?=\n\t=?utf-8?q?oguy14kqDLRlUf5f4XBqodpKhgT0ypSdnYKy916sBeNIy3YQ2L12LHxx?=\n\t=?utf-8?q?mZkdCNcLfV1nDiy1J1OISbGwFwUMzg60uPF5HtE5k1ZJJkexnBNGd4fW?=\n\t=?utf-8?q?Y9dXeD/fTR6BkvabF15XqPC+gD5l+nWT2hmaX3cx7Y1WXL+vYK6A4e/y?=\n\t=?utf-8?q?j7sZYqE4uVjYPvdDO8WVgkDsgxNUOw28HGUMqxZrAI2S?=","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)(376014)(1800799024)(366016)(38070700018); DIR:OUT;\n\tSFP:1101; ","x-ms-exchange-antispam-messagedata-chunkcount":"1","x-ms-exchange-antispam-messagedata-0":"=?utf-8?q?r3jvr6NoN9VwdjoPIIwyZvau+?=\n\t=?utf-8?q?pOSN+8fxjV7vQMvqprtXv2KWOv0r8b0G4ej26gKWEmgw5cvKkMEh0pBX?=\n\t=?utf-8?q?eYKdukv9dbcHgrwZmX1/FEI+49yjvm84AR4qgVDxzk2L5BRzkGE9Jght?=\n\t=?utf-8?q?UViFmpNjvg2OFuxtn5u0dnyZxti5lIJIPfDKBKUpIqw00n3bU3d/ZeM2?=\n\t=?utf-8?q?ozb1Xofw8a6nR4DKS1xSNZ8S9JNY346JDo2ha2fjYBLgzIk3mmDj31Hu?=\n\t=?utf-8?q?acPF99k9jGSgVE9H9kpbtwaxb1S3qgVBbetpnDOq12K20gvbi2F859Px?=\n\t=?utf-8?q?jTflXj0jzybfXlzu4LLZvxaDgnYKQFsOnJVVTkeqJaFHJLmXYRFhyhIj?=\n\t=?utf-8?q?BSl9a6BgTzyhSIWfcy3LN2gcKHT0hAk5DlTFFnUFnBza3hot7hLw3yfa?=\n\t=?utf-8?q?tcFqAaCuWMveOPzIYLsA88Hlw7qiHkT8hQBmJ7fIUm0hxy7a0UKv1IDs?=\n\t=?utf-8?q?w6/Hrc11gVcp4AWhjmvRDeLDUxv6e7CyKX6gqPbMMTxFph/BIbNQcpvO?=\n\t=?utf-8?q?0KJJ38hopoeDAptSnpO9E28avd2tf5XEAcv3jtLuXue2tDoH7AFa1uBM?=\n\t=?utf-8?q?OSl9FWU/Gv9oahDN1xTBuV5ngAbdBSxcJTOj41Wy0d7BM5o9yjKjk/6+?=\n\t=?utf-8?q?VHPU9zWsYltqVNDC7CD9A1SsYilH4fdCN4V089xtUw9lRRWYtSkpsqIZ?=\n\t=?utf-8?q?0WRJ7bRinEVPteN6BFG/4gLKMG2sfTo0jXlbcEn3dgy9dmR/6xX13fkT?=\n\t=?utf-8?q?CiYFcxsmfybSeR1bOga30rLBzvAYUrNfbVDg395RaKTmJAx0X018pVNA?=\n\t=?utf-8?q?R+fenmCmq6PJ2oZ8webnkW43XayGMcIdNOzwAuUFBo3O9cUxEohua9yC?=\n\t=?utf-8?q?WzUTmBGUoLPORfNo6LpMCWjkjCpJ5V3l2BJvZf5g697OzyStj0w7LmzI?=\n\t=?utf-8?q?D9hPTZIc+NuWlxbAdzu04d2irzMuULidW+JXZ6avovFarCuwH63DUL52?=\n\t=?utf-8?q?g1G/Q0YIxwl1WZQM2drF1B5zmhn+meuk6M6pAKGmzDaOqkJddSzn1sq1?=\n\t=?utf-8?q?HoKMTKHn3l7p70yzz7IyXEtwif201yM2v8ZXxoOMY8vDPg/zOwdBxrdN?=\n\t=?utf-8?q?XF0dezz+ZeDdigyabCJEDXMLTsgib0zboFo7LMbGWQIDK7l5okiKzjfo?=\n\t=?utf-8?q?4eVR4fqja4qZW3ostE+TuJNVAo8RkGM2MZ+4avzMzXdQfpj3TXehdidq?=\n\t=?utf-8?q?CshsF47t5FU334h0y5iBiN1MWQuxlCoZnKDOZZHocOjhQTakj4KrTE2x?=\n\t=?utf-8?q?07XK6wR2ZT7PCF/afZvGnNtIrJMmRsSk/BRPzb/vUSnSehGy4oKrZ17l?=\n\t=?utf-8?q?9SGjhAMrqi2calpP2PJVjY3ImTClvvVKQMgmlzaPuhvwwTzZzsAuJ4R7?=\n\t=?utf-8?q?iOvZYyqJoG7wdDwx9JKUrLAtWcB/IoxLqzdFxIfEBSswbOM1DUKM7OOM?=\n\t=?utf-8?q?QCJY6PQhwAeYFyHUO1TpkyayyoeUTmHgq8ncRnjFWiCyzFiEHZZMAPQQ?=\n\t=?utf-8?q?g1EsdGo5yZD33813HRkZCSgHdGh3SJ7+u8LSyZ30HIapOipqFv0/Z+PA?=\n\t=?utf-8?q?sHkN4hvVVYQ2RZkSDzf5qYDHTMm9fguqqnfVGoMVsw=3D?=","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","MIME-Version":"1.0","X-OriginatorOrg":"nxp.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-AuthSource":"PAXPR04MB8285.eurprd04.prod.outlook.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"d2166749-8757-40b9-5a9f-08dd1e426431","X-MS-Exchange-CrossTenant-originalarrivaltime":"17 Dec 2024 02:27:45.3692\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":"MSgqc56urzR5VonZib8arTW9jIug+fsnnBRGCcEC6aSVWOZL+YtpGIJXkCC5L0NX","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"AM0PR04MB6913","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>"}}]