From 53a8a326dad114917a407f4672d9ff96d1b05885 Mon Sep 17 00:00:00 2001 From: tt2468 Date: Thu, 13 May 2021 23:56:54 -0700 Subject: [PATCH] libobs: Add `obs_enum_all_sources()` There is currently no way to enumerate *all* sources in OBS. Only inputs and scenes have a way to be enumerated. Some applications like obs-websocket have features that need to take advantage of enumerating all sources in order to function properly. --- libobs/obs.c | 7 +++++++ libobs/obs.h | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/libobs/obs.c b/libobs/obs.c index b1c558394..4eb9072ac 100644 --- a/libobs/obs.c +++ b/libobs/obs.c @@ -1526,6 +1526,13 @@ static inline void obs_enum(void *pstart, pthread_mutex_t *mutex, void *proc, pthread_mutex_unlock(mutex); } +void obs_enum_all_sources(bool (*enum_proc)(void *, obs_source_t *), + void *param) +{ + obs_enum(&obs->data.first_source, &obs->data.sources_mutex, enum_proc, + param); +} + void obs_enum_outputs(bool (*enum_proc)(void *, obs_output_t *), void *param) { obs_enum(&obs->data.first_output, &obs->data.outputs_mutex, enum_proc, diff --git a/libobs/obs.h b/libobs/obs.h index a2a7251d7..f74a2f596 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -612,6 +612,10 @@ EXPORT void obs_enum_sources(bool (*enum_proc)(void *, obs_source_t *), EXPORT void obs_enum_scenes(bool (*enum_proc)(void *, obs_source_t *), void *param); +/** Enumerates all sources (regardless of type) */ +EXPORT void obs_enum_all_sources(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);