Skip to content

Commit c0e4a37

Browse files
authored
Merge branch 'staging' into fix-enhancing-broadcasting-for-high-resolution
2 parents 3f20d8a + fd99aec commit c0e4a37

File tree

6 files changed

+77
-2
lines changed

6 files changed

+77
-2
lines changed

.github/workflows/main.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ env:
2424
SLGenerator: Visual Studio 17 2022
2525
SLDistributeDirectory: distribute
2626
SLFullDistributePath: "streamlabs-build.app/distribute" # The .app extension is required to run macOS tests correctly.
27-
LibOBSVersion: 30.2.4sl55test2
27+
LibOBSVersion: 30.2.4sl56
2828
PACKAGE_NAME: osn
2929

3030
jobs:

obs-studio-client/source/nodeobs_settings.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,21 @@ void settings::OBS_settings_saveSettings(const Napi::CallbackInfo &info)
406406
return;
407407
}
408408

409+
Napi::Value settings::OBS_settings_isValidEncoder(const Napi::CallbackInfo &info)
410+
{
411+
std::string category = info[0].ToString().Utf8Value();
412+
auto conn = GetConnection(info);
413+
if (!conn)
414+
return info.Env().Undefined();
415+
416+
std::vector<ipc::value> response = conn->call_synchronous_helper("Settings", "OBS_settings_isValidEncoder", {ipc::value(category)});
417+
418+
if (!ValidateResponse(info, response))
419+
return info.Env().Undefined();
420+
421+
return Napi::Boolean::New(info.Env(), response[1].value_union.ui32);
422+
}
423+
409424
std::vector<std::string> settings::getListCategories(void)
410425
{
411426
std::vector<std::string> categories;
@@ -525,6 +540,7 @@ void settings::Init(Napi::Env env, Napi::Object exports)
525540
{
526541
exports.Set(Napi::String::New(env, "OBS_settings_getSettings"), Napi::Function::New(env, settings::OBS_settings_getSettings));
527542
exports.Set(Napi::String::New(env, "OBS_settings_saveSettings"), Napi::Function::New(env, settings::OBS_settings_saveSettings));
543+
exports.Set(Napi::String::New(env, "OBS_settings_isValidEncoder"), Napi::Function::New(env, settings::OBS_settings_isValidEncoder));
528544
exports.Set(Napi::String::New(env, "OBS_settings_getListCategories"), Napi::Function::New(env, settings::OBS_settings_getListCategories));
529545
exports.Set(Napi::String::New(env, "OBS_settings_getInputAudioDevices"), Napi::Function::New(env, settings::OBS_settings_getInputAudioDevices));
530546
exports.Set(Napi::String::New(env, "OBS_settings_getOutputAudioDevices"), Napi::Function::New(env, settings::OBS_settings_getOutputAudioDevices));

obs-studio-client/source/nodeobs_settings.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,8 @@ void Init(Napi::Env env, Napi::Object exports);
133133

134134
Napi::Value OBS_settings_getSettings(const Napi::CallbackInfo &info);
135135
void OBS_settings_saveSettings(const Napi::CallbackInfo &info);
136+
Napi::Value OBS_settings_isValidEncoder(const Napi::CallbackInfo &info);
137+
136138
Napi::Value OBS_settings_getListCategories(const Napi::CallbackInfo &info);
137139

138140
Napi::Value OBS_settings_getInputAudioDevices(const Napi::CallbackInfo &info);

obs-studio-server/source/nodeobs_service.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1565,7 +1565,7 @@ const char *get_simple_output_encoder(const char *encoder)
15651565
return ADVANCED_ENCODER_AMD_HEVC;
15661566
} else if (strcmp(encoder, SIMPLE_ENCODER_AMD_AV1) == 0) {
15671567
return "av1_texture_amf";
1568-
} else if (strcmp(encoder, SIMPLE_ENCODER_NVENC) == 0) {
1568+
} else if ((strcmp(encoder, SIMPLE_ENCODER_NVENC) == 0) || (strcmp(encoder, ENCODER_NVENC_H264_TEX) == 0)) {
15691569
return EncoderAvailable(ENCODER_NVENC_H264_TEX) ? ENCODER_NVENC_H264_TEX : ADVANCED_ENCODER_NVENC;
15701570
} else if (strcmp(encoder, SIMPLE_ENCODER_NVENC_HEVC) == 0) {
15711571
return EncoderAvailable(ENCODER_NVENC_HEVC_TEX) ? ENCODER_NVENC_HEVC_TEX : "ffmpeg_hevc_nvenc";

obs-studio-server/source/nodeobs_settings.cpp

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ void OBS_settings::Register(ipc::server &srv)
7272
cls->register_function(std::make_shared<ipc::function>(
7373
"OBS_settings_saveSettings", std::vector<ipc::type>{ipc::type::String, ipc::type::UInt32, ipc::type::UInt32, ipc::type::Binary},
7474
OBS_settings_saveSettings));
75+
cls->register_function(std::make_shared<ipc::function>("OBS_settings_isValidEncoder", std::vector<ipc::type>{}, OBS_settings_isValidEncoder));
7576
cls->register_function(
7677
std::make_shared<ipc::function>("OBS_settings_getInputAudioDevices", std::vector<ipc::type>{}, OBS_settings_getInputAudioDevices));
7778
cls->register_function(
@@ -1196,6 +1197,60 @@ static void converOldJimNvencEncoder(config_t *config, const std::string &config
11961197
}
11971198
}
11981199

1200+
static bool validateEncoderForService(StreamServiceId serviceId, const char *encoderToFind)
1201+
{
1202+
bool validEncoder = false;
1203+
1204+
//have encoder - find in encoders_set, validate 'streaming' flag and check availability based on 'check_availability_streaming' flag
1205+
for (int i = 0; i < encoders_set.size(); i++) {
1206+
if (std::string(encoderToFind) == encoders_set[i].simple_name || std::string(encoderToFind) == encoders_set[i].advanced_name) {
1207+
if (encoders_set[i].streaming) {
1208+
if (encoders_set[i].check_availability_streaming) {
1209+
if (isEncoderAvailableForStreaming(encoderToFind, OBS_service::getService(serviceId))) {
1210+
validEncoder = true;
1211+
break;
1212+
}
1213+
} else {
1214+
validEncoder = true;
1215+
}
1216+
}
1217+
break;
1218+
}
1219+
}
1220+
1221+
return validEncoder;
1222+
}
1223+
1224+
void OBS_settings::OBS_settings_isValidEncoder(void *data, const int64_t id, const std::vector<ipc::value> &args, std::vector<ipc::value> &rval)
1225+
{
1226+
const char *mode = NULL;
1227+
const char *curEncoder = NULL;
1228+
bool validEncoder = false;
1229+
std::string serviceToCheck = args[0].value_str;
1230+
1231+
//get mode and configured encoder
1232+
mode = config_get_string(ConfigManager::getInstance().getBasic(), "Output", "Mode");
1233+
if (mode == NULL) {
1234+
mode = "Simple";
1235+
}
1236+
if (strcmp(mode, "Advanced") == 0) {
1237+
curEncoder = config_get_string(ConfigManager::getInstance().getBasic(), "AdvOut", "Encoder");
1238+
} else {
1239+
curEncoder = config_get_string(ConfigManager::getInstance().getBasic(), "SimpleOutput", "StreamingEncoder");
1240+
}
1241+
1242+
if (serviceToCheck == "Both") {
1243+
validEncoder = validateEncoderForService(StreamServiceId::Main, curEncoder) && validateEncoderForService(StreamServiceId::Second, curEncoder);
1244+
} else if (serviceToCheck == "Stream") {
1245+
validEncoder = validateEncoderForService(StreamServiceId::Main, curEncoder);
1246+
} else if (serviceToCheck == "StreamSecond") {
1247+
validEncoder = validateEncoderForService(StreamServiceId::Second, curEncoder);
1248+
}
1249+
1250+
rval.push_back(ipc::value((uint64_t)ErrorCode::Ok));
1251+
rval.push_back(ipc::value(validEncoder));
1252+
}
1253+
11991254
void OBS_settings::getSimpleOutputSettings(std::vector<SubCategory> *outputSettings, config_t *config, bool isCategoryEnabled)
12001255
{
12011256
converOldJimNvencEncoder(config, "SimpleOutput", "StreamEncoder", "RecEncoder");

obs-studio-server/source/nodeobs_settings.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,8 @@ class OBS_settings {
149149
static void OBS_settings_getSettings(void *data, const int64_t id, const std::vector<ipc::value> &args, std::vector<ipc::value> &rval);
150150
static void OBS_settings_saveSettings(void *data, const int64_t id, const std::vector<ipc::value> &args, std::vector<ipc::value> &rval);
151151

152+
static void OBS_settings_isValidEncoder(void *data, const int64_t id, const std::vector<ipc::value> &args, std::vector<ipc::value> &rval);
153+
152154
static void saveGenericSettings(std::vector<SubCategory> genericSettings, std::string section, config_t *config);
153155

154156
static void OBS_settings_getInputAudioDevices(void *data, const int64_t id, const std::vector<ipc::value> &args, std::vector<ipc::value> &rval);

0 commit comments

Comments
 (0)