Parcourir la source

UI: Refactor NVENC preset migration

Refactor the NVENC preset migration code to avoid having to maintain
more copies of the preset mappings.
Ryan Foster il y a 3 ans
Parent
commit
c6fbeaaf6d
1 fichiers modifiés avec 118 ajouts et 120 suppressions
  1. 118 120
      UI/obs-app.cpp

+ 118 - 120
UI/obs-app.cpp

@@ -2812,6 +2812,122 @@ static void convert_14_2_encoder_setting(const char *encoder, const char *file)
 	obs_data_item_release(&cbr_item);
 }
 
+static void convert_nvenc_h264_presets(obs_data_t *data)
+{
+	const char *preset = obs_data_get_string(data, "preset");
+	const char *rc = obs_data_get_string(data, "rate_control");
+
+	// If already using SDK10+ preset, return early.
+	if (astrcmpi_n(preset, "p", 1) == 0) {
+		obs_data_set_string(data, "preset2", preset);
+		return;
+	}
+
+	if (astrcmpi(rc, "lossless") == 0 && astrcmpi(preset, "mq")) {
+		obs_data_set_string(data, "preset2", "p3");
+		obs_data_set_string(data, "tune", "lossless");
+		obs_data_set_string(data, "multipass", "disabled");
+
+	} else if (astrcmpi(rc, "lossless") == 0 && astrcmpi(preset, "hp")) {
+		obs_data_set_string(data, "preset2", "p2");
+		obs_data_set_string(data, "tune", "lossless");
+		obs_data_set_string(data, "multipass", "disabled");
+
+	} else if (astrcmpi(preset, "mq") == 0) {
+		obs_data_set_string(data, "preset2", "p5");
+		obs_data_set_string(data, "tune", "hq");
+		obs_data_set_string(data, "multipass", "qres");
+
+	} else if (astrcmpi(preset, "hq") == 0) {
+		obs_data_set_string(data, "preset2", "p5");
+		obs_data_set_string(data, "tune", "hq");
+		obs_data_set_string(data, "multipass", "disabled");
+
+	} else if (astrcmpi(preset, "default") == 0) {
+		obs_data_set_string(data, "preset2", "p3");
+		obs_data_set_string(data, "tune", "hq");
+		obs_data_set_string(data, "multipass", "disabled");
+
+	} else if (astrcmpi(preset, "hp") == 0) {
+		obs_data_set_string(data, "preset2", "p1");
+		obs_data_set_string(data, "tune", "hq");
+		obs_data_set_string(data, "multipass", "disabled");
+
+	} else if (astrcmpi(preset, "ll") == 0) {
+		obs_data_set_string(data, "preset2", "p3");
+		obs_data_set_string(data, "tune", "ll");
+		obs_data_set_string(data, "multipass", "disabled");
+
+	} else if (astrcmpi(preset, "llhq") == 0) {
+		obs_data_set_string(data, "preset2", "p4");
+		obs_data_set_string(data, "tune", "ll");
+		obs_data_set_string(data, "multipass", "disabled");
+
+	} else if (astrcmpi(preset, "llhp") == 0) {
+		obs_data_set_string(data, "preset2", "p2");
+		obs_data_set_string(data, "tune", "ll");
+		obs_data_set_string(data, "multipass", "disabled");
+	}
+}
+
+static void convert_nvenc_hevc_presets(obs_data_t *data)
+{
+	const char *preset = obs_data_get_string(data, "preset");
+	const char *rc = obs_data_get_string(data, "rate_control");
+
+	// If already using SDK10+ preset, return early.
+	if (astrcmpi_n(preset, "p", 1) == 0) {
+		obs_data_set_string(data, "preset2", preset);
+		return;
+	}
+
+	if (astrcmpi(rc, "lossless") == 0 && astrcmpi(preset, "mq")) {
+		obs_data_set_string(data, "preset2", "p5");
+		obs_data_set_string(data, "tune", "lossless");
+		obs_data_set_string(data, "multipass", "disabled");
+
+	} else if (astrcmpi(rc, "lossless") == 0 && astrcmpi(preset, "hp")) {
+		obs_data_set_string(data, "preset2", "p3");
+		obs_data_set_string(data, "tune", "lossless");
+		obs_data_set_string(data, "multipass", "disabled");
+
+	} else if (astrcmpi(preset, "mq") == 0) {
+		obs_data_set_string(data, "preset2", "p6");
+		obs_data_set_string(data, "tune", "hq");
+		obs_data_set_string(data, "multipass", "qres");
+
+	} else if (astrcmpi(preset, "hq") == 0) {
+		obs_data_set_string(data, "preset2", "p6");
+		obs_data_set_string(data, "tune", "hq");
+		obs_data_set_string(data, "multipass", "disabled");
+
+	} else if (astrcmpi(preset, "default") == 0) {
+		obs_data_set_string(data, "preset2", "p5");
+		obs_data_set_string(data, "tune", "hq");
+		obs_data_set_string(data, "multipass", "disabled");
+
+	} else if (astrcmpi(preset, "hp") == 0) {
+		obs_data_set_string(data, "preset2", "p1");
+		obs_data_set_string(data, "tune", "hq");
+		obs_data_set_string(data, "multipass", "disabled");
+
+	} else if (astrcmpi(preset, "ll") == 0) {
+		obs_data_set_string(data, "preset2", "p3");
+		obs_data_set_string(data, "tune", "ll");
+		obs_data_set_string(data, "multipass", "disabled");
+
+	} else if (astrcmpi(preset, "llhq") == 0) {
+		obs_data_set_string(data, "preset2", "p4");
+		obs_data_set_string(data, "tune", "ll");
+		obs_data_set_string(data, "multipass", "disabled");
+
+	} else if (astrcmpi(preset, "llhp") == 0) {
+		obs_data_set_string(data, "preset2", "p2");
+		obs_data_set_string(data, "tune", "ll");
+		obs_data_set_string(data, "multipass", "disabled");
+	}
+}
+
 static void convert_28_1_encoder_setting(const char *encoder, const char *file)
 {
 	OBSDataAutoRelease data =
@@ -2823,66 +2939,7 @@ static void convert_28_1_encoder_setting(const char *encoder, const char *file)
 
 		if (obs_data_has_user_value(data, "preset") &&
 		    !obs_data_has_user_value(data, "preset2")) {
-			const char *preset =
-				obs_data_get_string(data, "preset");
-			const char *rc =
-				obs_data_get_string(data, "rate_control");
-
-			if (astrcmpi(rc, "lossless") == 0 &&
-			    astrcmpi(preset, "mq")) {
-				obs_data_set_string(data, "preset2", "p3");
-				obs_data_set_string(data, "tune", "lossless");
-				obs_data_set_string(data, "multipass",
-						    "disabled");
-
-			} else if (astrcmpi(rc, "lossless") == 0 &&
-				   astrcmpi(preset, "hp")) {
-				obs_data_set_string(data, "preset2", "p2");
-				obs_data_set_string(data, "tune", "lossless");
-				obs_data_set_string(data, "multipass",
-						    "disabled");
-
-			} else if (astrcmpi(preset, "mq") == 0) {
-				obs_data_set_string(data, "preset2", "p5");
-				obs_data_set_string(data, "tune", "hq");
-				obs_data_set_string(data, "multipass", "qres");
-
-			} else if (astrcmpi(preset, "hq") == 0) {
-				obs_data_set_string(data, "preset2", "p5");
-				obs_data_set_string(data, "tune", "hq");
-				obs_data_set_string(data, "multipass",
-						    "disabled");
-
-			} else if (astrcmpi(preset, "default") == 0) {
-				obs_data_set_string(data, "preset2", "p3");
-				obs_data_set_string(data, "tune", "hq");
-				obs_data_set_string(data, "multipass",
-						    "disabled");
-
-			} else if (astrcmpi(preset, "hp") == 0) {
-				obs_data_set_string(data, "preset2", "p1");
-				obs_data_set_string(data, "tune", "hq");
-				obs_data_set_string(data, "multipass",
-						    "disabled");
-
-			} else if (astrcmpi(preset, "ll") == 0) {
-				obs_data_set_string(data, "preset2", "p3");
-				obs_data_set_string(data, "tune", "ll");
-				obs_data_set_string(data, "multipass",
-						    "disabled");
-
-			} else if (astrcmpi(preset, "llhq") == 0) {
-				obs_data_set_string(data, "preset2", "p4");
-				obs_data_set_string(data, "tune", "ll");
-				obs_data_set_string(data, "multipass",
-						    "disabled");
-
-			} else if (astrcmpi(preset, "llhp") == 0) {
-				obs_data_set_string(data, "preset2", "p2");
-				obs_data_set_string(data, "tune", "ll");
-				obs_data_set_string(data, "multipass",
-						    "disabled");
-			}
+			convert_nvenc_h264_presets(data);
 
 			modified = true;
 		}
@@ -2891,66 +2948,7 @@ static void convert_28_1_encoder_setting(const char *encoder, const char *file)
 
 		if (obs_data_has_user_value(data, "preset") &&
 		    !obs_data_has_user_value(data, "preset2")) {
-			const char *preset =
-				obs_data_get_string(data, "preset");
-			const char *rc =
-				obs_data_get_string(data, "rate_control");
-
-			if (astrcmpi(rc, "lossless") == 0 &&
-			    astrcmpi(preset, "mq")) {
-				obs_data_set_string(data, "preset2", "p5");
-				obs_data_set_string(data, "tune", "lossless");
-				obs_data_set_string(data, "multipass",
-						    "disabled");
-
-			} else if (astrcmpi(rc, "lossless") == 0 &&
-				   astrcmpi(preset, "hp")) {
-				obs_data_set_string(data, "preset2", "p3");
-				obs_data_set_string(data, "tune", "lossless");
-				obs_data_set_string(data, "multipass",
-						    "disabled");
-
-			} else if (astrcmpi(preset, "mq") == 0) {
-				obs_data_set_string(data, "preset2", "p6");
-				obs_data_set_string(data, "tune", "hq");
-				obs_data_set_string(data, "multipass", "qres");
-
-			} else if (astrcmpi(preset, "hq") == 0) {
-				obs_data_set_string(data, "preset2", "p6");
-				obs_data_set_string(data, "tune", "hq");
-				obs_data_set_string(data, "multipass",
-						    "disabled");
-
-			} else if (astrcmpi(preset, "default") == 0) {
-				obs_data_set_string(data, "preset2", "p5");
-				obs_data_set_string(data, "tune", "hq");
-				obs_data_set_string(data, "multipass",
-						    "disabled");
-
-			} else if (astrcmpi(preset, "hp") == 0) {
-				obs_data_set_string(data, "preset2", "p1");
-				obs_data_set_string(data, "tune", "hq");
-				obs_data_set_string(data, "multipass",
-						    "disabled");
-
-			} else if (astrcmpi(preset, "ll") == 0) {
-				obs_data_set_string(data, "preset2", "p3");
-				obs_data_set_string(data, "tune", "ll");
-				obs_data_set_string(data, "multipass",
-						    "disabled");
-
-			} else if (astrcmpi(preset, "llhq") == 0) {
-				obs_data_set_string(data, "preset2", "p4");
-				obs_data_set_string(data, "tune", "ll");
-				obs_data_set_string(data, "multipass",
-						    "disabled");
-
-			} else if (astrcmpi(preset, "llhp") == 0) {
-				obs_data_set_string(data, "preset2", "p2");
-				obs_data_set_string(data, "tune", "ll");
-				obs_data_set_string(data, "multipass",
-						    "disabled");
-			}
+			convert_nvenc_hevc_presets(data);
 
 			modified = true;
 		}