From f9c9d216439e5721942a9431b1d97d4ad33e30bf Mon Sep 17 00:00:00 2001 From: kajal Date: Mon, 1 Jun 2026 13:47:22 +0530 Subject: [PATCH] UI: Fix audio mixer preview for groups and subscenes Implement deep recursive traversal via obs_scene_enum_items to ensure audio sources nested inside groups or sub-scenes properly populate the Audio Mixer when queued on the Preview canvas --- frontend/widgets/AudioMixer.cpp | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/frontend/widgets/AudioMixer.cpp b/frontend/widgets/AudioMixer.cpp index 67906bda8bd5de..7c527ba7558d45 100644 --- a/frontend/widgets/AudioMixer.cpp +++ b/frontend/widgets/AudioMixer.cpp @@ -410,11 +410,13 @@ void AudioMixer::updatePreviewSources() return; } - if (!previewScene) { - return; - } + auto previewEnum = [](obs_scene_t *scene, obs_sceneitem_t *item, void *data) -> bool { + return (*static_cast *>(data))(scene, item); + }; + + std::function getPreviewSources = + [&](obs_scene_t * /* scene */, obs_sceneitem_t *item) -> bool { - auto getPreviewSources = [this](obs_scene_t *, obs_sceneitem_t *item) { if (!obs_sceneitem_visible(item)) { return true; } @@ -424,6 +426,22 @@ void AudioMixer::updatePreviewSources() return true; } + obs_scene_t *subScene = nullptr; + + if(obs_source_is_group(source)) { + subScene = obs_group_from_source(source); + } + else { + subScene = obs_scene_from_source(source); + } + + if(subScene) { + { + OBSSource safeSource = source; // Automatically adds a reference safely + obs_scene_enum_items(subScene, previewEnum, &getPreviewSources); + } + } + uint32_t flags = obs_source_get_output_flags(source); if ((flags & OBS_SOURCE_AUDIO) == 0) { return true; @@ -441,12 +459,6 @@ void AudioMixer::updatePreviewSources() return true; }; - using getPreviewSources_t = decltype(getPreviewSources); - - auto previewEnum = [](obs_scene_t *scene, obs_sceneitem_t *item, void *data) -> bool { - return (*static_cast(data))(scene, item); - }; - obs_scene_enum_items(previewScene, previewEnum, &getPreviewSources); } }