Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/requesthandler/RequestHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,8 @@ const std::unordered_map<std::string, RequestMethodHandler> RequestHandler::_han
{"SetSceneItemIndex", &RequestHandler::SetSceneItemIndex},
{"GetSceneItemBlendMode", &RequestHandler::GetSceneItemBlendMode},
{"SetSceneItemBlendMode", &RequestHandler::SetSceneItemBlendMode},
{"GetSceneItemBlendMethod", &RequestHandler::GetSceneItemBlendMethod},
{"SetSceneItemBlendMethod", &RequestHandler::SetSceneItemBlendMethod},
{"GetSceneItemPrivateSettings", &RequestHandler::GetSceneItemPrivateSettings},
{"SetSceneItemPrivateSettings", &RequestHandler::SetSceneItemPrivateSettings},

Expand Down
2 changes: 2 additions & 0 deletions src/requesthandler/RequestHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,8 @@ class RequestHandler {
RequestResult SetSceneItemIndex(const Request &);
RequestResult GetSceneItemBlendMode(const Request &);
RequestResult SetSceneItemBlendMode(const Request &);
RequestResult GetSceneItemBlendMethod(const Request &);
RequestResult SetSceneItemBlendMethod(const Request &);
RequestResult GetSceneItemPrivateSettings(const Request &);
RequestResult SetSceneItemPrivateSettings(const Request &);

Expand Down
78 changes: 78 additions & 0 deletions src/requesthandler/RequestHandler_SceneItems.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -809,6 +809,84 @@ RequestResult RequestHandler::SetSceneItemBlendMode(const Request &request)
return RequestResult::Success();
}

/**
* Gets the blend method of a scene item.
*
* Blend methods:
*
* - `OBS_BLEND_METHOD_DEFAULT`
* - `OBS_BLEND_METHOD_SRGB_OFF`
*
* Scenes and Groups
*
* @requestField ?canvasUuid | String | UUID of the canvas the scene is in, if using the sceneName field
* @requestField ?sceneName | String | Name of the scene the item is in
* @requestField ?sceneUuid | String | UUID of the scene the item is in
* @requestField sceneItemId | Number | Numeric ID of the scene item | >= 0
*
* @responseField sceneItemBlendMethod | String | Current blend method
*
* @requestType GetSceneItemBlendMethod
* @complexity 2
* @rpcVersion -1
* @initialVersion 5.8.0
* @api requests
* @category scene items
*/
RequestResult RequestHandler::GetSceneItemBlendMethod(const Request &request)
{
RequestStatus::RequestStatus statusCode;
std::string comment;
OBSSceneItemAutoRelease sceneItem =
request.AcquireSceneItem(statusCode, comment, OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP);
if (!sceneItem)
return RequestResult::Error(statusCode, comment);

auto blendMethod = obs_sceneitem_get_blending_method(sceneItem);

json responseData;
responseData["sceneItemBlendMethod"] = blendMethod;

return RequestResult::Success(responseData);
}

/**
* Sets the blend method of a scene item.
*
* Scenes and Groups
*
* @requestField ?canvasUuid | String | UUID of the canvas the scene is in, if using the sceneName field
* @requestField ?sceneName | String | Name of the scene the item is in
* @requestField ?sceneUuid | String | UUID of the scene the item is in
* @requestField sceneItemId | Number | Numeric ID of the scene item | >= 0
* @requestField sceneItemBlendMethod | String | New blend method
*
* @requestType SetSceneItemBlendMethod
* @complexity 2
* @rpcVersion -1
* @initialVersion 5.8.0
* @api requests
* @category scene items
*/
RequestResult RequestHandler::SetSceneItemBlendMethod(const Request &request)
{
RequestStatus::RequestStatus statusCode;
std::string comment;
OBSSceneItemAutoRelease sceneItem =
request.AcquireSceneItem(statusCode, comment, OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP);
if (!(sceneItem && request.ValidateString("sceneItemBlendMethod", statusCode, comment)))
return RequestResult::Error(statusCode, comment);

enum obs_blending_method blendMethod = request.RequestData["sceneItemBlendMethod"];
if (blendMethod == OBS_BLEND_METHOD_DEFAULT && request.RequestData["sceneItemBlendMethod"] != "OBS_BLEND_METHOD_DEFAULT")
return RequestResult::Error(RequestStatus::InvalidRequestField,
"The field sceneItemBlendMethod has an invalid value.");

obs_sceneitem_set_blending_method(sceneItem, blendMethod);

return RequestResult::Success();
}

// Intentionally undocumented
RequestResult RequestHandler::GetSceneItemPrivateSettings(const Request &request)
{
Expand Down
5 changes: 5 additions & 0 deletions src/utils/Json.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,11 @@ NLOHMANN_JSON_SERIALIZE_ENUM(obs_blending_type, {
{OBS_BLEND_DARKEN, "OBS_BLEND_DARKEN"},
})

NLOHMANN_JSON_SERIALIZE_ENUM(obs_blending_method, {
{OBS_BLEND_METHOD_DEFAULT, "OBS_BLEND_METHOD_DEFAULT"},
{OBS_BLEND_METHOD_SRGB_OFF, "OBS_BLEND_METHOD_SRGB_OFF"},
})

NLOHMANN_JSON_SERIALIZE_ENUM(obs_deinterlace_mode, {
{OBS_DEINTERLACE_MODE_DISABLE, "OBS_DEINTERLACE_MODE_DISABLE"},
{OBS_DEINTERLACE_MODE_DISCARD, "OBS_DEINTERLACE_MODE_DISCARD"},
Expand Down
1 change: 1 addition & 0 deletions src/utils/Obs_ArrayHelper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,7 @@ std::vector<json> Utils::Obs::ArrayHelper::GetSceneItemList(obs_scene_t *scene,
item["sceneItemLocked"] = obs_sceneitem_locked(sceneItem);
item["sceneItemTransform"] = ObjectHelper::GetSceneItemTransform(sceneItem);
item["sceneItemBlendMode"] = obs_sceneitem_get_blending_mode(sceneItem);
item["sceneItemBlendMethod"] = obs_sceneitem_get_blending_method(sceneItem);
OBSSource itemSource = obs_sceneitem_get_source(sceneItem);
item["sourceName"] = obs_source_get_name(itemSource);
item["sourceUuid"] = obs_source_get_uuid(itemSource);
Expand Down