[{"id":23725,"web_url":"https://patchwork.libcamera.org/comment/23725/","msgid":"<375de4725f2cfeb74a4fb6098ae9a4adc468f602.camel@collabora.com>","date":"2022-07-04T18:13:37","subject":"Re: [libcamera-devel] [PATCH v1 3/5] gstreamer:Install the\n\tcolorimetry property","submitter":{"id":31,"url":"https://patchwork.libcamera.org/api/people/31/","name":"Nicolas Dufresne","email":"nicolas.dufresne@collabora.com"},"content":"Le dimanche 03 juillet 2022 à 13:03 +0530, Rishikesh Donadkar a écrit :\n> Add the colorimetry field in the _GstLibcameraSrc. Add switch cases in\n> gst_libcamera_src_set_property() and gst_libcamera_src_get_property() to\n> access and modify the property.\n> \n> Signed-off-by: Rishikesh Donadkar <rishikeshdonadkar@gmail.com>\n> ---\n>  src/gstreamer/gstlibcamerasrc.cpp | 18 +++++++++++++++++-\n>  1 file changed, 17 insertions(+), 1 deletion(-)\n> \n> diff --git a/src/gstreamer/gstlibcamerasrc.cpp b/src/gstreamer/gstlibcamerasrc.cpp\n> index 46fd02d2..120319b3 100644\n> --- a/src/gstreamer/gstlibcamerasrc.cpp\n> +++ b/src/gstreamer/gstlibcamerasrc.cpp\n> @@ -121,6 +121,7 @@ struct _GstLibcameraSrc {\n>  \tGstTask *task;\n>  \n>  \tgchar *camera_name;\n> +\tgchar *colorimetry;\n>  \n>  \tGstLibcameraSrcState *state;\n>  \tGstLibcameraAllocator *allocator;\n> @@ -129,7 +130,8 @@ struct _GstLibcameraSrc {\n>  \n>  enum {\n>  \tPROP_0,\n> -\tPROP_CAMERA_NAME\n> +\tPROP_CAMERA_NAME,\n> +\tPROP_COLORIMETRY,\n>  };\n>  \n>  G_DEFINE_TYPE_WITH_CODE(GstLibcameraSrc, gst_libcamera_src, GST_TYPE_ELEMENT,\n> @@ -532,6 +534,10 @@ gst_libcamera_src_set_property(GObject *object, guint prop_id,\n>  \t\tg_free(self->camera_name);\n>  \t\tself->camera_name = g_value_dup_string(value);\n>  \t\tbreak;\n> +\tcase PROP_COLORIMETRY:\n> +\t\tg_free(self->colorimetry);\n> +\t\tself->colorimetry = g_value_dup_string(value);\n> +\t\tbreak;\n>  \tdefault:\n>  \t\tG_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);\n>  \t\tbreak;\n> @@ -549,6 +555,9 @@ gst_libcamera_src_get_property(GObject *object, guint prop_id, GValue *value,\n>  \tcase PROP_CAMERA_NAME:\n>  \t\tg_value_set_string(value, self->camera_name);\n>  \t\tbreak;\n> +\tcase PROP_COLORIMETRY:\n> +\t\tg_value_set_string(value, self->colorimetry);\n> +\t\tbreak;\n>  \tdefault:\n>  \t\tG_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);\n>  \t\tbreak;\n> @@ -717,4 +726,11 @@ gst_libcamera_src_class_init(GstLibcameraSrcClass *klass)\n>  \t\t\t\t\t\t\t     | G_PARAM_READWRITE\n>  \t\t\t\t\t\t\t     | G_PARAM_STATIC_STRINGS));\n>  \tg_object_class_install_property(object_class, PROP_CAMERA_NAME, spec);\n> +\n> +\tGParamSpec *spec2 = g_param_spec_string(\"colorimetry\", \"Coloirmetry\",\n> +\t\t\t\t\t\t\"Colorimetry that will be applied to the StreamConfiguration\", nullptr,\n> +\t\t\t\t\t       (GParamFlags)(GST_PARAM_MUTABLE_READY\n> +\t\t\t\t\t\t\t     | G_PARAM_READWRITE\n> +\t\t\t\t\t\t\t     | G_PARAM_STATIC_STRINGS));\n\nAs this is a field in caps, the appropriate way to interact in userland is to\nplace such feild in downstream caps filter. Properties are not acceptable.\n\n  libcamerasrc ! video/x-raw,colorimetry=bt709 ! ...\n\nWhat would be a use case though for forcing a specific colorimetry ? Do the V4L2\nstack we have supports this ?\n\n> +\tg_object_class_install_property(object_class,PROP_COLORIMETRY,spec2);\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 2460FBD808\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  4 Jul 2022 18:13:50 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 7E77A6564A;\n\tMon,  4 Jul 2022 20:13:49 +0200 (CEST)","from madras.collabora.co.uk (madras.collabora.co.uk\n\t[46.235.227.172])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id EF56761FB1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  4 Jul 2022 20:13:47 +0200 (CEST)","from nicolas-tpx395.localdomain (mtl.collabora.ca [66.171.169.34])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\tkey-exchange X25519 server-signature RSA-PSS (4096 bits)\n\tserver-digest SHA256)\n\t(No client certificate requested) (Authenticated sender: nicolas)\n\tby madras.collabora.co.uk (Postfix) with ESMTPSA id 035F9660199B;\n\tMon,  4 Jul 2022 19:13:46 +0100 (BST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1656958429;\n\tbh=wM9/HZXO9pPbWf7GtXKh5wNC8XZhtktCLDdlJgZ6HD8=;\n\th=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=3khgFPKS3Wp0Dp0e7r5XY3XiGB5yNeGtrcr5aBIQjfp1VrbIfIW7zdpvaiNu99WxG\n\tTMuD8XpEi/VKuenzn+qqjljQC7O3dZSLhhI/sqHFc9c7x9fzrtd9XaElzK8amQyZ1N\n\tnWdbNqTnYRAjn03f/DTZkceQD9q4v/DChl06kZcmq9DN0mYPDmDGQNJXfZSU3v6Qq3\n\tEiIxugK6qDM/RxeeNle0yt6pO/GPr4l7bPmVAhnxY6cdCM2ou9xKdsW4JNCn4LxFOT\n\tK4if7h3KmfO1LfQfyFJYgGBMksG7X2+hgJA6huE3V34gD9qB45lfDmrYKpwfJ8OVwV\n\tWItvltHy4nzbw==","v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com;\n\ts=mail; t=1656958427;\n\tbh=wM9/HZXO9pPbWf7GtXKh5wNC8XZhtktCLDdlJgZ6HD8=;\n\th=Subject:From:To:Cc:Date:In-Reply-To:References:From;\n\tb=jJ3c0TMXc+Pn0sf1bwSg0ke3nX6YLab5fZJ9YnbiJERVgO+beFArGKEl7Ejho1AwI\n\tiN6tJl1mO3fWDdTA2Tyn3ahzlDCT9mYFrdhhhnTxtNPdbBf7qwmyehRJhMxlPp+U0B\n\t5bSTyK14xL3Jx9+3p2M8qQ5aIS+OH9k42fYcmc0+62x1BtcbbDGKVj+hTkTSaFxLeF\n\torVGFauurDYM/rKgJaygR/qtmr8RJNN3twc4/e+hpVPktbAPNT8LXBhMXXjLbBrurt\n\tiSYmcFxHaCBhBlU74ud8si2j0uI89H0WszZbuVovVf7pQgoJRchn5r2lS0iO+JYXsV\n\tYYOikCwLCivGg=="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected) header.d=collabora.com\n\theader.i=@collabora.com\n\theader.b=\"jJ3c0TMX\"; dkim-atps=neutral","Message-ID":"<375de4725f2cfeb74a4fb6098ae9a4adc468f602.camel@collabora.com>","To":"Rishikesh Donadkar <rishikeshdonadkar@gmail.com>, \n\tlibcamera-devel@lists.libcamera.org","Date":"Mon, 04 Jul 2022 14:13:37 -0400","In-Reply-To":"<20220703073358.76643-3-rishikeshdonadkar@gmail.com>","References":"<20220703073358.76643-1-rishikeshdonadkar@gmail.com>\n\t<20220703073358.76643-3-rishikeshdonadkar@gmail.com>","Content-Type":"text/plain; charset=\"UTF-8\"","Content-Transfer-Encoding":"quoted-printable","User-Agent":"Evolution 3.44.2 (3.44.2-1.fc36) ","MIME-Version":"1.0","Subject":"Re: [libcamera-devel] [PATCH v1 3/5] gstreamer:Install the\n\tcolorimetry property","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>","From":"Nicolas Dufresne via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Nicolas Dufresne <nicolas.dufresne@collabora.com>","Cc":"vedantparanjape160201@gmail.com","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":23760,"web_url":"https://patchwork.libcamera.org/comment/23760/","msgid":"<CAEQmg0m1H9QvyqpiyV8H3E4NWAeZYT2vbsbUOB4GU83Za8mfHQ@mail.gmail.com>","date":"2022-07-06T07:58:15","subject":"Re: [libcamera-devel] [PATCH v1 3/5] gstreamer:Install the\n\tcolorimetry property","submitter":{"id":118,"url":"https://patchwork.libcamera.org/api/people/118/","name":"Rishikesh Donadkar","email":"rishikeshdonadkar@gmail.com"},"content":"> What would be a use case though for forcing a specific colorimetry ? Do the V4L2\n> stack we have supports this ?\n>\n> > +     g_object_class_install_property(object_class,PROP_COLORIMETRY,spec2);\n> >  }\n\na use case would be to set a colorspace requested by user with something like\ng_object_set(source, \"colorimetry\", \"bt2020\", NULL);\nI have tested that the requested colorimetry gets applied to the\ncamera if it passes the validation.\n\n\n\nOn Mon, Jul 4, 2022 at 11:43 PM Nicolas Dufresne\n<nicolas.dufresne@collabora.com> wrote:\n>\n> Le dimanche 03 juillet 2022 à 13:03 +0530, Rishikesh Donadkar a écrit :\n> > Add the colorimetry field in the _GstLibcameraSrc. Add switch cases in\n> > gst_libcamera_src_set_property() and gst_libcamera_src_get_property() to\n> > access and modify the property.\n> >\n> > Signed-off-by: Rishikesh Donadkar <rishikeshdonadkar@gmail.com>\n> > ---\n> >  src/gstreamer/gstlibcamerasrc.cpp | 18 +++++++++++++++++-\n> >  1 file changed, 17 insertions(+), 1 deletion(-)\n> >\n> > diff --git a/src/gstreamer/gstlibcamerasrc.cpp b/src/gstreamer/gstlibcamerasrc.cpp\n> > index 46fd02d2..120319b3 100644\n> > --- a/src/gstreamer/gstlibcamerasrc.cpp\n> > +++ b/src/gstreamer/gstlibcamerasrc.cpp\n> > @@ -121,6 +121,7 @@ struct _GstLibcameraSrc {\n> >       GstTask *task;\n> >\n> >       gchar *camera_name;\n> > +     gchar *colorimetry;\n> >\n> >       GstLibcameraSrcState *state;\n> >       GstLibcameraAllocator *allocator;\n> > @@ -129,7 +130,8 @@ struct _GstLibcameraSrc {\n> >\n> >  enum {\n> >       PROP_0,\n> > -     PROP_CAMERA_NAME\n> > +     PROP_CAMERA_NAME,\n> > +     PROP_COLORIMETRY,\n> >  };\n> >\n> >  G_DEFINE_TYPE_WITH_CODE(GstLibcameraSrc, gst_libcamera_src, GST_TYPE_ELEMENT,\n> > @@ -532,6 +534,10 @@ gst_libcamera_src_set_property(GObject *object, guint prop_id,\n> >               g_free(self->camera_name);\n> >               self->camera_name = g_value_dup_string(value);\n> >               break;\n> > +     case PROP_COLORIMETRY:\n> > +             g_free(self->colorimetry);\n> > +             self->colorimetry = g_value_dup_string(value);\n> > +             break;\n> >       default:\n> >               G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);\n> >               break;\n> > @@ -549,6 +555,9 @@ gst_libcamera_src_get_property(GObject *object, guint prop_id, GValue *value,\n> >       case PROP_CAMERA_NAME:\n> >               g_value_set_string(value, self->camera_name);\n> >               break;\n> > +     case PROP_COLORIMETRY:\n> > +             g_value_set_string(value, self->colorimetry);\n> > +             break;\n> >       default:\n> >               G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);\n> >               break;\n> > @@ -717,4 +726,11 @@ gst_libcamera_src_class_init(GstLibcameraSrcClass *klass)\n> >                                                            | G_PARAM_READWRITE\n> >                                                            | G_PARAM_STATIC_STRINGS));\n> >       g_object_class_install_property(object_class, PROP_CAMERA_NAME, spec);\n> > +\n> > +     GParamSpec *spec2 = g_param_spec_string(\"colorimetry\", \"Coloirmetry\",\n> > +                                             \"Colorimetry that will be applied to the StreamConfiguration\", nullptr,\n> > +                                            (GParamFlags)(GST_PARAM_MUTABLE_READY\n> > +                                                          | G_PARAM_READWRITE\n> > +                                                          | G_PARAM_STATIC_STRINGS));\n>\n> As this is a field in caps, the appropriate way to interact in userland is to\n> place such feild in downstream caps filter. Properties are not acceptable.\n>\n>   libcamerasrc ! video/x-raw,colorimetry=bt709 ! ...\n>\n> What would be a use case though for forcing a specific colorimetry ? Do the V4L2\n> stack we have supports this ?\n>\n> > +     g_object_class_install_property(object_class,PROP_COLORIMETRY,spec2);\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 26A4EBE173\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  6 Jul 2022 07:58:30 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 5487663310;\n\tWed,  6 Jul 2022 09:58:29 +0200 (CEST)","from mail-ua1-x92f.google.com (mail-ua1-x92f.google.com\n\t[IPv6:2607:f8b0:4864:20::92f])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id E185460400\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  6 Jul 2022 09:58:27 +0200 (CEST)","by mail-ua1-x92f.google.com with SMTP id r18so3301167uan.4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 06 Jul 2022 00:58:27 -0700 (PDT)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1657094309;\n\tbh=8JE74mWKVqWJ9M5DhCnC9fdYZeUBYwD2ix/5YAZJueY=;\n\th=References:In-Reply-To:Date:To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=onlHrMuDjOkPwoIconJjDN/dHx2lmjvA36dlfI6/Kt8LXGU5Yuyj2A5pmMqLqxG4E\n\tdNAoVgpfX+C/zn8/sff90XAWFeSm+H3fcNjntgfZ+0cTbFA+HkCcCBuhQVo+Bcm1uE\n\t5S4CeyuTyckmHHntWxwUSjKomnqqloV401gfdJTlpvmcO1WSCc8GxMPvZ6s0+IgKrm\n\tsviUTgX6k6QLvdl3AJtfao5urZB1pxlB41q6pT9Z3KaOEo0/OgdB+J5kDRmz4MJjBx\n\tvLvVZ3iNTSr93T/ddzWhk2209+VDTLusy4ihFhtt1eE5+T8//FdXx/JRV1SWewAQVp\n\tl1Kcy8+hbtPkQ==","v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112;\n\th=mime-version:references:in-reply-to:from:date:message-id:subject:to\n\t:cc:content-transfer-encoding;\n\tbh=4mDraqYUiZ3TMMhKRa6bajXSkEks05uqGneQA9oR/pc=;\n\tb=UTFsrqWJxbhyBHk4Jf/qVUrik4XvJUK2mUHFBTYHEDfTn9tJfK4UuulxQhnF71nWNQ\n\tSyVlSBldHSx4xPiTiin/tZjsIcmB58Jd+q3Kksi85Q2OhO/gM06HOL1nciD1F9FHM/uE\n\tjsGBq7hRqbojIRDAZWAKCDFhDNa8aM2fVM31iPzzgzQPT+03NIEMsaD+q9GZBU2KmzSJ\n\tklpzXr5cqKWykS/gkwG+NbARtMIU+lDkFYCTXi8On6madhgflq0wsAqc2yJWj5BfXI0Y\n\tdTbMHrD4PB2P8ajvi8F8GoUX0RClpZp6D5P35IY2TUlPChiUAX7mzFcrrqm0PiHy/BNY\n\t5OYw=="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"UTFsrqWJ\"; dkim-atps=neutral","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112;\n\th=x-gm-message-state:mime-version:references:in-reply-to:from:date\n\t:message-id:subject:to:cc:content-transfer-encoding;\n\tbh=4mDraqYUiZ3TMMhKRa6bajXSkEks05uqGneQA9oR/pc=;\n\tb=gokf0XFRR6+Y+6tg6b4lnNP8gBqd9n5pMrtdcTNsxOzzRv7ZT0upN+sJGqEnWXW6yK\n\tdX1mEhssRIJOjzERO0t1HNMV5xq3Jwhqg1VRfxjKvvERpZLC72GuWk8lvi8yHAIhhsO3\n\t/eaqDQ1juWSd7K5G4phcV8R2r0GNicq3+GMXM5nV4RaajyYnEIFdeKL4SVaVu+KoN84b\n\tEGvWAZJ1AU3dW7iiAVAr0ygLW0hOSfKER1DekoyiyXlydy42g6h0B7/khsh72HOAEy68\n\tRspKib9dnAwPugsqlhiVGTsCMzYYQ5pFyOUoHbhqsXsdJnC1LWGFlBYTm+5ce7HIR14Q\n\tdZWw==","X-Gm-Message-State":"AJIora8DajQZCv2RE/CPU29I3+Evyo85aSMq5ABTbJ8ivD7cO9Snd828\n\t6iaOhqJ8XE/8qeGIPkCfr6B0zNYLu1wKO1N+eGw=","X-Google-Smtp-Source":"AGRyM1tFCdJZmAYXWktSznmJnAr30C9B9f/3KHwN6KlWjkp+iD3d/0m3EYpEA0tc9rNUrFkRNbKAB/VebfTvkXry5t8=","X-Received":"by 2002:ab0:3a94:0:b0:382:cd72:8cea with SMTP id\n\tr20-20020ab03a94000000b00382cd728ceamr2984820uaw.72.1657094306711;\n\tWed, 06 Jul 2022 00:58:26 -0700 (PDT)","MIME-Version":"1.0","References":"<20220703073358.76643-1-rishikeshdonadkar@gmail.com>\n\t<20220703073358.76643-3-rishikeshdonadkar@gmail.com>\n\t<375de4725f2cfeb74a4fb6098ae9a4adc468f602.camel@collabora.com>","In-Reply-To":"<375de4725f2cfeb74a4fb6098ae9a4adc468f602.camel@collabora.com>","Date":"Wed, 6 Jul 2022 13:28:15 +0530","Message-ID":"<CAEQmg0m1H9QvyqpiyV8H3E4NWAeZYT2vbsbUOB4GU83Za8mfHQ@mail.gmail.com>","To":"Nicolas Dufresne <nicolas.dufresne@collabora.com>","Content-Type":"text/plain; charset=\"UTF-8\"","Content-Transfer-Encoding":"quoted-printable","Subject":"Re: [libcamera-devel] [PATCH v1 3/5] gstreamer:Install the\n\tcolorimetry property","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>","From":"Rishikesh Donadkar via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Rishikesh Donadkar <rishikeshdonadkar@gmail.com>","Cc":"libcamera-devel@lists.libcamera.org, vedantparanjape160201@gmail.com","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":23770,"web_url":"https://patchwork.libcamera.org/comment/23770/","msgid":"<ab0522564a1271f019bee30aa477d5b1e6ccfae1.camel@collabora.com>","date":"2022-07-06T14:08:02","subject":"Re: [libcamera-devel] [PATCH v1 3/5] gstreamer:Install the\n\tcolorimetry property","submitter":{"id":31,"url":"https://patchwork.libcamera.org/api/people/31/","name":"Nicolas Dufresne","email":"nicolas.dufresne@collabora.com"},"content":"Le mercredi 06 juillet 2022 à 13:28 +0530, Rishikesh Donadkar a écrit :\n> > What would be a use case though for forcing a specific colorimetry ? Do the\n> > V4L2\n> > stack we have supports this ?\n> > \n> > > +    \n> > > g_object_class_install_property(object_class,PROP_COLORIMETRY,spec2);\n> > >  }\n> \n> a use case would be to set a colorspace requested by user with something like\n> g_object_set(source, \"colorimetry\", \"bt2020\", NULL);\n> I have tested that the requested colorimetry gets applied to the\n> camera if it passes the validation.\n\nI might have miss-explained, caps fields in GStreamer shall never be replaced by\na property. The caps negotiation process should let you interact with element\n(per stream) to select a colorimetry. Something like:\n\n  libcamerasrc ! video/x-raw,colorimetry=bt709 ! ...\n\nWould force bt709 or fail. Something like:\n\n  libcamerasrc ! \"video/x-raw,colorimetry={bt709,bt601}\" ! ...\n\nShould try bt709 or bt601, or fail. And something like:\n\n  libcamerasrc ! \"video/x-raw,colorimetry=bt709;video/x-raw\" ! ...\n\nWill ensure bt709 is preffered, but accept anything if that is not possible. So\ninstead of the properly, the caps negotiation needs to be enhance to try and\nmatch requested colorimetry signalled by downstream. With this method, you can\nhave different colorimetry per stream/pad if this is supported by the ISP.\n\nNicolas\n> \n> \n> \n> On Mon, Jul 4, 2022 at 11:43 PM Nicolas Dufresne\n> <nicolas.dufresne@collabora.com> wrote:\n> > \n> > Le dimanche 03 juillet 2022 à 13:03 +0530, Rishikesh Donadkar a écrit :\n> > > Add the colorimetry field in the _GstLibcameraSrc. Add switch cases in\n> > > gst_libcamera_src_set_property() and gst_libcamera_src_get_property() to\n> > > access and modify the property.\n> > > \n> > > Signed-off-by: Rishikesh Donadkar <rishikeshdonadkar@gmail.com>\n> > > ---\n> > >  src/gstreamer/gstlibcamerasrc.cpp | 18 +++++++++++++++++-\n> > >  1 file changed, 17 insertions(+), 1 deletion(-)\n> > > \n> > > diff --git a/src/gstreamer/gstlibcamerasrc.cpp\n> > > b/src/gstreamer/gstlibcamerasrc.cpp\n> > > index 46fd02d2..120319b3 100644\n> > > --- a/src/gstreamer/gstlibcamerasrc.cpp\n> > > +++ b/src/gstreamer/gstlibcamerasrc.cpp\n> > > @@ -121,6 +121,7 @@ struct _GstLibcameraSrc {\n> > >       GstTask *task;\n> > > \n> > >       gchar *camera_name;\n> > > +     gchar *colorimetry;\n> > > \n> > >       GstLibcameraSrcState *state;\n> > >       GstLibcameraAllocator *allocator;\n> > > @@ -129,7 +130,8 @@ struct _GstLibcameraSrc {\n> > > \n> > >  enum {\n> > >       PROP_0,\n> > > -     PROP_CAMERA_NAME\n> > > +     PROP_CAMERA_NAME,\n> > > +     PROP_COLORIMETRY,\n> > >  };\n> > > \n> > >  G_DEFINE_TYPE_WITH_CODE(GstLibcameraSrc, gst_libcamera_src,\n> > > GST_TYPE_ELEMENT,\n> > > @@ -532,6 +534,10 @@ gst_libcamera_src_set_property(GObject *object, guint\n> > > prop_id,\n> > >               g_free(self->camera_name);\n> > >               self->camera_name = g_value_dup_string(value);\n> > >               break;\n> > > +     case PROP_COLORIMETRY:\n> > > +             g_free(self->colorimetry);\n> > > +             self->colorimetry = g_value_dup_string(value);\n> > > +             break;\n> > >       default:\n> > >               G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);\n> > >               break;\n> > > @@ -549,6 +555,9 @@ gst_libcamera_src_get_property(GObject *object, guint\n> > > prop_id, GValue *value,\n> > >       case PROP_CAMERA_NAME:\n> > >               g_value_set_string(value, self->camera_name);\n> > >               break;\n> > > +     case PROP_COLORIMETRY:\n> > > +             g_value_set_string(value, self->colorimetry);\n> > > +             break;\n> > >       default:\n> > >               G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);\n> > >               break;\n> > > @@ -717,4 +726,11 @@ gst_libcamera_src_class_init(GstLibcameraSrcClass\n> > > *klass)\n> > >                                                            |\n> > > G_PARAM_READWRITE\n> > >                                                            |\n> > > G_PARAM_STATIC_STRINGS));\n> > >       g_object_class_install_property(object_class, PROP_CAMERA_NAME,\n> > > spec);\n> > > +\n> > > +     GParamSpec *spec2 = g_param_spec_string(\"colorimetry\",\n> > > \"Coloirmetry\",\n> > > +                                             \"Colorimetry that will be\n> > > applied to the StreamConfiguration\", nullptr,\n> > > +                                           \n> > > (GParamFlags)(GST_PARAM_MUTABLE_READY\n> > > +                                                          |\n> > > G_PARAM_READWRITE\n> > > +                                                          |\n> > > G_PARAM_STATIC_STRINGS));\n> > \n> > As this is a field in caps, the appropriate way to interact in userland is\n> > to\n> > place such feild in downstream caps filter. Properties are not acceptable.\n> > \n> >   libcamerasrc ! video/x-raw,colorimetry=bt709 ! ...\n> > \n> > What would be a use case though for forcing a specific colorimetry ? Do the\n> > V4L2\n> > stack we have supports this ?\n> > \n> > > +    \n> > > g_object_class_install_property(object_class,PROP_COLORIMETRY,spec2);\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 3CC87BD1F1\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  6 Jul 2022 14:08:16 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 79D8663310;\n\tWed,  6 Jul 2022 16:08:15 +0200 (CEST)","from madras.collabora.co.uk (madras.collabora.co.uk\n\t[IPv6:2a00:1098:0:82:1000:25:2eeb:e5ab])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id E71FA60403\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  6 Jul 2022 16:08:13 +0200 (CEST)","from nicolas-tpx395.localdomain (mtl.collabora.ca [66.171.169.34])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\tkey-exchange X25519 server-signature RSA-PSS (4096 bits)\n\tserver-digest SHA256)\n\t(No client certificate requested) (Authenticated sender: nicolas)\n\tby madras.collabora.co.uk (Postfix) with ESMTPSA id A2CCE660186F;\n\tWed,  6 Jul 2022 15:08:12 +0100 (BST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1657116495;\n\tbh=JJuD+IUzIMwFpNxE0LVwwG1eOHrQA7qduhLNPGndAcg=;\n\th=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=nhhtuOg/1tKJFvVWCjCeIZD/vJzG9srSvDuquXtFmfKSDjBdgDG8xKGsaLTj80hPS\n\t7UFZwdi4WMK3pSTpCVg4vaQ6Ysfo/WkTwqj8biMBe0UvrSLso73VdU12W+aRk1mtO9\n\teUmssc1BC0BGgq4pC6/IpqLI3R7k+v91Tf9SnXcUAOjPfXu7hlepmRhGqZi7xMvZca\n\tsQp0BwzzsXkr0HWwG1sfRP6WKQxrsY80XOH0AnQRLczTR3FpR71nTN1I46LePy6Z/p\n\t5q/k/hvxU2KcedPSwMzpeaf13kvsbA8QPWEqvImtD2Cp4gQOOCPmIPse5deb9rl385\n\teIugGgQOmUOWg==","v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com;\n\ts=mail; t=1657116493;\n\tbh=JJuD+IUzIMwFpNxE0LVwwG1eOHrQA7qduhLNPGndAcg=;\n\th=Subject:From:To:Cc:Date:In-Reply-To:References:From;\n\tb=ZJkBh2TqAoRcPcLIv/Yj6g2kyq5H4p331a/PLKqLqKrpDMzMoZcnb1K2pjb2LR39J\n\t+fE8MXxtbPVwAa3Yo1wNIARQri8aFmatLLbJdIxf1/eeoXZHyb55S/PAZeVtVRVB3Y\n\tWq3Rw3Ql2PpL5fiPUY3k3WDggcwWuJ+sg43gyT5QQR3J+9ExXa3DNTUCNW+ATxrSWS\n\tA/HxEamCpS1LIxO3OpM4mB2FerJXKwh8yCvkTMRaS1wp81I/hxyxUqCKNwswxI45jl\n\t2yACxe5ukT4YZznAlincC4livnnNtpH46buNECCXVbgLLccqSXWKxJBeD4d9xV5w0M\n\tijKceKgrgGFhQ=="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected) header.d=collabora.com\n\theader.i=@collabora.com\n\theader.b=\"ZJkBh2Tq\"; dkim-atps=neutral","Message-ID":"<ab0522564a1271f019bee30aa477d5b1e6ccfae1.camel@collabora.com>","To":"Rishikesh Donadkar <rishikeshdonadkar@gmail.com>","Date":"Wed, 06 Jul 2022 10:08:02 -0400","In-Reply-To":"<CAEQmg0m1H9QvyqpiyV8H3E4NWAeZYT2vbsbUOB4GU83Za8mfHQ@mail.gmail.com>","References":"<20220703073358.76643-1-rishikeshdonadkar@gmail.com>\n\t<20220703073358.76643-3-rishikeshdonadkar@gmail.com>\n\t<375de4725f2cfeb74a4fb6098ae9a4adc468f602.camel@collabora.com>\n\t<CAEQmg0m1H9QvyqpiyV8H3E4NWAeZYT2vbsbUOB4GU83Za8mfHQ@mail.gmail.com>","Content-Type":"text/plain; charset=\"UTF-8\"","Content-Transfer-Encoding":"quoted-printable","User-Agent":"Evolution 3.44.2 (3.44.2-1.fc36) ","MIME-Version":"1.0","Subject":"Re: [libcamera-devel] [PATCH v1 3/5] gstreamer:Install the\n\tcolorimetry property","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>","From":"Nicolas Dufresne via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Nicolas Dufresne <nicolas.dufresne@collabora.com>","Cc":"libcamera-devel@lists.libcamera.org, vedantparanjape160201@gmail.com","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]