obs-qsv11: Do not apply limits if CPU generation is unknown

Users with AMD CPUs and Intel dGPUs (Arc) would find that QSV is
restricted to 1200p and missing features due to to this check failing.

Once the encoder gets rewritten for AV1 support we will fix this
properly.
master
derrod 2022-08-13 11:41:13 +02:00 committed by Jim
parent 0cc7ed4382
commit 1fdaf121e6
2 changed files with 11 additions and 5 deletions

View File

@ -212,7 +212,8 @@ bool QSV_Encoder_Internal::InitParams(qsv_param_t *pParams)
m_mfxEncParams.mfx.GopRefDist = pParams->nbFrames + 1;
enum qsv_cpu_platform qsv_platform = qsv_get_cpu_platform();
if ((qsv_platform >= QSV_CPU_PLATFORM_ICL) &&
if ((qsv_platform >= QSV_CPU_PLATFORM_ICL ||
qsv_platform == QSV_CPU_PLATFORM_UNKNOWN) &&
(pParams->nbFrames == 0) &&
(m_ver.Major == 1 && m_ver.Minor >= 31)) {
m_mfxEncParams.mfx.LowPower = MFX_CODINGOPTION_ON;

View File

@ -189,7 +189,8 @@ static inline void add_strings(obs_property_t *list, const char *const *strings)
static inline bool is_skl_or_greater_platform()
{
enum qsv_cpu_platform plat = qsv_get_cpu_platform();
return (plat >= QSV_CPU_PLATFORM_SKL);
return (plat >= QSV_CPU_PLATFORM_SKL ||
plat == QSV_CPU_PLATFORM_UNKNOWN);
}
static bool update_latency(obs_data_t *settings)
@ -314,7 +315,8 @@ static bool profile_modified(obs_properties_t *ppts, obs_property_t *p,
const char *profile = obs_data_get_string(settings, "profile");
enum qsv_cpu_platform plat = qsv_get_cpu_platform();
bool bVisible = ((astrcmpi(profile, "high") == 0) &&
(plat >= QSV_CPU_PLATFORM_ICL));
(plat >= QSV_CPU_PLATFORM_ICL ||
plat == QSV_CPU_PLATFORM_UNKNOWN));
p = obs_properties_get(ppts, "CQM");
obs_property_set_visible(p, bVisible);
return true;
@ -325,7 +327,9 @@ static inline void add_rate_controls(obs_property_t *list,
{
enum qsv_cpu_platform plat = qsv_get_cpu_platform();
while (rc->name) {
if (!rc->haswell_or_greater || plat >= QSV_CPU_PLATFORM_HSW)
if (!rc->haswell_or_greater ||
(plat >= QSV_CPU_PLATFORM_HSW ||
plat == QSV_CPU_PLATFORM_UNKNOWN))
obs_property_list_add_string(list, rc->name, rc->name);
rc++;
}
@ -818,7 +822,8 @@ static inline void cap_resolution(obs_encoder_t *encoder,
info->height = height;
info->width = width;
if (qsv_platform <= QSV_CPU_PLATFORM_IVB) {
if (qsv_platform <= QSV_CPU_PLATFORM_IVB &&
qsv_platform != QSV_CPU_PLATFORM_UNKNOWN) {
if (width > 1920) {
info->width = 1920;
}