Add audio monitoring request items.

This commit is contained in:
tt2468 2020-05-10 20:07:57 -07:00
parent b1df0dca97
commit 88c72cd80a
3 changed files with 97 additions and 0 deletions

View File

@ -97,6 +97,8 @@ const QHash<QString, RpcMethodHandler> WSRequestHandler::messageMap {
{ "GetSourceTypesList", &WSRequestHandler::GetSourceTypesList },
{ "GetSourceSettings", &WSRequestHandler::GetSourceSettings },
{ "SetSourceSettings", &WSRequestHandler::SetSourceSettings },
{ "GetAudioMonitor", &WSRequestHandler::GetAudioMonitor },
{ "SetAudioMonitor", &WSRequestHandler::SetAudioMonitor },
{ "TakeSourceScreenshot", &WSRequestHandler::TakeSourceScreenshot },
{ "GetSourceFilters", &WSRequestHandler::GetSourceFilters },

View File

@ -112,6 +112,8 @@ class WSRequestHandler {
RpcResponse GetSourceTypesList(const RpcRequest&);
RpcResponse GetSourceSettings(const RpcRequest&);
RpcResponse SetSourceSettings(const RpcRequest&);
RpcResponse GetAudioMonitor(const RpcRequest&);
RpcResponse SetAudioMonitor(const RpcRequest&);
RpcResponse TakeSourceScreenshot(const RpcRequest&);
RpcResponse GetSourceFilters(const RpcRequest&);

View File

@ -1424,6 +1424,99 @@ RpcResponse WSRequestHandler::SetSourceFilterVisibility(const RpcRequest& reques
return request.success();
}
/**
* Get the audio monitoring type of the specified source.
*
* @param {String} `sourceName` Source name.
*
* @return {String} `monitorType` The monitor type in use. Options: `none`, `monitor_only`, `monitor_and_output`.
*
* @api requests
* @name GetAudioMonitor
* @category sources
* @since 4.8.0
*/
RpcResponse WSRequestHandler::GetAudioMonitor(const RpcRequest& request)
{
if (!request.hasField("sourceName")) {
return request.failed("missing request parameters");
}
QString sourceName = obs_data_get_string(request.parameters(), "sourceName");
if (sourceName.isEmpty()) {
return request.failed("invalid request parameters");
}
OBSSourceAutoRelease source = obs_get_source_by_name(sourceName.toUtf8());
if (!source) {
return request.failed("specified source doesn't exist");
}
OBSDataAutoRelease response = obs_data_create();
QString monitorType;
enum obs_monitoring_type mtype = obs_source_get_monitoring_type(source);
switch (mtype) {
case OBS_MONITORING_TYPE_NONE:
monitorType = "none";
break;
case OBS_MONITORING_TYPE_MONITOR_ONLY:
monitorType = "monitor_only";
break;
case OBS_MONITORING_TYPE_MONITOR_AND_OUTPUT:
monitorType = "monitor_and_output";
break;
default:
monitorType = "unknown";
break;
}
obs_data_set_string(response, "monitorType", monitorType.toUtf8());
return request.success(response);
}
/**
* Set the audio monitoring type of the specified source.
*
* @param {String} `sourceName` Source name.
* @param {String} `monitorType` The monitor type to use. Options: `none`, `monitor_only`, `monitor_and_output`.
*
* @api requests
* @name SetAudioMonitor
* @category sources
* @since 4.8.0
*/
RpcResponse WSRequestHandler::SetAudioMonitor(const RpcRequest& request)
{
if (!request.hasField("sourceName") || !request.hasField("monitorType")) {
return request.failed("missing request parameters");
}
QString sourceName = obs_data_get_string(request.parameters(), "sourceName");
QString monitorType = obs_data_get_string(request.parameters(), "monitorType");
if (sourceName.isEmpty() || monitorType.isEmpty()) {
return request.failed("invalid request parameters");
}
OBSSourceAutoRelease source = obs_get_source_by_name(sourceName.toUtf8());
if (!source) {
return request.failed("specified source doesn't exist");
}
if (monitorType == "none") {
obs_source_set_monitoring_type(source, OBS_MONITORING_TYPE_NONE);
} else if (monitorType == "monitor_only") {
obs_source_set_monitoring_type(source, OBS_MONITORING_TYPE_MONITOR_ONLY);
} else if (monitorType == "monitor_and_output") {
obs_source_set_monitoring_type(source, OBS_MONITORING_TYPE_MONITOR_AND_OUTPUT);
} else {
return request.failed("invalid monitorType");
}
return request.success();
}
/**
* Takes a picture snapshot of a source and then can either or both:
* - Send it over as a Data URI (base64-encoded data) in the response (by specifying `embedPictureFormat` in the request)