mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-09-24 23:31:36 +08:00
obs-qsv11: Only reinitialize bitrate
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user