libobs: Add functions to get/set global private data

Allows the ability to set custom global OBS context private data for
allowing the frontend to communicate variables with plugins in an
indirect way.
This commit is contained in:
jp9000 2018-08-10 06:01:22 -07:00
parent c43702e335
commit fc37cbcca4
3 changed files with 36 additions and 0 deletions

View file

@ -331,6 +331,8 @@ struct obs_core_data {
long long unnamed_index;
obs_data_t *private_data;
volatile bool valid;
};

View file

@ -565,6 +565,7 @@ static bool obs_init_data(void)
if (!obs_view_init(&data->main_view))
goto fail;
data->private_data = obs_data_create();
data->valid = true;
fail:
@ -620,6 +621,7 @@ static void obs_free_data(void)
pthread_mutex_destroy(&data->draw_callbacks_mutex);
da_free(data->draw_callbacks);
da_free(data->tick_callbacks);
obs_data_release(data->private_data);
}
static const char *obs_signals[] = {
@ -2159,3 +2161,31 @@ void obs_remove_raw_video_callback(
return;
stop_raw_video(video->video, callback, param);
}
void obs_apply_private_data(obs_data_t *settings)
{
if (!obs || !settings)
return;
obs_data_apply(obs->data.private_data, settings);
}
void obs_set_private_data(obs_data_t *settings)
{
if (!obs)
return;
obs_data_clear(obs->data.private_data);
if (settings)
obs_data_apply(obs->data.private_data, settings);
}
obs_data_t *obs_get_private_data(void)
{
if (!obs)
return NULL;
obs_data_t *private_data = obs->data.private_data;
obs_data_addref(private_data);
return private_data;
}

View file

@ -682,6 +682,10 @@ EXPORT uint64_t obs_get_average_frame_time_ns(void);
EXPORT uint32_t obs_get_total_frames(void);
EXPORT uint32_t obs_get_lagged_frames(void);
EXPORT void obs_apply_private_data(obs_data_t *settings);
EXPORT void obs_set_private_data(obs_data_t *settings);
EXPORT obs_data_t *obs_get_private_data(void);
/* ------------------------------------------------------------------------- */
/* View context */