mirror of
https://github.com/Xaymar/obs-StreamFX
synced 2024-12-04 17:17:25 +00:00
encoder/ffmpeg/nvenc: Fix missing settings and CQ being applied in CBR mode
This commit is contained in:
parent
d6ec6ce3d0
commit
5ce37dcd59
1 changed files with 19 additions and 8 deletions
|
@ -241,6 +241,7 @@ static bool modified_ratecontrol(obs_properties_t* props, obs_property_t*, obs_d
|
||||||
bool have_bitrate = false;
|
bool have_bitrate = false;
|
||||||
bool have_bitrate_range = false;
|
bool have_bitrate_range = false;
|
||||||
bool have_quality = false;
|
bool have_quality = false;
|
||||||
|
bool have_qp_limits = false;
|
||||||
bool have_qp = false;
|
bool have_qp = false;
|
||||||
|
|
||||||
nvenc::ratecontrolmode rc =
|
nvenc::ratecontrolmode rc =
|
||||||
|
@ -254,12 +255,14 @@ static bool modified_ratecontrol(obs_properties_t* props, obs_property_t*, obs_d
|
||||||
case nvenc::ratecontrolmode::CBR_HQ:
|
case nvenc::ratecontrolmode::CBR_HQ:
|
||||||
case nvenc::ratecontrolmode::CBR_LD_HQ:
|
case nvenc::ratecontrolmode::CBR_LD_HQ:
|
||||||
have_bitrate = true;
|
have_bitrate = true;
|
||||||
|
have_qp_limits = true;
|
||||||
break;
|
break;
|
||||||
case nvenc::ratecontrolmode::VBR:
|
case nvenc::ratecontrolmode::VBR:
|
||||||
case nvenc::ratecontrolmode::VBR_HQ:
|
case nvenc::ratecontrolmode::VBR_HQ:
|
||||||
have_bitrate = true;
|
have_bitrate = true;
|
||||||
have_bitrate_range = true;
|
have_bitrate_range = true;
|
||||||
have_quality = true;
|
have_quality = true;
|
||||||
|
have_qp_limits = true;
|
||||||
have_qp = true;
|
have_qp = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -270,9 +273,9 @@ static bool modified_ratecontrol(obs_properties_t* props, obs_property_t*, obs_d
|
||||||
obs_property_set_visible(obs_properties_get(props, ST_KEY_RATECONTROL_LIMITS_BITRATE_TARGET), have_bitrate);
|
obs_property_set_visible(obs_properties_get(props, ST_KEY_RATECONTROL_LIMITS_BITRATE_TARGET), have_bitrate);
|
||||||
obs_property_set_visible(obs_properties_get(props, ST_KEY_RATECONTROL_LIMITS_BITRATE_MAXIMUM), have_bitrate_range);
|
obs_property_set_visible(obs_properties_get(props, ST_KEY_RATECONTROL_LIMITS_BITRATE_MAXIMUM), have_bitrate_range);
|
||||||
|
|
||||||
obs_property_set_visible(obs_properties_get(props, ST_I18N_RATECONTROL_QP), have_qp || have_bitrate_range);
|
obs_property_set_visible(obs_properties_get(props, ST_I18N_RATECONTROL_QP), have_qp || have_qp_limits);
|
||||||
obs_property_set_visible(obs_properties_get(props, ST_KEY_RATECONTROL_QP_MINIMUM), have_bitrate_range);
|
obs_property_set_visible(obs_properties_get(props, ST_KEY_RATECONTROL_QP_MINIMUM), have_qp_limits);
|
||||||
obs_property_set_visible(obs_properties_get(props, ST_KEY_RATECONTROL_QP_MAXIMUM), have_bitrate_range);
|
obs_property_set_visible(obs_properties_get(props, ST_KEY_RATECONTROL_QP_MAXIMUM), have_qp_limits);
|
||||||
obs_property_set_visible(obs_properties_get(props, ST_KEY_RATECONTROL_QP_I), have_qp);
|
obs_property_set_visible(obs_properties_get(props, ST_KEY_RATECONTROL_QP_I), have_qp);
|
||||||
obs_property_set_visible(obs_properties_get(props, ST_KEY_RATECONTROL_QP_P), have_qp);
|
obs_property_set_visible(obs_properties_get(props, ST_KEY_RATECONTROL_QP_P), have_qp);
|
||||||
obs_property_set_visible(obs_properties_get(props, ST_KEY_RATECONTROL_QP_B), have_qp);
|
obs_property_set_visible(obs_properties_get(props, ST_KEY_RATECONTROL_QP_B), have_qp);
|
||||||
|
@ -530,6 +533,7 @@ void nvenc::update(obs_data_t* settings, const AVCodec* codec, AVCodecContext* c
|
||||||
bool have_bitrate = false;
|
bool have_bitrate = false;
|
||||||
bool have_bitrate_range = false;
|
bool have_bitrate_range = false;
|
||||||
bool have_quality = false;
|
bool have_quality = false;
|
||||||
|
bool have_qp_limits = false;
|
||||||
bool have_qp = false;
|
bool have_qp = false;
|
||||||
|
|
||||||
ratecontrolmode rc = static_cast<ratecontrolmode>(obs_data_get_int(settings, ST_KEY_RATECONTROL_MODE));
|
ratecontrolmode rc = static_cast<ratecontrolmode>(obs_data_get_int(settings, ST_KEY_RATECONTROL_MODE));
|
||||||
|
@ -540,6 +544,7 @@ void nvenc::update(obs_data_t* settings, const AVCodec* codec, AVCodecContext* c
|
||||||
have_bitrate = true;
|
have_bitrate = true;
|
||||||
have_bitrate_range = true;
|
have_bitrate_range = true;
|
||||||
have_quality = true;
|
have_quality = true;
|
||||||
|
have_qp_limits = true;
|
||||||
have_qp = true;
|
have_qp = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -553,6 +558,7 @@ void nvenc::update(obs_data_t* settings, const AVCodec* codec, AVCodecContext* c
|
||||||
case ratecontrolmode::CBR_HQ:
|
case ratecontrolmode::CBR_HQ:
|
||||||
case ratecontrolmode::CBR_LD_HQ:
|
case ratecontrolmode::CBR_LD_HQ:
|
||||||
have_bitrate = true;
|
have_bitrate = true;
|
||||||
|
have_qp_limits = true;
|
||||||
av_opt_set_int(context->priv_data, "cbr", 1, AV_OPT_SEARCH_CHILDREN);
|
av_opt_set_int(context->priv_data, "cbr", 1, AV_OPT_SEARCH_CHILDREN);
|
||||||
break;
|
break;
|
||||||
case ratecontrolmode::VBR:
|
case ratecontrolmode::VBR:
|
||||||
|
@ -561,6 +567,7 @@ void nvenc::update(obs_data_t* settings, const AVCodec* codec, AVCodecContext* c
|
||||||
have_bitrate = true;
|
have_bitrate = true;
|
||||||
have_quality = true;
|
have_quality = true;
|
||||||
have_qp = true;
|
have_qp = true;
|
||||||
|
have_qp_limits = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -618,7 +625,7 @@ void nvenc::update(obs_data_t* settings, const AVCodec* codec, AVCodecContext* c
|
||||||
}
|
}
|
||||||
|
|
||||||
// Quality Limits
|
// Quality Limits
|
||||||
if (have_quality) {
|
if (have_qp_limits) {
|
||||||
if (int qmin = static_cast<int>(obs_data_get_int(settings, ST_KEY_RATECONTROL_QP_MINIMUM)); qmin > -1)
|
if (int qmin = static_cast<int>(obs_data_get_int(settings, ST_KEY_RATECONTROL_QP_MINIMUM)); qmin > -1)
|
||||||
context->qmin = qmin;
|
context->qmin = qmin;
|
||||||
if (int qmax = static_cast<int>(obs_data_get_int(settings, ST_KEY_RATECONTROL_QP_MAXIMUM)); qmax > -1)
|
if (int qmax = static_cast<int>(obs_data_get_int(settings, ST_KEY_RATECONTROL_QP_MAXIMUM)); qmax > -1)
|
||||||
|
@ -629,9 +636,13 @@ void nvenc::update(obs_data_t* settings, const AVCodec* codec, AVCodecContext* c
|
||||||
}
|
}
|
||||||
|
|
||||||
// Quality Target
|
// Quality Target
|
||||||
|
if (have_quality) {
|
||||||
if (double_t v = obs_data_get_double(settings, ST_KEY_RATECONTROL_LIMITS_QUALITY) / 100.0 * 51.0; v > 0) {
|
if (double_t v = obs_data_get_double(settings, ST_KEY_RATECONTROL_LIMITS_QUALITY) / 100.0 * 51.0; v > 0) {
|
||||||
av_opt_set_double(context->priv_data, "cq", v, AV_OPT_SEARCH_CHILDREN);
|
av_opt_set_double(context->priv_data, "cq", v, AV_OPT_SEARCH_CHILDREN);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
av_opt_set_double(context->priv_data, "cq", 0, AV_OPT_SEARCH_CHILDREN);
|
||||||
|
}
|
||||||
|
|
||||||
// QP Settings
|
// QP Settings
|
||||||
if (have_qp) {
|
if (have_qp) {
|
||||||
|
|
Loading…
Reference in a new issue