瀏覽代碼

UI: Use hardware encoding by default if available

If the user doesn't use the auto-configuration on first use, set the
default encoders used in simple output mode to hardware encoders.
jp9000 6 年之前
父節點
當前提交
9fee895359
共有 5 個文件被更改,包括 32 次插入5 次删除
  1. 11 0
      UI/obs-app.cpp
  2. 3 0
      UI/window-basic-main-profiles.cpp
  3. 16 4
      UI/window-basic-main.cpp
  4. 1 0
      UI/window-basic-main.hpp
  5. 1 1
      UI/window-basic-settings.cpp

+ 11 - 0
UI/obs-app.cpp

@@ -711,6 +711,17 @@ bool OBSApp::InitGlobalConfig()
 		changed = true;
 	}
 
+	if (!config_has_user_value(globalConfig, "General", "Pre23Defaults")) {
+		uint32_t lastVersion = config_get_int(globalConfig, "General",
+				"LastVersion");
+		bool useOldDefaults = lastVersion &&
+		    lastVersion < MAKE_SEMANTIC_VERSION(23, 0, 0);
+
+		config_set_bool(globalConfig, "General", "Pre23Defaults",
+				useOldDefaults);
+		changed = true;
+	}
+
 	if (config_has_user_value(globalConfig, "BasicWindow",
 			"MultiviewLayout")) {
 		const char *layout = config_get_string(globalConfig,

+ 3 - 0
UI/window-basic-main-profiles.cpp

@@ -244,6 +244,7 @@ bool OBSBasic::AddProfile(bool create_new, const char *title, const char *text,
 	config.SaveSafe("tmp");
 	config.Swap(basicConfig);
 	InitBasicConfigDefaults();
+	InitBasicConfigDefaults2();
 	RefreshProfiles();
 
 	if (create_new)
@@ -464,6 +465,7 @@ void OBSBasic::on_actionRemoveProfile_triggered()
 
 	config.Swap(basicConfig);
 	InitBasicConfigDefaults();
+	InitBasicConfigDefaults2();
 	ResetProfileData();
 	DeleteProfile(oldName.c_str(), oldDir.c_str());
 	RefreshProfiles();
@@ -627,6 +629,7 @@ void OBSBasic::ChangeProfile()
 
 	config.Swap(basicConfig);
 	InitBasicConfigDefaults();
+	InitBasicConfigDefaults2();
 	ResetProfileData();
 	RefreshProfiles();
 	config_save_safe(App()->GlobalConfig(), "tmp", nullptr);

+ 16 - 4
UI/window-basic-main.cpp

@@ -1185,8 +1185,6 @@ bool OBSBasic::InitBasicConfigDefaults()
 			"flv");
 	config_set_default_uint  (basicConfig, "SimpleOutput", "VBitrate",
 			2500);
-	config_set_default_string(basicConfig, "SimpleOutput", "StreamEncoder",
-			SIMPLE_ENCODER_X264);
 	config_set_default_uint  (basicConfig, "SimpleOutput", "ABitrate", 160);
 	config_set_default_bool  (basicConfig, "SimpleOutput", "UseAdvanced",
 			false);
@@ -1196,8 +1194,6 @@ bool OBSBasic::InitBasicConfigDefaults()
 			"veryfast");
 	config_set_default_string(basicConfig, "SimpleOutput", "RecQuality",
 			"Stream");
-	config_set_default_string(basicConfig, "SimpleOutput", "RecEncoder",
-			SIMPLE_ENCODER_X264);
 	config_set_default_bool(basicConfig, "SimpleOutput", "RecRB", false);
 	config_set_default_int(basicConfig, "SimpleOutput", "RecRBTime", 20);
 	config_set_default_int(basicConfig, "SimpleOutput", "RecRBSize", 512);
@@ -1326,6 +1322,20 @@ bool OBSBasic::InitBasicConfigDefaults()
 	return true;
 }
 
+extern bool EncoderAvailable(const char *encoder);
+
+void OBSBasic::InitBasicConfigDefaults2()
+{
+	bool oldEncDefaults = config_get_bool(App()->GlobalConfig(),
+			"General", "Pre23Defaults");
+	bool useNV = EncoderAvailable("ffmpeg_nvenc") && !oldEncDefaults;
+
+	config_set_default_string(basicConfig, "SimpleOutput", "StreamEncoder",
+			useNV ? SIMPLE_ENCODER_NVENC : SIMPLE_ENCODER_X264);
+	config_set_default_string(basicConfig, "SimpleOutput", "RecEncoder",
+			useNV ? SIMPLE_ENCODER_NVENC : SIMPLE_ENCODER_X264);
+}
+
 bool OBSBasic::InitBasicConfig()
 {
 	ProfileScope("OBSBasic::InitBasicConfig");
@@ -1557,6 +1567,8 @@ void OBSBasic::OBSInit()
 	cef = obs_browser_init_panel();
 #endif
 
+	InitBasicConfigDefaults2();
+
 	CheckForSimpleModeX264Fallback();
 
 	blog(LOG_INFO, STARTUP_SEPARATOR);

+ 1 - 0
UI/window-basic-main.hpp

@@ -254,6 +254,7 @@ private:
 	bool          InitService();
 
 	bool          InitBasicConfigDefaults();
+	void          InitBasicConfigDefaults2();
 	bool          InitBasicConfig();
 
 	void          InitOBSCallbacks();

+ 1 - 1
UI/window-basic-settings.cpp

@@ -3913,7 +3913,7 @@ void OBSBasicSettings::UpdateStreamDelayEstimate()
 	UpdateAutomaticReplayBufferCheckboxes();
 }
 
-static bool EncoderAvailable(const char *encoder)
+bool EncoderAvailable(const char *encoder)
 {
 	const char *val;
 	int i = 0;