Ver código fonte

obs-qsv11: Fix bug mapping old qsv settings to new

Fix for an issue found where new "Latency" and "Subjective Video
Enhancement" options where always using default settings even after
being changed in UI. This issue was introduced when mapping old QSV
settings to new ones.
brittneysclark 5 anos atrás
pai
commit
d04e167ed0
1 arquivos alterados com 22 adições e 11 exclusões
  1. 22 11
      plugins/obs-qsv11/obs-qsv11.c

+ 22 - 11
plugins/obs-qsv11/obs-qsv11.c

@@ -148,7 +148,6 @@ static void obs_qsv_defaults(obs_data_t *settings)
 	obs_data_set_default_int(settings, "bitrate", 2500);
 	obs_data_set_default_int(settings, "max_bitrate", 3000);
 	obs_data_set_default_string(settings, "profile", "high");
-	obs_data_set_default_int(settings, "async_depth", 4);
 	obs_data_set_default_string(settings, "rate_control", "CBR");
 
 	obs_data_set_default_int(settings, "accuracy", 1000);
@@ -157,13 +156,11 @@ static void obs_qsv_defaults(obs_data_t *settings)
 	obs_data_set_default_int(settings, "qpp", 23);
 	obs_data_set_default_int(settings, "qpb", 23);
 	obs_data_set_default_int(settings, "icq_quality", 23);
-	obs_data_set_default_int(settings, "la_depth", 15);
 
 	obs_data_set_default_int(settings, "keyint_sec", 3);
 	obs_data_set_default_string(settings, "latency", "normal");
 	obs_data_set_default_int(settings, "bframes", 3);
 	obs_data_set_default_bool(settings, "enhancements", false);
-	obs_data_set_default_bool(settings, "mbbrc", true);
 }
 
 static inline void add_strings(obs_property_t *list, const char *const *strings)
@@ -196,10 +193,22 @@ static inline bool is_skl_or_greater_platform()
 
 static bool update_latency(obs_data_t *settings)
 {
-	int async_depth = (int)obs_data_get_int(settings, "async_depth");
-	int la_depth = (int)obs_data_get_int(settings, "la_depth");
+	bool update = false;
+	int async_depth = 4;
+	if (obs_data_item_byname(settings, "async_depth") != NULL) {
+		async_depth = (int)obs_data_get_int(settings, "async_depth");
+		obs_data_erase(settings, "async_depth");
+		update = true;
+	}
+
+	int la_depth = 15;
+	if (obs_data_item_byname(settings, "la_depth") != NULL) {
+		la_depth = (int)obs_data_get_int(settings, "la_depth");
+		obs_data_erase(settings, "la_depth");
+		update = true;
+	}
 
-	if (async_depth > 0 || la_depth > 0) {
+	if (update) {
 		const char *rate_control =
 			obs_data_get_string(settings, "rate_control");
 
@@ -221,9 +230,6 @@ static bool update_latency(obs_data_t *settings)
 				obs_data_set_string(settings, "latency",
 						    "ultra-low");
 		}
-
-		obs_data_erase(settings, "async_depth");
-		obs_data_erase(settings, "la_depth");
 	}
 
 	return true;
@@ -231,20 +237,25 @@ static bool update_latency(obs_data_t *settings)
 
 static bool update_enhancements(obs_data_t *settings)
 {
+	bool update = false;
 	bool mbbrc = true;
 	if (obs_data_item_byname(settings, "mbbrc") != NULL) {
 		mbbrc = (bool)obs_data_get_bool(settings, "mbbrc");
 		obs_data_erase(settings, "mbbrc");
+		update = true;
 	}
 
 	bool cqm = false;
 	if (obs_data_item_byname(settings, "CQM") != NULL) {
 		cqm = (bool)obs_data_get_bool(settings, "CQM");
 		obs_data_erase(settings, "CQM");
+		update = true;
 	}
 
-	bool enabled = (mbbrc && cqm);
-	obs_data_set_bool(settings, "enhancements", enabled);
+	if (update) {
+		bool enabled = (mbbrc && cqm);
+		obs_data_set_bool(settings, "enhancements", enabled);
+	}
 
 	return true;
 }