[libcamera-devel] [PATCH v1 3/5] gstreamer:Install the colorimetry property

Nicolas Dufresne nicolas.dufresne at collabora.com
Mon Jul 4 20:13:37 CEST 2022


Le dimanche 03 juillet 2022 à 13:03 +0530, Rishikesh Donadkar a écrit :
> Add the colorimetry field in the _GstLibcameraSrc. Add switch cases in
> gst_libcamera_src_set_property() and gst_libcamera_src_get_property() to
> access and modify the property.
> 
> Signed-off-by: Rishikesh Donadkar <rishikeshdonadkar at gmail.com>
> ---
>  src/gstreamer/gstlibcamerasrc.cpp | 18 +++++++++++++++++-
>  1 file changed, 17 insertions(+), 1 deletion(-)
> 
> diff --git a/src/gstreamer/gstlibcamerasrc.cpp b/src/gstreamer/gstlibcamerasrc.cpp
> index 46fd02d2..120319b3 100644
> --- a/src/gstreamer/gstlibcamerasrc.cpp
> +++ b/src/gstreamer/gstlibcamerasrc.cpp
> @@ -121,6 +121,7 @@ struct _GstLibcameraSrc {
>  	GstTask *task;
>  
>  	gchar *camera_name;
> +	gchar *colorimetry;
>  
>  	GstLibcameraSrcState *state;
>  	GstLibcameraAllocator *allocator;
> @@ -129,7 +130,8 @@ struct _GstLibcameraSrc {
>  
>  enum {
>  	PROP_0,
> -	PROP_CAMERA_NAME
> +	PROP_CAMERA_NAME,
> +	PROP_COLORIMETRY,
>  };
>  
>  G_DEFINE_TYPE_WITH_CODE(GstLibcameraSrc, gst_libcamera_src, GST_TYPE_ELEMENT,
> @@ -532,6 +534,10 @@ gst_libcamera_src_set_property(GObject *object, guint prop_id,
>  		g_free(self->camera_name);
>  		self->camera_name = g_value_dup_string(value);
>  		break;
> +	case PROP_COLORIMETRY:
> +		g_free(self->colorimetry);
> +		self->colorimetry = g_value_dup_string(value);
> +		break;
>  	default:
>  		G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
>  		break;
> @@ -549,6 +555,9 @@ gst_libcamera_src_get_property(GObject *object, guint prop_id, GValue *value,
>  	case PROP_CAMERA_NAME:
>  		g_value_set_string(value, self->camera_name);
>  		break;
> +	case PROP_COLORIMETRY:
> +		g_value_set_string(value, self->colorimetry);
> +		break;
>  	default:
>  		G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
>  		break;
> @@ -717,4 +726,11 @@ gst_libcamera_src_class_init(GstLibcameraSrcClass *klass)
>  							     | G_PARAM_READWRITE
>  							     | G_PARAM_STATIC_STRINGS));
>  	g_object_class_install_property(object_class, PROP_CAMERA_NAME, spec);
> +
> +	GParamSpec *spec2 = g_param_spec_string("colorimetry", "Coloirmetry",
> +						"Colorimetry that will be applied to the StreamConfiguration", nullptr,
> +					       (GParamFlags)(GST_PARAM_MUTABLE_READY
> +							     | G_PARAM_READWRITE
> +							     | G_PARAM_STATIC_STRINGS));

As this is a field in caps, the appropriate way to interact in userland is to
place such feild in downstream caps filter. Properties are not acceptable.

  libcamerasrc ! video/x-raw,colorimetry=bt709 ! ...

What would be a use case though for forcing a specific colorimetry ? Do the V4L2
stack we have supports this ?

> +	g_object_class_install_property(object_class,PROP_COLORIMETRY,spec2);
>  }



More information about the libcamera-devel mailing list