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 // 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) if (!sceneItem)
return RequestResult::Error(RequestStatus::ResourceCreationFailed, "Creation of the input or scene item failed."); 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; RequestStatus::RequestStatus statusCode;
std::string comment; 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))) if (!(sceneSource && request.ValidateString("sourceName", statusCode, comment)))
return RequestResult::Error(statusCode, comment); return RequestResult::Error(statusCode, comment);
@ -40,7 +40,7 @@ RequestResult RequestHandler::GetSceneItemId(const Request& request)
std::string sourceName = request.RequestData["sourceName"]; 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) if (!item)
return RequestResult::Error(RequestStatus::ResourceNotFound, "No scene items were found in the specified scene by that name."); 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()) if (request.RequestData.contains("sceneItemEnabled") && request.RequestData["sceneItemEnabled"].is_boolean())
sceneItemEnabled = request.RequestData["sceneItemEnabled"]; 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) if (!sceneItem)
return RequestResult::Error(RequestStatus::ResourceCreationFailed, "Failed to create the scene item."); 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() 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}; calldata_t cd = {0};
proc_handler_t *ph = obs_output_get_proc_handler(output); proc_handler_t *ph = obs_output_get_proc_handler(output);
proc_handler_call(ph, "get_last_replay", &cd); proc_handler_call(ph, "get_last_replay", &cd);
auto ret = calldata_string(&cd, "path"); auto ret = calldata_string(&cd, "path");
calldata_free(&cd); calldata_free(&cd);
obs_output_release(output);
return ret; return ret;
} }
@ -441,7 +440,7 @@ obs_sceneitem_t *Utils::Obs::SearchHelper::GetSceneItemByName(obs_scene_t *scene
return nullptr; return nullptr;
// Finds first matching scene item in scene, search starts at index 0 // 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); obs_sceneitem_addref(ret);
return ret; return ret;
@ -450,7 +449,7 @@ obs_sceneitem_t *Utils::Obs::SearchHelper::GetSceneItemByName(obs_scene_t *scene
struct CreateSceneItemData { struct CreateSceneItemData {
obs_source_t *source; obs_source_t *source;
bool sceneItemEnabled; bool sceneItemEnabled;
obs_sceneitem_t *sceneItem; OBSSceneItem sceneItem;
}; };
void CreateSceneItemHelper(void *_data, obs_scene_t *scene) 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_scene_atomic_update(scene, CreateSceneItemHelper, &data);
obs_leave_graphics(); obs_leave_graphics();
obs_sceneitem_addref(data.sceneItem);
return 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); obs_source_set_monitoring_type(input, OBS_MONITORING_TYPE_MONITOR_ONLY);
// Create a scene item for the input // 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 creation failed, remove the input
if (!ret) if (!ret)

View File

@ -67,8 +67,8 @@ namespace Utils {
} }
namespace ActionHelper { namespace ActionHelper {
obs_sceneitem_t *CreateSceneItem(obs_source_t *source, 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); 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
} }
} }
} }