浏览代码

libobs: Add obs_enum_scenes for enumerating scenes

Closes obsproject/obs-studio#1507
Michael Fabian 'Xaymar' Dirks 7 年之前
父节点
当前提交
e55579e63d
共有 2 个文件被更改,包括 29 次插入0 次删除
  1. 25 0
      libobs/obs.c
  2. 4 0
      libobs/obs.h

+ 25 - 0
libobs/obs.c

@@ -1360,6 +1360,31 @@ void obs_enum_sources(bool (*enum_proc)(void*, obs_source_t*), void *param)
 	pthread_mutex_unlock(&obs->data.sources_mutex);
 }
 
+void obs_enum_scenes(bool (*enum_proc)(void*, obs_source_t*), void *param)
+{
+	obs_source_t *source;
+
+	if (!obs) return;
+
+	pthread_mutex_lock(&obs->data.sources_mutex);
+	source = obs->data.first_source;
+
+	while (source) {
+		obs_source_t *next_source =
+			(obs_source_t*)source->context.next;
+
+		if (source->info.type == OBS_SOURCE_TYPE_SCENE &&
+		    !source->context.private &&
+		    !enum_proc(param, source)) {
+			break;
+		}
+
+		source = next_source;
+	}
+
+	pthread_mutex_unlock(&obs->data.sources_mutex);
+}
+
 static inline void obs_enum(void *pstart, pthread_mutex_t *mutex, void *proc,
 		void *param)
 {

+ 4 - 0
libobs/obs.h

@@ -556,6 +556,10 @@ EXPORT obs_source_t *obs_get_output_source(uint32_t channel);
 EXPORT void obs_enum_sources(bool (*enum_proc)(void*, obs_source_t*),
 		void *param);
 
+/** Enumerates scenes */
+EXPORT void obs_enum_scenes(bool (*enum_proc)(void*, obs_source_t*),
+	void *param);
+
 /** Enumerates outputs */
 EXPORT void obs_enum_outputs(bool (*enum_proc)(void*, obs_output_t*),
 		void *param);