diff --git a/libobs/obs.c b/libobs/obs.c index 9c486511d..ff9e08b28 100644 --- a/libobs/obs.c +++ b/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) { diff --git a/libobs/obs.h b/libobs/obs.h index 8bce67594..14db15976 100644 --- a/libobs/obs.h +++ b/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);