mirror of
https://github.com/Palakis/obs-websocket.git
synced 2024-08-30 18:12:16 +00:00
Added request SetSourceRender and util method GetSceneItemFromName
This commit is contained in:
parent
f500f0f296
commit
f944cd34f9
48
Utils.cpp
48
Utils.cpp
@ -1,17 +1,19 @@
|
||||
#include "Utils.h"
|
||||
|
||||
bool enum_scene_items(obs_scene_t *scene, obs_sceneitem_t *currentItem, void *param) {
|
||||
obs_data_array_t *data = static_cast<obs_data_array *>(param);
|
||||
obs_data_array_push_back(data, Utils::GetSceneItemData(currentItem));
|
||||
return true;
|
||||
}
|
||||
|
||||
obs_data_array_t* Utils::GetSceneItems(obs_source_t *source) {
|
||||
obs_data_array_t *items = obs_data_array_create();
|
||||
obs_scene_t *scene = obs_scene_from_source(source);
|
||||
if (scene == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
obs_scene_enum_items(scene, enum_scene_items, items);
|
||||
obs_scene_enum_items(scene, [](obs_scene_t *scene, obs_sceneitem_t *currentItem, void *param) {
|
||||
obs_data_array_t *data = static_cast<obs_data_array_t *>(param);
|
||||
obs_data_array_push_back(data, GetSceneItemData(currentItem));
|
||||
return true;
|
||||
}, items);
|
||||
|
||||
obs_scene_release(scene);
|
||||
return items;
|
||||
}
|
||||
|
||||
@ -39,6 +41,38 @@ obs_data_t* Utils::GetSceneItemData(obs_sceneitem_t *item) {
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
obs_sceneitem_t* Utils::GetSceneItemFromName(obs_source_t* source, const char* name) {
|
||||
struct current_search {
|
||||
const char* query;
|
||||
obs_sceneitem_t* result;
|
||||
};
|
||||
|
||||
current_search search;
|
||||
search.query = name;
|
||||
search.result = NULL;
|
||||
|
||||
obs_scene_t *scene = obs_scene_from_source(source);
|
||||
if (scene == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
obs_scene_enum_items(scene, [](obs_scene_t *scene, obs_sceneitem_t *currentItem, void *param) {
|
||||
current_search *search = static_cast<current_search *>(param);
|
||||
|
||||
const char* currentItemName = obs_source_get_name(obs_sceneitem_get_source(currentItem));
|
||||
if (strcmp(currentItemName, search->query) == 0) {
|
||||
search->result = currentItem;
|
||||
obs_sceneitem_addref(search->result);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}, &search);
|
||||
|
||||
return search.result;
|
||||
}
|
||||
|
||||
obs_data_array_t* Utils::GetScenes() {
|
||||
obs_frontend_source_list sceneList = {};
|
||||
obs_frontend_get_scenes(&sceneList);
|
||||
|
3
Utils.h
3
Utils.h
@ -7,8 +7,9 @@
|
||||
class Utils
|
||||
{
|
||||
public:
|
||||
static obs_data_array_t* GetSceneItems(obs_source_t* source);
|
||||
static obs_data_array_t* GetSceneItems(obs_source_t *source);
|
||||
static obs_data_t* GetSceneItemData(obs_scene_item *item);
|
||||
static obs_sceneitem_t* GetSceneItemFromName(obs_source_t *source, const char* name);
|
||||
|
||||
static obs_data_array_t* GetScenes();
|
||||
static obs_data_t* GetSceneData(obs_source *source);
|
||||
|
@ -13,7 +13,7 @@ WSRequestHandler::WSRequestHandler(QWebSocket *client) {
|
||||
messageMap["GetCurrentScene"] = WSRequestHandler::HandleGetCurrentScene;
|
||||
messageMap["GetSceneList"] = WSRequestHandler::HandleGetSceneList;
|
||||
messageMap["SetSourceOrder"] = WSRequestHandler::ErrNotImplemented;
|
||||
messageMap["SetSourceRender"] = WSRequestHandler::ErrNotImplemented;
|
||||
messageMap["SetSourceRender"] = WSRequestHandler::HandleSetSourceRender;
|
||||
messageMap["SetSceneItemPositionAndSize"] = WSRequestHandler::ErrNotImplemented;
|
||||
messageMap["GetStreamingStatus"] = WSRequestHandler::HandleGetStreamingStatus;
|
||||
messageMap["StartStopStreaming"] = WSRequestHandler::HandleStartStopStreaming;
|
||||
@ -148,6 +148,29 @@ void WSRequestHandler::HandleGetSceneList(WSRequestHandler *owner) {
|
||||
obs_data_release(data);
|
||||
}
|
||||
|
||||
void WSRequestHandler::HandleSetSourceRender(WSRequestHandler *owner) {
|
||||
const char *itemName = obs_data_get_string(owner->_requestData, "source");
|
||||
bool isVisible = obs_data_get_bool(owner->_requestData, "render");
|
||||
if (itemName == NULL) {
|
||||
owner->SendErrorResponse("invalid request parameters");
|
||||
return;
|
||||
}
|
||||
|
||||
obs_source_t* currentScene = obs_frontend_get_current_scene();
|
||||
|
||||
obs_sceneitem_t *sceneItem = Utils::GetSceneItemFromName(currentScene, itemName);
|
||||
if (sceneItem != NULL) {
|
||||
obs_sceneitem_set_visible(sceneItem, isVisible);
|
||||
obs_sceneitem_release(sceneItem);
|
||||
owner->SendOKResponse();
|
||||
}
|
||||
else {
|
||||
owner->SendErrorResponse("specified scene item doesn't exist");
|
||||
}
|
||||
|
||||
obs_source_release(currentScene);
|
||||
}
|
||||
|
||||
void WSRequestHandler::HandleGetStreamingStatus(WSRequestHandler *owner) {
|
||||
obs_data_t *data = obs_data_create();
|
||||
obs_data_set_bool(data, "streaming", obs_frontend_streaming_active());
|
||||
|
@ -30,6 +30,7 @@ class WSRequestHandler
|
||||
static void HandleSetCurrentScene(WSRequestHandler *owner);
|
||||
static void HandleGetCurrentScene(WSRequestHandler *owner);
|
||||
static void HandleGetSceneList(WSRequestHandler *owner);
|
||||
static void HandleSetSourceRender(WSRequestHandler *owner);
|
||||
static void HandleGetStreamingStatus(WSRequestHandler *owner);
|
||||
static void HandleStartStopStreaming(WSRequestHandler *owner);
|
||||
static void HandleStartStopRecording(WSRequestHandler *owner);
|
||||
|
Loading…
x
Reference in New Issue
Block a user