From d04e167ed09cf9140dcc27d11cc792cbf9c97f08 Mon Sep 17 00:00:00 2001 From: brittneysclark Date: Sat, 25 Jul 2020 04:31:03 -0700 Subject: [PATCH] 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. --- plugins/obs-qsv11/obs-qsv11.c | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/plugins/obs-qsv11/obs-qsv11.c b/plugins/obs-qsv11/obs-qsv11.c index cec074e35..186c568cd 100644 --- a/plugins/obs-qsv11/obs-qsv11.c +++ b/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; + } - if (async_depth > 0 || la_depth > 0) { + 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 (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; }