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:
@ -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.");
|
||||||
|
@ -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.");
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user