Parcourir la source

libobs: Add obs_scene_atomic_update

Palana il y a 10 ans
Parent
commit
ef9090e0a3
2 fichiers modifiés avec 17 ajouts et 0 suppressions
  1. 13 0
      libobs/obs-scene.c
  2. 4 0
      libobs/obs.h

+ 13 - 0
libobs/obs-scene.c

@@ -1034,3 +1034,16 @@ void obs_sceneitem_set_visible(obs_sceneitem_t *item, bool visible)
 
 	calldata_free(&cd);
 }
+
+void obs_scene_atomic_update(obs_scene_t *scene,
+		obs_scene_atomic_update_func func, void *data)
+{
+	if (!scene)
+		return;
+
+	obs_scene_addref(scene);
+	pthread_mutex_lock(&scene->mutex);
+	func(data, scene);
+	pthread_mutex_unlock(&scene->mutex);
+	obs_scene_release(scene);
+}

+ 4 - 0
libobs/obs.h

@@ -1035,6 +1035,10 @@ EXPORT void obs_scene_enum_items(obs_scene_t *scene,
 /** Adds/creates a new scene item for a source */
 EXPORT obs_sceneitem_t *obs_scene_add(obs_scene_t *scene, obs_source_t *source);
 
+typedef void (*obs_scene_atomic_update_func)(void *, obs_scene_t *scene);
+EXPORT void obs_scene_atomic_update(obs_scene_t *scene,
+		obs_scene_atomic_update_func func, void *data);
+
 EXPORT void obs_sceneitem_addref(obs_sceneitem_t *item);
 EXPORT void obs_sceneitem_release(obs_sceneitem_t *item);