utils: Clean up a few iteration functions

This commit is contained in:
tt2468 2022-06-08 01:04:43 -07:00
parent 5b8fd096d5
commit f4b72b69ce
3 changed files with 27 additions and 18 deletions

View File

@ -27,7 +27,7 @@ struct CreateSceneItemData {
OBSSceneItem sceneItem; // Out OBSSceneItem sceneItem; // Out
}; };
void CreateSceneItemHelper(void *_data, obs_scene_t *scene) static void CreateSceneItemHelper(void *_data, obs_scene_t *scene)
{ {
auto *data = static_cast<CreateSceneItemData *>(_data); auto *data = static_cast<CreateSceneItemData *>(_data);
data->sceneItem = obs_scene_add(scene, data->source); data->sceneItem = obs_scene_add(scene, data->source);

View File

@ -60,15 +60,16 @@ std::vector<obs_hotkey_t *> Utils::Obs::ArrayHelper::GetHotkeyList()
{ {
std::vector<obs_hotkey_t *> ret; std::vector<obs_hotkey_t *> ret;
obs_enum_hotkeys( auto cb =
[](void *data, obs_hotkey_id, obs_hotkey_t *hotkey) { [](void *data, obs_hotkey_id, obs_hotkey_t *hotkey) {
auto ret = static_cast<std::vector<obs_hotkey_t *> *>(data); auto ret = static_cast<std::vector<obs_hotkey_t *> *>(data);
ret->push_back(hotkey); ret->push_back(hotkey);
return true; return true;
}, };
&ret);
obs_enum_hotkeys(cb, &ret);
return ret; return ret;
} }
@ -134,16 +135,21 @@ std::vector<json> Utils::Obs::ArrayHelper::GetSceneItemList(obs_scene_t *scene,
std::pair<std::vector<json>, bool> enumData; std::pair<std::vector<json>, bool> enumData;
enumData.second = basic; enumData.second = basic;
obs_scene_enum_items( auto cb =
scene,
[](obs_scene_t *, obs_sceneitem_t *sceneItem, void *param) { [](obs_scene_t *, obs_sceneitem_t *sceneItem, void *param) {
auto enumData = static_cast<std::pair<std::vector<json>, bool> *>(param); auto enumData = static_cast<std::pair<std::vector<json>, bool> *>(param);
// TODO: Make ObjectHelper util for scene items
json item; json item;
item["sceneItemId"] = obs_sceneitem_get_id(sceneItem); item["sceneItemId"] = obs_sceneitem_get_id(sceneItem);
// Should be slightly faster than calling obs_sceneitem_get_order_position() item["sceneItemIndex"] =
item["sceneItemIndex"] = enumData->first.size(); enumData->first.size(); // Should be slightly faster than calling obs_sceneitem_get_order_position()
if (!enumData->second) { if (!enumData->second) {
item["sceneItemEnabled"] = obs_sceneitem_visible(sceneItem);
item["sceneItemLocked"] = obs_sceneitem_locked(sceneItem);
item["sceneItemTransform"] = ObjectHelper::GetSceneItemTransform(sceneItem);
item["sceneItemBlendMode"] = obs_sceneitem_get_blending_mode(sceneItem);
OBSSource itemSource = obs_sceneitem_get_source(sceneItem); OBSSource itemSource = obs_sceneitem_get_source(sceneItem);
item["sourceName"] = obs_source_get_name(itemSource); item["sourceName"] = obs_source_get_name(itemSource);
item["sourceType"] = obs_source_get_type(itemSource); item["sourceType"] = obs_source_get_type(itemSource);
@ -160,8 +166,9 @@ std::vector<json> Utils::Obs::ArrayHelper::GetSceneItemList(obs_scene_t *scene,
enumData->first.push_back(item); enumData->first.push_back(item);
return true; return true;
}, };
&enumData);
obs_scene_enum_items(scene, cb, &enumData);
return enumData.first; return enumData.first;
} }
@ -176,7 +183,7 @@ std::vector<json> Utils::Obs::ArrayHelper::GetInputList(std::string inputKind)
EnumInputInfo inputInfo; EnumInputInfo inputInfo;
inputInfo.inputKind = inputKind; inputInfo.inputKind = inputKind;
auto inputEnumProc = [](void *param, obs_source_t *input) { auto cb = [](void *param, obs_source_t *input) {
// Sanity check in case the API changes // Sanity check in case the API changes
if (obs_source_get_type(input) != OBS_SOURCE_TYPE_INPUT) if (obs_source_get_type(input) != OBS_SOURCE_TYPE_INPUT)
return true; return true;
@ -196,8 +203,9 @@ std::vector<json> Utils::Obs::ArrayHelper::GetInputList(std::string inputKind)
inputInfo->inputs.push_back(inputJson); inputInfo->inputs.push_back(inputJson);
return true; return true;
}; };
// Actually enumerates only public inputs, despite the name // Actually enumerates only public inputs, despite the name
obs_enum_sources(inputEnumProc, &inputInfo); obs_enum_sources(cb, &inputInfo);
return inputInfo.inputs; return inputInfo.inputs;
} }
@ -302,7 +310,7 @@ std::vector<json> Utils::Obs::ArrayHelper::GetSourceFilterList(obs_source_t *sou
{ {
std::vector<json> filters; std::vector<json> filters;
auto enumFilters = [](obs_source_t *, obs_source_t *filter, void *param) { auto cb = [](obs_source_t *, obs_source_t *filter, void *param) {
auto filters = reinterpret_cast<std::vector<json> *>(param); auto filters = reinterpret_cast<std::vector<json> *>(param);
json filterJson; json filterJson;
@ -316,7 +324,8 @@ std::vector<json> Utils::Obs::ArrayHelper::GetSourceFilterList(obs_source_t *sou
filters->push_back(filterJson); filters->push_back(filterJson);
}; };
obs_source_enum_filters(source, enumFilters, &filters);
obs_source_enum_filters(source, cb, &filters);
return filters; return filters;
} }

View File

@ -70,8 +70,7 @@ obs_sceneitem_t *Utils::Obs::SearchHelper::GetSceneItemByName(obs_scene_t *scene
enumData.name = name; enumData.name = name;
enumData.offset = offset; enumData.offset = offset;
obs_scene_enum_items( auto cb =
scene,
[](obs_scene_t *, obs_sceneitem_t *sceneItem, void *param) { [](obs_scene_t *, obs_sceneitem_t *sceneItem, void *param) {
auto enumData = static_cast<SceneItemSearchData *>(param); auto enumData = static_cast<SceneItemSearchData *>(param);
@ -91,8 +90,9 @@ obs_sceneitem_t *Utils::Obs::SearchHelper::GetSceneItemByName(obs_scene_t *scene
} }
return true; return true;
}, };
&enumData);
obs_scene_enum_items(scene, cb, &enumData);
return enumData.ret; return enumData.ret;
} }