libobs: Add obs_data_clear to clear settings

This function is intended to clear all settings outside of
default/autoselect values.
master
jp9000 2015-01-24 22:09:24 -08:00
parent b042e20e24
commit af8d5db4ad
2 changed files with 45 additions and 0 deletions

View File

@ -882,6 +882,50 @@ void obs_data_erase(obs_data_t *data, const char *name)
}
}
static inline void clear_item(struct obs_data *data, struct obs_data_item *item)
{
const char *name = get_item_name(item);
void *ptr = get_item_data(item);
size_t size;
if (item->data_len) {
if (item->type == OBS_DATA_OBJECT) {
obs_data_t **obj = item->data_size ? ptr : NULL;
if (obj && *obj)
obs_data_release(*obj);
} else if (item->type == OBS_DATA_ARRAY) {
obs_data_array_t **array = item->data_size ? ptr : NULL;
if (array && *array)
obs_data_array_release(*array);
}
size = item->default_len + item->autoselect_size;
if (size)
memmove(ptr, (uint8_t*)ptr + item->data_len, size);
item->data_size = 0;
item->data_len = 0;
}
}
void obs_data_clear(obs_data_t *target)
{
struct obs_data_item *item;
if (!target)
return;
item = target->first_item;
while (item) {
clear_item(target, item);
item = item->next;
}
}
typedef void (*set_item_t)(obs_data_t*, obs_data_item_t**, const char*,
const void*, size_t, enum obs_data_type);

View File

@ -70,6 +70,7 @@ EXPORT const char *obs_data_get_json(obs_data_t *data);
EXPORT void obs_data_apply(obs_data_t *target, obs_data_t *apply_data);
EXPORT void obs_data_erase(obs_data_t *data, const char *name);
EXPORT void obs_data_clear(obs_data_t *data);
/* Set functions */
EXPORT void obs_data_set_string(obs_data_t *data, const char *name,