Base: Use more refcounts

Use refcounts more effectively
This commit is contained in:
tt2468 2021-09-25 17:52:08 -07:00
parent b91ad0f790
commit aa0ba78e46
4 changed files with 12 additions and 11 deletions

View File

@ -73,7 +73,7 @@ RequestResult RequestHandler::CreateInput(const Request& request)
}
// Create the input and add it as a scene item to the destination scene
obs_sceneitem_t *sceneItem = Utils::Obs::ActionHelper::CreateInput(inputName, inputKind, inputSettings, scene, sceneItemEnabled);
OBSSceneItemAutoRelease sceneItem = Utils::Obs::ActionHelper::CreateInput(inputName, inputKind, inputSettings, scene, sceneItemEnabled);
if (!sceneItem)
return RequestResult::Error(RequestStatus::ResourceCreationFailed, "Creation of the input or scene item failed.");

View File

@ -32,7 +32,7 @@ RequestResult RequestHandler::GetSceneItemId(const Request& request)
{
RequestStatus::RequestStatus statusCode;
std::string comment;
OBSSourceAutoRelease sceneSource = request.ValidateScene("sceneName", statusCode, comment);
OBSSourceAutoRelease sceneSource = request.ValidateScene("sceneName", statusCode, comment, OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP);
if (!(sceneSource && request.ValidateString("sourceName", statusCode, comment)))
return RequestResult::Error(statusCode, comment);
@ -40,7 +40,7 @@ RequestResult RequestHandler::GetSceneItemId(const Request& request)
std::string sourceName = request.RequestData["sourceName"];
obs_sceneitem_t *item = Utils::Obs::SearchHelper::GetSceneItemByName(scene, sourceName);
OBSSceneItemAutoRelease item = Utils::Obs::SearchHelper::GetSceneItemByName(scene, sourceName);
if (!item)
return RequestResult::Error(RequestStatus::ResourceNotFound, "No scene items were found in the specified scene by that name.");
@ -71,7 +71,7 @@ RequestResult RequestHandler::CreateSceneItem(const Request& request)
if (request.RequestData.contains("sceneItemEnabled") && request.RequestData["sceneItemEnabled"].is_boolean())
sceneItemEnabled = request.RequestData["sceneItemEnabled"];
obs_sceneitem_t *sceneItem = Utils::Obs::ActionHelper::CreateSceneItem(source, scene, sceneItemEnabled);
OBSSceneItemAutoRelease sceneItem = Utils::Obs::ActionHelper::CreateSceneItem(source, scene, sceneItemEnabled);
if (!sceneItem)
return RequestResult::Error(RequestStatus::ResourceCreationFailed, "Failed to create the scene item.");

View File

@ -109,13 +109,12 @@ std::string Utils::Obs::StringHelper::GetMediaInputStateString(obs_source_t *inp
std::string Utils::Obs::StringHelper::GetLastReplayBufferFilePath()
{
obs_output_t *output = obs_frontend_get_replay_buffer_output();
OBSOutputAutoRelease output = obs_frontend_get_replay_buffer_output();
calldata_t cd = {0};
proc_handler_t *ph = obs_output_get_proc_handler(output);
proc_handler_call(ph, "get_last_replay", &cd);
auto ret = calldata_string(&cd, "path");
calldata_free(&cd);
obs_output_release(output);
return ret;
}
@ -441,7 +440,7 @@ obs_sceneitem_t *Utils::Obs::SearchHelper::GetSceneItemByName(obs_scene_t *scene
return nullptr;
// Finds first matching scene item in scene, search starts at index 0
obs_sceneitem_t *ret = obs_scene_find_source(scene, name.c_str());
OBSSceneItem ret = obs_scene_find_source(scene, name.c_str());
obs_sceneitem_addref(ret);
return ret;
@ -450,7 +449,7 @@ obs_sceneitem_t *Utils::Obs::SearchHelper::GetSceneItemByName(obs_scene_t *scene
struct CreateSceneItemData {
obs_source_t *source;
bool sceneItemEnabled;
obs_sceneitem_t *sceneItem;
OBSSceneItem sceneItem;
};
void CreateSceneItemHelper(void *_data, obs_scene_t *scene)
@ -476,6 +475,8 @@ obs_sceneitem_t *Utils::Obs::ActionHelper::CreateSceneItem(obs_source_t *source,
obs_scene_atomic_update(scene, CreateSceneItemHelper, &data);
obs_leave_graphics();
obs_sceneitem_addref(data.sceneItem);
return data.sceneItem;
}
@ -494,7 +495,7 @@ obs_sceneitem_t *Utils::Obs::ActionHelper::CreateInput(std::string inputName, st
obs_source_set_monitoring_type(input, OBS_MONITORING_TYPE_MONITOR_ONLY);
// Create a scene item for the input
auto ret = CreateSceneItem(input, scene, sceneItemEnabled);
obs_sceneitem_t *ret = CreateSceneItem(input, scene, sceneItemEnabled);
// If creation failed, remove the input
if (!ret)

View File

@ -67,8 +67,8 @@ namespace Utils {
}
namespace ActionHelper {
obs_sceneitem_t *CreateSceneItem(obs_source_t *source, obs_scene_t *scene, bool sceneItemEnabled = true);
obs_sceneitem_t *CreateInput(std::string inputName, std::string inputKind, obs_data_t *inputSettings, obs_scene_t *scene, bool sceneItemEnabled = true);
obs_sceneitem_t *CreateSceneItem(obs_source_t *source, obs_scene_t *scene, bool sceneItemEnabled = true); // Increments ref. Use OBSSceneItemAutoRelease
obs_sceneitem_t *CreateInput(std::string inputName, std::string inputKind, obs_data_t *inputSettings, obs_scene_t *scene, bool sceneItemEnabled = true); // Increments ref. Use OBSSceneItemAutoRelease
}
}
}