Browse Source

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.
jp9000 7 years ago
parent
commit
fc37cbcca4
3 changed files with 36 additions and 0 deletions
  1. 2 0
      libobs/obs-internal.h
  2. 30 0
      libobs/obs.c
  3. 4 0
      libobs/obs.h

+ 2 - 0
libobs/obs-internal.h

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

+ 30 - 0
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;
+}

+ 4 - 0
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 */