obs-qsv11: Use translatable strings for target usage

For Target Usage, instead of doing string comparisons against long
descriptive strings, use translatable strings for descriptive UI text
and simple designations for values used for comparisons and storage.
This is similar to what we do for NVENC Presets.
This commit is contained in:
Ryan Foster 2023-09-29 13:49:34 -04:00
parent 9b1d6032e3
commit 0866688953
3 changed files with 44 additions and 28 deletions

View file

@ -81,14 +81,13 @@ static const struct qsv_rate_control_info qsv_ratecontrols[] = {{"CBR", false},
static const char *const qsv_profile_names[] = {"high", "main", "baseline", 0};
static const char *const qsv_profile_names_av1[] = {"main", 0};
static const char *const qsv_profile_names_hevc[] = {"main", "main10", 0};
static const char *const qsv_usage_names[] = {"TU1: Slowest (Best Quality)",
"TU2: Slower",
"TU3: Slow",
"TU4: Balanced (Medium Quality)",
"TU5: Fast",
"TU6: Faster",
"TU7: Fastest (Best Speed)",
0};
static const char *const qsv_usage_translation_keys[] = {
"TargetUsage.TU1", "TargetUsage.TU2",
"TargetUsage.TU3", "TargetUsage.TU4",
"TargetUsage.TU5", "TargetUsage.TU6",
"TargetUsage.TU7", 0};
static const char *const qsv_usage_names[] = {"TU1", "TU2", "TU3", "TU4",
"TU5", "TU6", "TU7", 0};
static const char *const qsv_latency_names[] = {"ultra-low", "low", "normal",
0};
typedef struct qsv_t qsv_t;

View file

@ -12,3 +12,11 @@ SubjectiveVideoEnhancements="Subjective Video Enhancements"
10bitUnsupportedAvc="Cannot perform 10-bit encode on Intel QSV H.264 encoder."
16bitUnsupported="Cannot perform 16-bit encode on this encoder."
BFrames="B Frames"
TargetUsage.TU1="TU1: Slowest (Best Quality)"
TargetUsage.TU2="TU2: Slower"
TargetUsage.TU3="TU3: Slow"
TargetUsage.TU4="TU4: Balanced (Medium Quality)"
TargetUsage.TU5="TU5: Fast"
TargetUsage.TU6="TU6: Faster"
TargetUsage.TU7="TU7: Fastest (Best Speed)"

View file

@ -167,8 +167,7 @@ static void obs_qsv_destroy(void *data)
static void obs_qsv_defaults(obs_data_t *settings, int ver,
enum qsv_codec codec)
{
obs_data_set_default_string(settings, "target_usage",
"TU4: Balanced (Medium Quality)");
obs_data_set_default_string(settings, "target_usage", "TU4");
obs_data_set_default_int(settings, "bitrate", 2500);
obs_data_set_default_int(settings, "max_bitrate", 3000);
obs_data_set_default_string(settings, "profile",
@ -218,6 +217,18 @@ static inline void add_strings(obs_property_t *list, const char *const *strings)
}
}
static inline void add_translated_strings(obs_property_t *list,
const char *const *keys,
const char *const *strings)
{
while (*keys && *strings) {
obs_property_list_add_string(list, obs_module_text(*keys),
*strings);
keys++;
strings++;
}
}
#define TEXT_SPEED obs_module_text("TargetUsage")
#define TEXT_TARGET_BITRATE obs_module_text("Bitrate")
#define TEXT_MAX_BITRATE obs_module_text("MaxBitrate")
@ -335,24 +346,21 @@ static void update_targetusage(obs_data_t *settings)
if (astrcmpi(target_usage, "veryslow") == 0 ||
astrcmpi(target_usage, "quality") == 0)
obs_data_set_string(settings, "target_usage",
"TU1: Slowest (Best Quality)");
obs_data_set_string(settings, "target_usage", "TU1");
else if (astrcmpi(target_usage, "slower") == 0)
obs_data_set_string(settings, "target_usage", "TU2: Slower");
obs_data_set_string(settings, "target_usage", "TU2");
else if (astrcmpi(target_usage, "slow") == 0)
obs_data_set_string(settings, "target_usage", "TU3: Slow");
obs_data_set_string(settings, "target_usage", "TU3");
else if (astrcmpi(target_usage, "medium") == 0 ||
astrcmpi(target_usage, "balanced") == 0)
obs_data_set_string(settings, "target_usage",
"TU4: Balanced (Medium Quality)");
obs_data_set_string(settings, "target_usage", "TU4");
else if (astrcmpi(target_usage, "fast") == 0)
obs_data_set_string(settings, "target_usage", "TU5: Fast");
obs_data_set_string(settings, "target_usage", "TU5");
else if (astrcmpi(target_usage, "faster") == 0)
obs_data_set_string(settings, "target_usage", "TU6: Faster");
obs_data_set_string(settings, "target_usage", "TU6");
else if (astrcmpi(target_usage, "veryfast") == 0 ||
astrcmpi(target_usage, "speed") == 0)
obs_data_set_string(settings, "target_usage",
"TU7: Fastest (Best Speed)");
obs_data_set_string(settings, "target_usage", "TU7");
}
static bool rate_control_modified(obs_properties_t *ppts, obs_property_t *p,
@ -465,7 +473,8 @@ static obs_properties_t *obs_qsv_props(enum qsv_codec codec, void *unused,
prop = obs_properties_add_list(props, "target_usage", TEXT_SPEED,
OBS_COMBO_TYPE_LIST,
OBS_COMBO_FORMAT_STRING);
add_strings(prop, qsv_usage_names);
add_translated_strings(prop, qsv_usage_translation_keys,
qsv_usage_names);
prop = obs_properties_add_list(props, "profile", TEXT_PROFILE,
OBS_COMBO_TYPE_LIST,
@ -561,19 +570,19 @@ static void update_params(struct obs_qsv *obsqsv, obs_data_t *settings)
int width = (int)obs_encoder_get_width(obsqsv->encoder);
int height = (int)obs_encoder_get_height(obsqsv->encoder);
if (astrcmpi(target_usage, "TU1: Slowest (Best Quality)") == 0)
if (astrcmpi(target_usage, "TU1") == 0)
obsqsv->params.nTargetUsage = MFX_TARGETUSAGE_BEST_QUALITY;
else if (astrcmpi(target_usage, "TU4: Balanced (Medium Quality)") == 0)
else if (astrcmpi(target_usage, "TU4") == 0)
obsqsv->params.nTargetUsage = MFX_TARGETUSAGE_BALANCED;
else if (astrcmpi(target_usage, "TU7: Fastest (Best Speed)") == 0)
else if (astrcmpi(target_usage, "TU7") == 0)
obsqsv->params.nTargetUsage = MFX_TARGETUSAGE_BEST_SPEED;
else if (astrcmpi(target_usage, "TU2: Slower") == 0)
else if (astrcmpi(target_usage, "TU2") == 0)
obsqsv->params.nTargetUsage = MFX_TARGETUSAGE_2;
else if (astrcmpi(target_usage, "TU3: Slow") == 0)
else if (astrcmpi(target_usage, "TU3") == 0)
obsqsv->params.nTargetUsage = MFX_TARGETUSAGE_3;
else if (astrcmpi(target_usage, "TU5: Fast") == 0)
else if (astrcmpi(target_usage, "TU5") == 0)
obsqsv->params.nTargetUsage = MFX_TARGETUSAGE_5;
else if (astrcmpi(target_usage, "TU6: Faster") == 0)
else if (astrcmpi(target_usage, "TU6") == 0)
obsqsv->params.nTargetUsage = MFX_TARGETUSAGE_6;
if (obsqsv->codec == QSV_CODEC_AVC) {