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

Nicolas Dufresne nicolas.dufresne at collabora.com
Thu Jul 7 16:02:36 CEST 2022


Le jeudi 07 juillet 2022 à 15:14 +0530, Rishikesh Donadkar via libcamera-devel a
écrit :
> 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.
> 
> 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) {
> +		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);

Setting a string field as null is not allowed in gstreamer and will cause
assertion later. If you don't know the colorspace/colorimetry, don't set that
field. If the field is there but unfixed, remove it.

> +		}
> +	} else {
> +		g_free(colorimetry);
> +	}
> +
>  	gst_caps_append_structure(caps, s);
>  
>  	return caps;



More information about the libcamera-devel mailing list