static void scene_enum_sources(void *data, obs_source_enum_proc_t enum_callback, void *param) { struct obs_scene *scene = data; struct obs_scene_item *item; struct obs_scene_item *next; full_lock(scene); item = scene->first_item; while (item) { next = item->next; obs_sceneitem_addref(item); if (os_atomic_load_long(&item->active_refs) > 0) enum_callback(scene->source, item->source, param); obs_sceneitem_release(item); item = next; } full_unlock(scene); }
void obs_scene_enum_items(obs_scene_t scene, bool (*callback)(obs_scene_t, obs_sceneitem_t, void*), void *param) { struct obs_scene_item *item; pthread_mutex_lock(&scene->mutex); item = scene->first_item; while (item) { struct obs_scene_item *next = item->next; obs_sceneitem_addref(item); if (!callback(scene, item, param)) break; obs_sceneitem_release(item); item = next; } pthread_mutex_unlock(&scene->mutex); }