From 1fdaf121e6589b517963d71d286ca1192e993295 Mon Sep 17 00:00:00 2001 From: derrod Date: Sat, 13 Aug 2022 11:41:13 +0200 Subject: [PATCH] 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. --- plugins/obs-qsv11/QSV_Encoder_Internal.cpp | 3 ++- plugins/obs-qsv11/obs-qsv11.c | 13 +++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/plugins/obs-qsv11/QSV_Encoder_Internal.cpp b/plugins/obs-qsv11/QSV_Encoder_Internal.cpp index c7ed87899..35cee6626 100644 --- a/plugins/obs-qsv11/QSV_Encoder_Internal.cpp +++ b/plugins/obs-qsv11/QSV_Encoder_Internal.cpp @@ -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; diff --git a/plugins/obs-qsv11/obs-qsv11.c b/plugins/obs-qsv11/obs-qsv11.c index 347ba3e5f..69698dc10 100644 --- a/plugins/obs-qsv11/obs-qsv11.c +++ b/plugins/obs-qsv11/obs-qsv11.c @@ -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; }