mirror of
https://github.com/Palakis/obs-websocket.git
synced 2024-08-30 18:12:16 +00:00
Utils: use obs_scene_t* directly for scene-related helpers
This commit is contained in:
parent
9723147429
commit
cee0cbebc2
@ -173,7 +173,11 @@ obs_data_t* Utils::GetSceneItemData(obs_sceneitem_t* item) {
|
||||
return data;
|
||||
}
|
||||
|
||||
obs_sceneitem_t* Utils::GetSceneItemFromItem(obs_source_t* scene, obs_data_t* itemInfo) {
|
||||
obs_sceneitem_t* Utils::GetSceneItemFromItem(obs_scene_t* scene, obs_data_t* itemInfo) {
|
||||
if (!scene) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
obs_data_item_t* idInfoItem = obs_data_item_byname(itemInfo, "id"); // TODO fix memory leak
|
||||
int id = obs_data_item_get_int(idInfoItem);
|
||||
|
||||
@ -181,7 +185,7 @@ obs_sceneitem_t* Utils::GetSceneItemFromItem(obs_source_t* scene, obs_data_t* it
|
||||
const char* name = obs_data_item_get_string(nameInfoItem);
|
||||
|
||||
if (idInfoItem) {
|
||||
obs_sceneitem_t* sceneItem = obs_scene_find_sceneitem_by_id(obs_scene_from_source(scene), id);
|
||||
obs_sceneitem_t* sceneItem = obs_scene_find_sceneitem_by_id(scene, id);
|
||||
obs_source_t* sceneItemSource = obs_sceneitem_get_source(sceneItem);
|
||||
|
||||
QString sceneItemName = obs_source_get_name(sceneItemSource);
|
||||
@ -197,7 +201,11 @@ obs_sceneitem_t* Utils::GetSceneItemFromItem(obs_source_t* scene, obs_data_t* it
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
obs_sceneitem_t* Utils::GetSceneItemFromName(obs_source_t* source, QString name) {
|
||||
obs_sceneitem_t* Utils::GetSceneItemFromName(obs_scene_t* scene, QString name) {
|
||||
if (!scene) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
struct current_search {
|
||||
QString query;
|
||||
obs_sceneitem_t* result;
|
||||
@ -209,10 +217,6 @@ obs_sceneitem_t* Utils::GetSceneItemFromName(obs_source_t* source, QString name)
|
||||
search.result = nullptr;
|
||||
search.enumCallback = nullptr;
|
||||
|
||||
OBSScene scene = obs_scene_from_source(source);
|
||||
if (!scene)
|
||||
return nullptr;
|
||||
|
||||
search.enumCallback = [](
|
||||
obs_scene_t* scene,
|
||||
obs_sceneitem_t* currentItem,
|
||||
@ -282,17 +286,19 @@ obs_source_t* Utils::GetTransitionFromName(QString searchName) {
|
||||
return foundTransition;
|
||||
}
|
||||
|
||||
obs_source_t* Utils::GetSceneFromNameOrCurrent(QString sceneName) {
|
||||
obs_scene_t* Utils::GetSceneFromNameOrCurrent(QString sceneName) {
|
||||
// Both obs_frontend_get_current_scene() and obs_get_source_by_name()
|
||||
// do addref on the return source, so no need to use an OBSSource helper
|
||||
obs_source_t* scene = nullptr;
|
||||
// increase the returned source's refcount
|
||||
OBSSourceAutoRelease sceneSource = nullptr;
|
||||
|
||||
if (sceneName.isEmpty() || sceneName.isNull())
|
||||
scene = obs_frontend_get_current_scene();
|
||||
else
|
||||
scene = obs_get_source_by_name(sceneName.toUtf8());
|
||||
if (sceneName.isEmpty() || sceneName.isNull()) {
|
||||
sceneSource = obs_frontend_get_current_scene();
|
||||
}
|
||||
else {
|
||||
sceneSource = obs_get_source_by_name(sceneName.toUtf8());
|
||||
}
|
||||
|
||||
return scene;
|
||||
return obs_scene_from_source(sceneSource);
|
||||
}
|
||||
|
||||
obs_data_array_t* Utils::GetScenes() {
|
||||
|
14
src/Utils.h
14
src/Utils.h
@ -36,11 +36,10 @@ class Utils {
|
||||
static obs_data_array_t* StringListToArray(char** strings, const char* key);
|
||||
static obs_data_array_t* GetSceneItems(obs_source_t* source);
|
||||
static obs_data_t* GetSceneItemData(obs_sceneitem_t* item);
|
||||
static obs_sceneitem_t* GetSceneItemFromName(
|
||||
obs_source_t* source, QString name);
|
||||
static obs_sceneitem_t* GetSceneItemFromItem(obs_source_t* scene, obs_data_t* item);
|
||||
static obs_source_t* GetTransitionFromName(QString transitionName);
|
||||
static obs_source_t* GetSceneFromNameOrCurrent(QString sceneName);
|
||||
|
||||
static obs_sceneitem_t* GetSceneItemFromName(obs_scene_t* scene, QString name);
|
||||
static obs_sceneitem_t* GetSceneItemFromItem(obs_scene_t* scene, obs_data_t* item);
|
||||
static obs_scene_t* GetSceneFromNameOrCurrent(QString sceneName);
|
||||
static obs_data_t* GetSceneItemPropertiesData(obs_sceneitem_t* item);
|
||||
|
||||
static obs_data_array_t* GetSourceFiltersList(obs_source_t* source, bool includeSettings);
|
||||
@ -52,9 +51,8 @@ class Utils {
|
||||
|
||||
// TODO contribute a proper frontend API method for this to OBS and remove this hack
|
||||
static QSpinBox* GetTransitionDurationControl();
|
||||
|
||||
static int GetTransitionDuration(obs_source_t* transition);
|
||||
|
||||
static obs_source_t* GetTransitionFromName(QString transitionName);
|
||||
static bool SetTransitionByName(QString transitionName);
|
||||
|
||||
static QString OBSVersionString();
|
||||
@ -70,9 +68,11 @@ class Utils {
|
||||
|
||||
static QString ParseDataToQueryString(obs_data_t* data);
|
||||
static obs_hotkey_t* FindHotkeyByName(QString name);
|
||||
|
||||
static bool ReplayBufferEnabled();
|
||||
static void StartReplayBuffer();
|
||||
static bool IsRPHotkeySet();
|
||||
|
||||
static const char* GetFilenameFormatting();
|
||||
static bool SetFilenameFormatting(const char* filenameFormatting);
|
||||
};
|
||||
|
@ -49,13 +49,12 @@ HandlerResponse WSRequestHandler::HandleGetSceneItemProperties(WSRequestHandler*
|
||||
}
|
||||
|
||||
QString sceneName = obs_data_get_string(req->data, "scene-name");
|
||||
OBSSourceAutoRelease scene = Utils::GetSceneFromNameOrCurrent(sceneName);
|
||||
OBSScene scene = Utils::GetSceneFromNameOrCurrent(sceneName);
|
||||
if (!scene) {
|
||||
return req->SendErrorResponse("requested scene doesn't exist");
|
||||
}
|
||||
|
||||
OBSSceneItemAutoRelease sceneItem =
|
||||
Utils::GetSceneItemFromName(scene, itemName);
|
||||
OBSSceneItemAutoRelease sceneItem = Utils::GetSceneItemFromName(scene, itemName);
|
||||
if (!sceneItem) {
|
||||
return req->SendErrorResponse("specified scene item doesn't exist");
|
||||
}
|
||||
@ -105,7 +104,7 @@ HandlerResponse WSRequestHandler::HandleSetSceneItemProperties(WSRequestHandler*
|
||||
}
|
||||
|
||||
QString sceneName = obs_data_get_string(req->data, "scene-name");
|
||||
OBSSourceAutoRelease scene = Utils::GetSceneFromNameOrCurrent(sceneName);
|
||||
OBSScene scene = Utils::GetSceneFromNameOrCurrent(sceneName);
|
||||
if (!scene) {
|
||||
return req->SendErrorResponse("requested scene doesn't exist");
|
||||
}
|
||||
@ -283,7 +282,7 @@ HandlerResponse WSRequestHandler::HandleResetSceneItem(WSRequestHandler* req) {
|
||||
}
|
||||
|
||||
const char* sceneName = obs_data_get_string(req->data, "scene-name");
|
||||
OBSSourceAutoRelease scene = Utils::GetSceneFromNameOrCurrent(sceneName);
|
||||
OBSScene scene = Utils::GetSceneFromNameOrCurrent(sceneName);
|
||||
if (!scene) {
|
||||
return req->SendErrorResponse("requested scene doesn't exist");
|
||||
}
|
||||
@ -329,7 +328,7 @@ HandlerResponse WSRequestHandler::HandleSetSceneItemRender(WSRequestHandler* req
|
||||
}
|
||||
|
||||
const char* sceneName = obs_data_get_string(req->data, "scene-name");
|
||||
OBSSourceAutoRelease scene = Utils::GetSceneFromNameOrCurrent(sceneName);
|
||||
OBSScene scene = Utils::GetSceneFromNameOrCurrent(sceneName);
|
||||
if (!scene) {
|
||||
return req->SendErrorResponse("requested scene doesn't exist");
|
||||
}
|
||||
@ -371,7 +370,7 @@ HandlerResponse WSRequestHandler::HandleSetSceneItemPosition(WSRequestHandler* r
|
||||
}
|
||||
|
||||
QString sceneName = obs_data_get_string(req->data, "scene-name");
|
||||
OBSSourceAutoRelease scene = Utils::GetSceneFromNameOrCurrent(sceneName);
|
||||
OBSScene scene = Utils::GetSceneFromNameOrCurrent(sceneName);
|
||||
if (!scene) {
|
||||
return req->SendErrorResponse("requested scene could not be found");
|
||||
}
|
||||
@ -419,7 +418,7 @@ HandlerResponse WSRequestHandler::HandleSetSceneItemTransform(WSRequestHandler*
|
||||
}
|
||||
|
||||
QString sceneName = obs_data_get_string(req->data, "scene-name");
|
||||
OBSSourceAutoRelease scene = Utils::GetSceneFromNameOrCurrent(sceneName);
|
||||
OBSScene scene = Utils::GetSceneFromNameOrCurrent(sceneName);
|
||||
if (!scene) {
|
||||
return req->SendErrorResponse("requested scene doesn't exist");
|
||||
}
|
||||
@ -471,7 +470,7 @@ HandlerResponse WSRequestHandler::HandleSetSceneItemCrop(WSRequestHandler* req)
|
||||
}
|
||||
|
||||
QString sceneName = obs_data_get_string(req->data, "scene-name");
|
||||
OBSSourceAutoRelease scene = Utils::GetSceneFromNameOrCurrent(sceneName);
|
||||
OBSScene scene = Utils::GetSceneFromNameOrCurrent(sceneName);
|
||||
if (!scene) {
|
||||
return req->SendErrorResponse("requested scene doesn't exist");
|
||||
}
|
||||
@ -511,7 +510,7 @@ HandlerResponse WSRequestHandler::HandleDeleteSceneItem(WSRequestHandler* req) {
|
||||
}
|
||||
|
||||
const char* sceneName = obs_data_get_string(req->data, "scene");
|
||||
OBSSourceAutoRelease scene = Utils::GetSceneFromNameOrCurrent(sceneName);
|
||||
OBSScene scene = Utils::GetSceneFromNameOrCurrent(sceneName);
|
||||
if (!scene) {
|
||||
return req->SendErrorResponse("requested scene doesn't exist");
|
||||
}
|
||||
@ -564,13 +563,13 @@ HandlerResponse WSRequestHandler::HandleDuplicateSceneItem(WSRequestHandler* req
|
||||
}
|
||||
|
||||
const char* fromSceneName = obs_data_get_string(req->data, "fromScene");
|
||||
OBSSourceAutoRelease fromScene = Utils::GetSceneFromNameOrCurrent(fromSceneName);
|
||||
OBSScene fromScene = Utils::GetSceneFromNameOrCurrent(fromSceneName);
|
||||
if (!fromScene) {
|
||||
return req->SendErrorResponse("requested fromScene doesn't exist");
|
||||
}
|
||||
|
||||
const char* toSceneName = obs_data_get_string(req->data, "toScene");
|
||||
OBSSourceAutoRelease toScene = Utils::GetSceneFromNameOrCurrent(toSceneName);
|
||||
OBSScene toScene = Utils::GetSceneFromNameOrCurrent(toSceneName);
|
||||
if (!toScene) {
|
||||
return req->SendErrorResponse("requested toScene doesn't exist");
|
||||
}
|
||||
@ -586,7 +585,7 @@ HandlerResponse WSRequestHandler::HandleDuplicateSceneItem(WSRequestHandler* req
|
||||
data.referenceItem = referenceItem;
|
||||
|
||||
obs_enter_graphics();
|
||||
obs_scene_atomic_update(obs_scene_from_source(toScene), DuplicateSceneItem, &data);
|
||||
obs_scene_atomic_update(toScene, DuplicateSceneItem, &data);
|
||||
obs_leave_graphics();
|
||||
|
||||
obs_sceneitem_t *newItem = data.newItem;
|
||||
@ -600,7 +599,7 @@ HandlerResponse WSRequestHandler::HandleDuplicateSceneItem(WSRequestHandler* req
|
||||
|
||||
OBSDataAutoRelease responseData = obs_data_create();
|
||||
obs_data_set_obj(responseData, "item", itemData);
|
||||
obs_data_set_string(responseData, "scene", obs_source_get_name(toScene));
|
||||
obs_data_set_string(responseData, "scene", obs_source_get_name(obs_scene_get_source(toScene)));
|
||||
|
||||
return req->SendOKResponse(responseData);
|
||||
}
|
||||
|
@ -94,8 +94,8 @@ HandlerResponse WSRequestHandler::HandleGetSceneList(WSRequestHandler* req) {
|
||||
*/
|
||||
HandlerResponse WSRequestHandler::HandleReorderSceneItems(WSRequestHandler* req) {
|
||||
QString sceneName = obs_data_get_string(req->data, "scene");
|
||||
OBSSourceAutoRelease sceneSource = Utils::GetSceneFromNameOrCurrent(sceneName);
|
||||
if (!sceneSource) {
|
||||
OBSScene scene = Utils::GetSceneFromNameOrCurrent(sceneName);
|
||||
if (!scene) {
|
||||
return req->SendErrorResponse("requested scene doesn't exist");
|
||||
}
|
||||
|
||||
@ -104,8 +104,6 @@ HandlerResponse WSRequestHandler::HandleReorderSceneItems(WSRequestHandler* req)
|
||||
return req->SendErrorResponse("sceneItem order not specified");
|
||||
}
|
||||
|
||||
OBSScene scene = obs_scene_from_source(sceneSource);
|
||||
|
||||
QVector<struct obs_sceneitem_order_info> orderList;
|
||||
struct obs_sceneitem_order_info info;
|
||||
|
||||
@ -113,7 +111,7 @@ HandlerResponse WSRequestHandler::HandleReorderSceneItems(WSRequestHandler* req)
|
||||
for (int i = 0; i < itemCount; i++) {
|
||||
OBSDataAutoRelease item = obs_data_array_item(items, i);
|
||||
|
||||
OBSSceneItemAutoRelease sceneItem = Utils::GetSceneItemFromItem(sceneSource, item);
|
||||
OBSSceneItemAutoRelease sceneItem = Utils::GetSceneItemFromItem(scene, item);
|
||||
if (!sceneItem) {
|
||||
return req->SendErrorResponse("Invalid sceneItem id or name specified");
|
||||
}
|
||||
|
@ -69,12 +69,12 @@ HandlerResponse WSRequestHandler::HandleSetPreviewScene(WSRequestHandler* req) {
|
||||
}
|
||||
|
||||
const char* scene_name = obs_data_get_string(req->data, "scene-name");
|
||||
OBSSourceAutoRelease scene = Utils::GetSceneFromNameOrCurrent(scene_name);
|
||||
OBSScene scene = Utils::GetSceneFromNameOrCurrent(scene_name);
|
||||
if (!scene) {
|
||||
return req->SendErrorResponse("specified scene doesn't exist");
|
||||
}
|
||||
|
||||
obs_frontend_set_current_preview_scene(scene);
|
||||
obs_frontend_set_current_preview_scene(obs_scene_get_source(scene));
|
||||
return req->SendOKResponse();
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user