spa: match camera property types with libcamera

The Pipewire libcamera spa plugin exposes multiple camera properties.
Unlike v4l2, libcamera usually exposes these as normalized floating
point values. But as the SPA_PROP types are based on v4l2, they are
currently set to integers.

This causes a problem when using pw-cli to change the properties,
as the spa_json_to_pod_part function casts the properties according
to their spa_type_info. Other software that doesn't depend on the
spa_type_info can correctly set the properties, as the values are
encoded in the spa_pod type and therefore also carry a type.

As the limited range from switching integers to floats is likely not a
problem, the affected spa properties were changed to the Float type.
This will cause pw-cli to also generate spa_pod values of type float
when setting v4l2 properties. Therefore the v4l2 spa plugin is also
adapted to allow floating point properties and cast these to integers.

Signed-off-by: Sven Püschel <s.pueschel@pengutronix.de>
This commit is contained in:
Sven Püschel 2024-07-17 14:38:32 +02:00 committed by Wim Taymans
parent ab5fadec2b
commit 5932963506
2 changed files with 13 additions and 5 deletions

View file

@ -1361,6 +1361,14 @@ spa_v4l2_set_control(struct impl *this, uint32_t id,
control.value = val;
break;
}
case SPA_TYPE_Float:
{
float val;
if ((res = spa_pod_get_float(&prop->value, &val)) < 0)
goto done;
control.value = (int32_t) val;
break;
}
case SPA_TYPE_Int:
{
int32_t val;