mirror of
https://gitlab.freedesktop.org/monado/monado.git
synced 2025-02-15 10:10:07 +00:00
u/json: Add u_json_get_pose_permissive
To parse poses from non-Monado configs with non-standard member names.
This commit is contained in:
parent
b31eb76718
commit
48e8894b74
|
@ -278,6 +278,42 @@ u_json_get_pose(const cJSON *json, struct xrt_pose *out_pose)
|
||||||
return good;
|
return good;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
u_json_get_pose_permissive(const cJSON *json, struct xrt_pose *out_pose)
|
||||||
|
{
|
||||||
|
struct xrt_pose tmp;
|
||||||
|
|
||||||
|
const char *position_names[] = {"position", "translation", "location", "pos", "loc"};
|
||||||
|
const char *orientation_names[] = {"orientation", "rotation", "rot"};
|
||||||
|
|
||||||
|
bool found_position = false;
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < ARRAY_SIZE(position_names); i++) {
|
||||||
|
found_position = u_json_get_vec3(u_json_get(json, position_names[i]), &tmp.position);
|
||||||
|
if (found_position) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found_position) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool found_orientation = false;
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < ARRAY_SIZE(orientation_names); i++) {
|
||||||
|
found_orientation = u_json_get_vec3(u_json_get(json, orientation_names[i]), &tmp.position);
|
||||||
|
if (found_orientation) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found_orientation) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
size_t
|
size_t
|
||||||
u_json_get_float_array(const cJSON *json_array, float *out_array, size_t max_size)
|
u_json_get_float_array(const cJSON *json_array, float *out_array, size_t max_size)
|
||||||
|
|
|
@ -110,6 +110,16 @@ bool
|
||||||
u_json_get_pose(const cJSON *json, struct xrt_pose *out_pose);
|
u_json_get_pose(const cJSON *json, struct xrt_pose *out_pose);
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief Parse a pose from a JSON object, composed of
|
||||||
|
* a vec3 named "position", "translation", "location", "pos", or "loc"
|
||||||
|
* and a quat named "orientation". "rotation", or "rot"
|
||||||
|
*
|
||||||
|
* @return true if successful, false if not.
|
||||||
|
*/
|
||||||
|
bool
|
||||||
|
u_json_get_pose_permissive(const cJSON *json, struct xrt_pose *out_pose);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief Parse up to max_size floats from a JSON array.
|
* @brief Parse up to max_size floats from a JSON array.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in a new issue