mirror of
https://github.com/Xaymar/obs-StreamFX
synced 2024-11-11 06:15:05 +00:00
ffmpeg-encoder/nvenc: Test for "h264_nvenc" in for "Adaptive B-Frames"
Fixes the bug where "Adaptive B-Frames" would not be applied in the way it was expected to be applied. Related: #191
This commit is contained in:
parent
fb024cad73
commit
0966b61f76
1 changed files with 11 additions and 18 deletions
|
@ -584,27 +584,20 @@ void nvenc::update(obs_data_t* settings, const AVCodec* codec, AVCodecContext* c
|
||||||
av_opt_set_int(context->priv_data, "rc-lookahead", la, AV_OPT_SEARCH_CHILDREN);
|
av_opt_set_int(context->priv_data, "rc-lookahead", la, AV_OPT_SEARCH_CHILDREN);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (la > 0) {
|
|
||||||
// Adaptive I-Frames
|
// Adaptive I-Frames
|
||||||
if (int64_t adapt_i = obs_data_get_int(settings, KEY_RATECONTROL_ADAPTIVEI);
|
if (int64_t adapt_i = obs_data_get_int(settings, KEY_RATECONTROL_ADAPTIVEI);
|
||||||
!util::is_tristate_default(adapt_i)) {
|
!util::is_tristate_default(adapt_i) && (la != 0)) {
|
||||||
av_opt_set_int(context->priv_data, "no-scenecut", adapt_i, AV_OPT_SEARCH_CHILDREN);
|
av_opt_set_int(context->priv_data, "no-scenecut", adapt_i, AV_OPT_SEARCH_CHILDREN);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Adaptive B-Frames
|
// Adaptive B-Frames
|
||||||
if (strcmp(codec->name, "h264_nvenc")) {
|
constexpr std::string_view h264_encoder_name = "h264_nvenc";
|
||||||
|
if (h264_encoder_name == codec->name) {
|
||||||
if (int64_t adapt_b = obs_data_get_int(settings, KEY_RATECONTROL_ADAPTIVEB);
|
if (int64_t adapt_b = obs_data_get_int(settings, KEY_RATECONTROL_ADAPTIVEB);
|
||||||
!util::is_tristate_default(adapt_b)) {
|
!util::is_tristate_default(adapt_b) && (la != 0)) {
|
||||||
av_opt_set_int(context->priv_data, "b_adapt", adapt_b, AV_OPT_SEARCH_CHILDREN);
|
av_opt_set_int(context->priv_data, "b_adapt", adapt_b, AV_OPT_SEARCH_CHILDREN);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
// These two do not work if lookahead is set to 0 frames (disabled).
|
|
||||||
av_opt_set_int(context->priv_data, "no-scenecut", 0, AV_OPT_SEARCH_CHILDREN);
|
|
||||||
if (strcmp(codec->name, "h264_nvenc")) {
|
|
||||||
av_opt_set_int(context->priv_data, "b_adapt", 0, AV_OPT_SEARCH_CHILDREN);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (have_bitrate) {
|
if (have_bitrate) {
|
||||||
int64_t v = obs_data_get_int(settings, KEY_RATECONTROL_BITRATE_TARGET);
|
int64_t v = obs_data_get_int(settings, KEY_RATECONTROL_BITRATE_TARGET);
|
||||||
|
|
Loading…
Reference in a new issue