diff --git a/src/utils/Obs.cpp b/src/utils/Obs.cpp index 3b08fd3f..0896179a 100644 --- a/src/utils/Obs.cpp +++ b/src/utils/Obs.cpp @@ -170,6 +170,46 @@ std::vector Utils::Obs::ListHelper::GetSceneList() return ret; } +std::vector Utils::Obs::ListHelper::GetSceneItemList(obs_scene_t *scene, bool basic) +{ + std::vector ret; + + if (basic) { + obs_scene_enum_items(scene, [](obs_scene_t* scene, obs_sceneitem_t* sceneItem, void* param) { + auto ret = reinterpret_cast*>(param); + + json item; + item["sceneItemId"] = obs_sceneitem_get_id(sceneItem); + // Should be slightly faster than calling obs_sceneitem_get_order_position() + item["sceneItemIndex"] = ret->size(); + + ret->push_back(item); + + return true; + }, &ret); + } else { + obs_scene_enum_items(scene, [](obs_scene_t* scene, obs_sceneitem_t* sceneItem, void* param) { + auto ret = reinterpret_cast*>(param); + + OBSSource itemSource = obs_sceneitem_get_source(sceneItem); + + json item; + item["sceneItemId"] = obs_sceneitem_get_id(sceneItem); + item["sceneItemIndex"] = ret->size(); + item["sourceName"] = obs_source_get_name(itemSource); + item["sourceType"] = StringHelper::GetSourceTypeString(itemSource); + if (obs_source_get_type(itemSource) == OBS_SOURCE_TYPE_INPUT) + item["inputKind"] = obs_source_get_id(itemSource); + + ret->push_back(item); + + return true; + }, &ret); + } + + return ret; +} + std::vector Utils::Obs::ListHelper::GetTransitionList() { obs_frontend_source_list transitionList = {}; diff --git a/src/utils/Utils.h b/src/utils/Utils.h index 78b22393..43e29d33 100644 --- a/src/utils/Utils.h +++ b/src/utils/Utils.h @@ -44,6 +44,7 @@ namespace Utils { std::vector GetHotkeyList(); std::vector GetHotkeyNameList(); std::vector GetSceneList(); + std::vector GetSceneItemList(obs_scene_t *scene, bool basic = false); std::vector GetTransitionList(); }