mirror of
https://github.com/Palakis/obs-websocket.git
synced 2024-08-30 18:12:16 +00:00
Base: Use more refcounts
Use refcounts more effectively
This commit is contained in:
parent
b91ad0f790
commit
aa0ba78e46
@ -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.");
|
||||
|
@ -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.");
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user