From fc37cbcca4ba66db11624af8a7815ebc2327cb72 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Fri, 10 Aug 2018 06:01:22 -0700 Subject: [PATCH] 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. --- libobs/obs-internal.h | 2 ++ libobs/obs.c | 30 ++++++++++++++++++++++++++++++ libobs/obs.h | 4 ++++ 3 files changed, 36 insertions(+) diff --git a/libobs/obs-internal.h b/libobs/obs-internal.h index d14442620..b317fd952 100644 --- a/libobs/obs-internal.h +++ b/libobs/obs-internal.h @@ -331,6 +331,8 @@ struct obs_core_data { long long unnamed_index; + obs_data_t *private_data; + volatile bool valid; }; diff --git a/libobs/obs.c b/libobs/obs.c index 1276b83e1..acd51bbb6 100644 --- a/libobs/obs.c +++ b/libobs/obs.c @@ -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; +} diff --git a/libobs/obs.h b/libobs/obs.h index 0aed07ca3..53bdafe28 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -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 */ -- GitLab