[libcamera-devel] [PATCH v2 2/4] gstreamer: Update the obtained colorimetry in caps.

Vedant Paranjape vedantparanjape160201 at gmail.com
Thu Jul 7 13:51:15 CEST 2022


Hello Rishikesh,

Thanks for the patch,

On Thu, Jul 7, 2022 at 11:45 AM Rishikesh Donadkar
<rishikeshdonadkar at gmail.com> wrote:
>
> If the colorspace is set in the StreamConfiguration, get the colorimetry as
> a result of conversion from the previous patch and update it into the caps.

this sounds better:

get the colorimetry after converting colorspace using functions
from the previous patch and update it into the GStreamer caps.

>
> If the colorimetry corresponding to the colorspace set in the
> StreamConfiguration is not available in GStreamer set the colorimetry
> field to nullptr in the caps (this will fail the negotiation).
>
> Signed-off-by: Rishikesh Donadkar <rishikeshdonadkar at gmail.com>
> ---
>  src/gstreamer/gstlibcamera-utils.cpp | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
>
> diff --git a/src/gstreamer/gstlibcamera-utils.cpp b/src/gstreamer/gstlibcamera-utils.cpp
> index 60ac8c8e..eb9c49da 100644
> --- a/src/gstreamer/gstlibcamera-utils.cpp
> +++ b/src/gstreamer/gstlibcamera-utils.cpp
> @@ -166,11 +166,26 @@ gst_libcamera_stream_configuration_to_caps(const StreamConfiguration &stream_cfg
>  {
>         GstCaps *caps = gst_caps_new_empty();
>         GstStructure *s = bare_structure_from_format(stream_cfg.pixelFormat);
> +       gchar *colorimetry = nullptr;
> +       std::optional<ColorSpace> colorspace = stream_cfg.colorSpace;
>
>         gst_structure_set(s,
>                           "width", G_TYPE_INT, stream_cfg.size.width,
>                           "height", G_TYPE_INT, stream_cfg.size.height,
>                           nullptr);
> +
> +       if (colorspace) {

You might want to use

> colorspace.has_value()

Even though it's one and the same, this seems more verbose. Just a
personal preference, anyone has comments about this ?

> +               colorimetry = colorimerty_from_colorspace(colorspace);
> +               if (colorimetry) {
> +                       gst_structure_set(s, "colorimetry", G_TYPE_STRING, colorimetry, nullptr);
> +               } else {
> +                       gst_structure_set(s, "colorimetry", G_TYPE_STRING, nullptr, nullptr);
> +                       g_free(colorimetry);
> +               }
> +       } else {
> +               g_free(colorimetry);
> +       }
> +

This if-else block can be further simplified as follows:

<snip>
if (colorspace) {
    colorimetry = colorimerty_from_colorspace(colorspace);
    gst_structure_set(s, "colorimetry", G_TYPE_STRING, colorimetry, nullptr);
    g_free(colorimetry);
}
</snip>

Regards,
Vedant Paranjape


+
+       if (colorspace) {
+               colorimetry = colorimerty_from_colorspace(co
lorspace);
+               if (colorimetry) {
+                       gst_structure_set(s, "colorimetry",
G_TYPE_STRING, colorimetry, nullptr);
+               } else {
+                       gst_structure_set(s, "colorimetry",
G_TYPE_STRING, nullptr, nullptr);
+                       g_free(colorimetry);
+               }
+       } else {
+               g_free(colorimetry);
+       }
+

>         gst_caps_append_structure(caps, s);
>
>         return caps;
> --
> 2.25.1
>


More information about the libcamera-devel mailing list