提交 21b67d00 编写于 作者: J jp9000

Add helper functions to obs_data and fix bug

Add math helpers to the obs_data functions for vec2/3/4 and quat, and
fix a bug where it wouldn't load arrays from json
上级 bfeb16e8
......@@ -18,6 +18,10 @@
#include "util/bmem.h"
#include "util/threading.h"
#include "util/darray.h"
#include "graphics/vec2.h"
#include "graphics/vec3.h"
#include "graphics/vec4.h"
#include "graphics/quat.h"
#include "obs-data.h"
#include <jansson.h>
......@@ -353,6 +357,7 @@ static inline void set_json_array(json_t *json, const char *name,
obs_data_t sub_item = obs_data_array_item(array, idx);
json_t *jitem = obs_data_to_json(sub_item);
json_array_append_new(jarray, jitem);
obs_data_release(sub_item);
}
json_object_set_new(json, name, jarray);
......@@ -376,6 +381,8 @@ static json_t *obs_data_to_json(obs_data_t data)
set_json_bool(json, name, item);
else if (type == OBS_DATA_OBJECT)
set_json_obj(json, name, item);
else if (type == OBS_DATA_ARRAY)
set_json_array(json, name, item);
obs_data_item_next(&item);
}
......@@ -935,3 +942,95 @@ obs_data_array_t obs_data_item_getarray(obs_data_item_t item)
os_atomic_inc_long(&array->ref);
return array;
}
/* ------------------------------------------------------------------------- */
/* Helper functions for certain structures */
void obs_data_set_vec2(obs_data_t data, const char *name,
const struct vec2 *val)
{
obs_data_t obj = obs_data_create();
obs_data_setdouble(obj, "x", val->x);
obs_data_setdouble(obj, "y", val->y);
obs_data_setobj(data, name, obj);
obs_data_release(obj);
}
void obs_data_set_vec3(obs_data_t data, const char *name,
const struct vec3 *val)
{
obs_data_t obj = obs_data_create();
obs_data_setdouble(obj, "x", val->x);
obs_data_setdouble(obj, "y", val->y);
obs_data_setdouble(obj, "z", val->z);
obs_data_setobj(data, name, obj);
obs_data_release(obj);
}
void obs_data_set_vec4(obs_data_t data, const char *name,
const struct vec4 *val)
{
obs_data_t obj = obs_data_create();
obs_data_setdouble(obj, "x", val->x);
obs_data_setdouble(obj, "y", val->y);
obs_data_setdouble(obj, "z", val->z);
obs_data_setdouble(obj, "w", val->w);
obs_data_setobj(data, name, obj);
obs_data_release(obj);
}
void obs_data_set_quat(obs_data_t data, const char *name,
const struct quat *val)
{
obs_data_t obj = obs_data_create();
obs_data_setdouble(obj, "x", val->x);
obs_data_setdouble(obj, "y", val->y);
obs_data_setdouble(obj, "z", val->z);
obs_data_setdouble(obj, "w", val->w);
obs_data_setobj(data, name, obj);
obs_data_release(obj);
}
void obs_data_get_vec2(obs_data_t data, const char *name, struct vec2 *val)
{
obs_data_t obj = obs_data_getobj(data, name);
if (!obj) return;
val->x = (float)obs_data_getdouble(obj, "x");
val->y = (float)obs_data_getdouble(obj, "y");
obs_data_release(obj);
}
void obs_data_get_vec3(obs_data_t data, const char *name, struct vec3 *val)
{
obs_data_t obj = obs_data_getobj(data, name);
if (!obj) return;
val->x = (float)obs_data_getdouble(obj, "x");
val->y = (float)obs_data_getdouble(obj, "y");
val->z = (float)obs_data_getdouble(obj, "z");
obs_data_release(obj);
}
void obs_data_get_vec4(obs_data_t data, const char *name, struct vec4 *val)
{
obs_data_t obj = obs_data_getobj(data, name);
if (!obj) return;
val->x = (float)obs_data_getdouble(obj, "x");
val->y = (float)obs_data_getdouble(obj, "y");
val->z = (float)obs_data_getdouble(obj, "z");
val->w = (float)obs_data_getdouble(obj, "w");
obs_data_release(obj);
}
void obs_data_get_quat(obs_data_t data, const char *name, struct quat *val)
{
obs_data_t obj = obs_data_getobj(data, name);
if (!obj) return;
val->x = (float)obs_data_getdouble(obj, "x");
val->y = (float)obs_data_getdouble(obj, "y");
val->z = (float)obs_data_getdouble(obj, "z");
val->w = (float)obs_data_getdouble(obj, "w");
obs_data_release(obj);
}
......@@ -146,6 +146,26 @@ EXPORT bool obs_data_item_getbool(obs_data_item_t item);
EXPORT obs_data_t obs_data_item_getobj(obs_data_item_t item);
EXPORT obs_data_array_t obs_data_item_getarray(obs_data_item_t item);
/* ------------------------------------------------------------------------- */
/* Helper functions for certain structures */
EXPORT void obs_data_set_vec2(obs_data_t data, const char *name,
const struct vec2 *val);
EXPORT void obs_data_set_vec3(obs_data_t data, const char *name,
const struct vec3 *val);
EXPORT void obs_data_set_vec4(obs_data_t data, const char *name,
const struct vec4 *val);
EXPORT void obs_data_set_quat(obs_data_t data, const char *name,
const struct quat *val);
EXPORT void obs_data_get_vec2(obs_data_t data, const char *name,
struct vec2 *val);
EXPORT void obs_data_get_vec3(obs_data_t data, const char *name,
struct vec3 *val);
EXPORT void obs_data_get_vec4(obs_data_t data, const char *name,
struct vec4 *val);
EXPORT void obs_data_get_quat(obs_data_t data, const char *name,
struct quat *val);
/* ------------------------------------------------------------------------- */
/* OBS-specific functions */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册