gstreamer: Move existing GValue helpers to gstreamer-utils

Move the existing GValue helpers from gstlibcamera-controls.cpp.in
to gstreamer-utils.cpp. The intention here is to make these helpers
available to other parts of gstreamer source element, for example,
reporting camera properties in GstDeviceProvider.

The function signature has been changed to match with the other
gstreamer-utils utility functions:

value_get_rectangle() =>  gst_libcamera_gvalue_get_rectangle()
value_set_rectangle() =>  gst_libcamera_gvalue_set_rectangle()
value_set_point()     =>  gst_libcamera_gvalue_set_point()
value_set_size()      =>  gst_libcamera_gvalue_set_size()

Signed-off-by: Umang Jain <uajain@igalia.com>
Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Umang Jain
2025-08-06 19:04:44 +01:00
committed by Kieran Bingham
parent f96c4df423
commit 0794edcae6
3 changed files with 56 additions and 51 deletions
+5 -51
View File
@@ -14,56 +14,10 @@
#include <libcamera/geometry.h>
#include "gstlibcamera-controls.h"
#include "gstlibcamera-utils.h"
using namespace libcamera;
static void value_set_point(GValue *value, const Point &point)
{
GValue x = G_VALUE_INIT;
g_value_init(&x, G_TYPE_INT);
g_value_set_int(&x, point.x);
gst_value_array_append_and_take_value(value, &x);
GValue y = G_VALUE_INIT;
g_value_init(&y, G_TYPE_INT);
g_value_set_int(&y, point.y);
gst_value_array_append_and_take_value(value, &y);
}
static void value_set_size(GValue *value, const Size &size)
{
GValue width = G_VALUE_INIT;
g_value_init(&width, G_TYPE_INT);
g_value_set_int(&width, size.width);
gst_value_array_append_and_take_value(value, &width);
GValue height = G_VALUE_INIT;
g_value_init(&height, G_TYPE_INT);
g_value_set_int(&height, size.height);
gst_value_array_append_and_take_value(value, &height);
}
static void value_set_rectangle(GValue *value, const Rectangle &rect)
{
value_set_point(value, rect.topLeft());
value_set_size(value, rect.size());
}
static Rectangle value_get_rectangle(const GValue *value)
{
const GValue *r;
r = gst_value_array_get_value(value, 0);
int x = g_value_get_int(r);
r = gst_value_array_get_value(value, 1);
int y = g_value_get_int(r);
r = gst_value_array_get_value(value, 2);
int w = g_value_get_int(r);
r = gst_value_array_get_value(value, 3);
int h = g_value_get_int(r);
return Rectangle(x, y, w, h);
}
{% for vendor, ctrls in controls %}
{%- for ctrl in ctrls if ctrl.is_enum %}
static const GEnumValue {{ ctrl.name|snake_case }}_types[] = {
@@ -179,7 +133,7 @@ bool GstCameraControls::getProperty(guint propId, GValue *value,
GValue element = G_VALUE_INIT;
{%- if ctrl.is_rectangle %}
g_value_init(&element, GST_TYPE_PARAM_ARRAY_LIST);
value_set_rectangle(&element, control[i]);
gst_libcamera_gvalue_set_rectangle(&element, control[i]);
{%- else %}
g_value_init(&element, G_TYPE_{{ ctrl.gtype|upper }});
g_value_set_{{ ctrl.gtype }}(&element, control[i]);
@@ -188,7 +142,7 @@ bool GstCameraControls::getProperty(guint propId, GValue *value,
}
{%- else %}
{%- if ctrl.is_rectangle %}
value_set_rectangle(value, control);
gst_libcamera_gvalue_set_rectangle(value, control);
{%- else %}
g_value_set_{{ ctrl.gtype }}(value, control);
{%- endif %}
@@ -252,7 +206,7 @@ bool GstCameraControls::setProperty(guint propId, const GValue *value,
i);
return true;
}
values[i] = value_get_rectangle(element);
values[i] = gst_libcamera_gvalue_get_rectangle(element);
{%- else %}
values[i] = g_value_get_{{ ctrl.gtype }}(element);
{%- endif %}
@@ -271,7 +225,7 @@ bool GstCameraControls::setProperty(guint propId, const GValue *value,
"array of size 4");
return true;
}
Rectangle val = value_get_rectangle(value);
Rectangle val = gst_libcamera_gvalue_get_rectangle(value);
{%- else %}
auto val = g_value_get_{{ ctrl.gtype }}(value);
{%- endif %}