diff --git a/plugins/obs-qsv11/QSV_Encoder.cpp b/plugins/obs-qsv11/QSV_Encoder.cpp index 103979fba..90986a92c 100644 --- a/plugins/obs-qsv11/QSV_Encoder.cpp +++ b/plugins/obs-qsv11/QSV_Encoder.cpp @@ -267,12 +267,12 @@ int qsv_param_apply_profile(qsv_param_t *, const char *profile) int qsv_encoder_reconfig(qsv_t *pContext, qsv_param_t *pParams) { QSV_Encoder_Internal *pEncoder = (QSV_Encoder_Internal *)pContext; - mfxStatus sts = pEncoder->Reset(pParams); + pEncoder->UpdateParams(pParams); + mfxStatus sts = pEncoder->ReconfigureEncoder(); - if (sts == MFX_ERR_NONE) - return 0; - else - return -1; + if (sts != MFX_ERR_NONE) + return false; + return true; } enum qsv_cpu_platform qsv_get_cpu_platform() diff --git a/plugins/obs-qsv11/QSV_Encoder_Internal.cpp b/plugins/obs-qsv11/QSV_Encoder_Internal.cpp index 35cee6626..7cdccd5b3 100644 --- a/plugins/obs-qsv11/QSV_Encoder_Internal.cpp +++ b/plugins/obs-qsv11/QSV_Encoder_Internal.cpp @@ -333,6 +333,23 @@ bool QSV_Encoder_Internal::InitParams(qsv_param_t *pParams) return true; } +bool QSV_Encoder_Internal::UpdateParams(qsv_param_t *pParams) +{ + switch (pParams->nRateControl) { + case MFX_RATECONTROL_CBR: + m_mfxEncParams.mfx.TargetKbps = pParams->nTargetBitRate; + default: + break; + } + + return true; +} + +mfxStatus QSV_Encoder_Internal::ReconfigureEncoder() +{ + return m_pmfxENC->Reset(&m_mfxEncParams); +} + mfxStatus QSV_Encoder_Internal::AllocateSurfaces() { // Query number of required surfaces for encoder diff --git a/plugins/obs-qsv11/QSV_Encoder_Internal.h b/plugins/obs-qsv11/QSV_Encoder_Internal.h index 712244b83..587e3a190 100644 --- a/plugins/obs-qsv11/QSV_Encoder_Internal.h +++ b/plugins/obs-qsv11/QSV_Encoder_Internal.h @@ -75,6 +75,8 @@ public: mfxBitstream **pBS); mfxStatus ClearData(); mfxStatus Reset(qsv_param_t *pParams); + mfxStatus ReconfigureEncoder(); + bool UpdateParams(qsv_param_t *pParams); protected: bool InitParams(qsv_param_t *pParams); diff --git a/plugins/obs-qsv11/obs-qsv11.c b/plugins/obs-qsv11/obs-qsv11.c index 00120c04b..548a9387c 100644 --- a/plugins/obs-qsv11/obs-qsv11.c +++ b/plugins/obs-qsv11/obs-qsv11.c @@ -602,22 +602,15 @@ static void load_headers(struct obs_qsv *obsqsv) static bool obs_qsv_update(void *data, obs_data_t *settings) { struct obs_qsv *obsqsv = data; - bool success = update_settings(obsqsv, settings); - int ret; + obsqsv->params.nTargetBitRate = + (mfxU16)obs_data_get_int(settings, "bitrate"); - if (success) { - AcquireSRWLockExclusive(&g_QsvLock); - - ret = qsv_encoder_reconfig(obsqsv->context, &obsqsv->params); - if (ret != 0) - warn("Failed to reconfigure: %d", ret); - - ReleaseSRWLockExclusive(&g_QsvLock); - - return ret == 0; + if (!qsv_encoder_reconfig(obsqsv->context, &obsqsv->params)) { + warn("Failed to reconfigure"); + return false; } - return false; + return true; } static void *obs_qsv_create(obs_data_t *settings, obs_encoder_t *encoder)