Skip to content

Commit c57da83

Browse files
RytoEXjp9000
authored andcommitted
obs-ffmpeg: Split NVENC preset migrations by codec
This commit also modifies UI.
1 parent 03cdd31 commit c57da83

File tree

2 files changed

+109
-4
lines changed

2 files changed

+109
-4
lines changed

UI/obs-app.cpp

Lines changed: 69 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2819,9 +2819,7 @@ static void convert_28_1_encoder_setting(const char *encoder, const char *file)
28192819
bool modified = false;
28202820

28212821
if (astrcmpi(encoder, "jim_nvenc") == 0 ||
2822-
astrcmpi(encoder, "jim_hevc_nvenc") == 0 ||
2823-
astrcmpi(encoder, "ffmpeg_nvenc") == 0 ||
2824-
astrcmpi(encoder, "ffmpeg_hevc_nvenc") == 0) {
2822+
astrcmpi(encoder, "ffmpeg_nvenc") == 0) {
28252823

28262824
if (obs_data_has_user_value(data, "preset") &&
28272825
!obs_data_has_user_value(data, "preset2")) {
@@ -2886,6 +2884,74 @@ static void convert_28_1_encoder_setting(const char *encoder, const char *file)
28862884
"disabled");
28872885
}
28882886

2887+
modified = true;
2888+
}
2889+
} else if (astrcmpi(encoder, "jim_hevc_nvenc") == 0 ||
2890+
astrcmpi(encoder, "ffmpeg_hevc_nvenc") == 0) {
2891+
2892+
if (obs_data_has_user_value(data, "preset") &&
2893+
!obs_data_has_user_value(data, "preset2")) {
2894+
const char *preset =
2895+
obs_data_get_string(data, "preset");
2896+
const char *rc =
2897+
obs_data_get_string(data, "rate_control");
2898+
2899+
if (astrcmpi(rc, "lossless") == 0 &&
2900+
astrcmpi(preset, "mq")) {
2901+
obs_data_set_string(data, "preset2", "p5");
2902+
obs_data_set_string(data, "tune", "lossless");
2903+
obs_data_set_string(data, "multipass",
2904+
"disabled");
2905+
2906+
} else if (astrcmpi(rc, "lossless") == 0 &&
2907+
astrcmpi(preset, "hp")) {
2908+
obs_data_set_string(data, "preset2", "p3");
2909+
obs_data_set_string(data, "tune", "lossless");
2910+
obs_data_set_string(data, "multipass",
2911+
"disabled");
2912+
2913+
} else if (astrcmpi(preset, "mq") == 0) {
2914+
obs_data_set_string(data, "preset2", "p6");
2915+
obs_data_set_string(data, "tune", "hq");
2916+
obs_data_set_string(data, "multipass", "qres");
2917+
2918+
} else if (astrcmpi(preset, "hq") == 0) {
2919+
obs_data_set_string(data, "preset2", "p6");
2920+
obs_data_set_string(data, "tune", "hq");
2921+
obs_data_set_string(data, "multipass",
2922+
"disabled");
2923+
2924+
} else if (astrcmpi(preset, "default") == 0) {
2925+
obs_data_set_string(data, "preset2", "p5");
2926+
obs_data_set_string(data, "tune", "hq");
2927+
obs_data_set_string(data, "multipass",
2928+
"disabled");
2929+
2930+
} else if (astrcmpi(preset, "hp") == 0) {
2931+
obs_data_set_string(data, "preset2", "p1");
2932+
obs_data_set_string(data, "tune", "hq");
2933+
obs_data_set_string(data, "multipass",
2934+
"disabled");
2935+
2936+
} else if (astrcmpi(preset, "ll") == 0) {
2937+
obs_data_set_string(data, "preset2", "p3");
2938+
obs_data_set_string(data, "tune", "ll");
2939+
obs_data_set_string(data, "multipass",
2940+
"disabled");
2941+
2942+
} else if (astrcmpi(preset, "llhq") == 0) {
2943+
obs_data_set_string(data, "preset2", "p4");
2944+
obs_data_set_string(data, "tune", "ll");
2945+
obs_data_set_string(data, "multipass",
2946+
"disabled");
2947+
2948+
} else if (astrcmpi(preset, "llhp") == 0) {
2949+
obs_data_set_string(data, "preset2", "p2");
2950+
obs_data_set_string(data, "tune", "ll");
2951+
obs_data_set_string(data, "multipass",
2952+
"disabled");
2953+
}
2954+
28892955
modified = true;
28902956
}
28912957
}

plugins/obs-ffmpeg/jim-nvenc.c

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,8 @@ static bool init_encoder_base(struct nvenc_data *enc, obs_data_t *settings,
461461
NV_ENC_MULTI_PASS nv_multipass = get_nv_multipass(multipass);
462462

463463
if (obs_data_has_user_value(settings, "preset") &&
464-
!obs_data_has_user_value(settings, "preset2")) {
464+
!obs_data_has_user_value(settings, "preset2") &&
465+
enc->codec == CODEC_H264) {
465466
if (astrcmpi(preset, "mq") == 0) {
466467
nv_preset = NV_ENC_PRESET_P5_GUID;
467468
nv_tuning = NV_ENC_TUNING_INFO_HIGH_QUALITY;
@@ -492,6 +493,44 @@ static bool init_encoder_base(struct nvenc_data *enc, obs_data_t *settings,
492493
nv_tuning = NV_ENC_TUNING_INFO_LOW_LATENCY;
493494
nv_multipass = NV_ENC_MULTI_PASS_DISABLED;
494495

496+
} else if (astrcmpi(preset, "llhp") == 0) {
497+
nv_preset = NV_ENC_PRESET_P2_GUID;
498+
nv_tuning = NV_ENC_TUNING_INFO_LOW_LATENCY;
499+
nv_multipass = NV_ENC_MULTI_PASS_DISABLED;
500+
}
501+
} else if (obs_data_has_user_value(settings, "preset") &&
502+
!obs_data_has_user_value(settings, "preset2") &&
503+
enc->codec == CODEC_HEVC) {
504+
if (astrcmpi(preset, "mq") == 0) {
505+
nv_preset = NV_ENC_PRESET_P6_GUID;
506+
nv_tuning = NV_ENC_TUNING_INFO_HIGH_QUALITY;
507+
nv_multipass = NV_ENC_TWO_PASS_QUARTER_RESOLUTION;
508+
509+
} else if (astrcmpi(preset, "hq") == 0) {
510+
nv_preset = NV_ENC_PRESET_P6_GUID;
511+
nv_tuning = NV_ENC_TUNING_INFO_HIGH_QUALITY;
512+
nv_multipass = NV_ENC_MULTI_PASS_DISABLED;
513+
514+
} else if (astrcmpi(preset, "default") == 0) {
515+
nv_preset = NV_ENC_PRESET_P5_GUID;
516+
nv_tuning = NV_ENC_TUNING_INFO_HIGH_QUALITY;
517+
nv_multipass = NV_ENC_MULTI_PASS_DISABLED;
518+
519+
} else if (astrcmpi(preset, "hp") == 0) {
520+
nv_preset = NV_ENC_PRESET_P1_GUID;
521+
nv_tuning = NV_ENC_TUNING_INFO_HIGH_QUALITY;
522+
nv_multipass = NV_ENC_MULTI_PASS_DISABLED;
523+
524+
} else if (astrcmpi(preset, "ll") == 0) {
525+
nv_preset = NV_ENC_PRESET_P3_GUID;
526+
nv_tuning = NV_ENC_TUNING_INFO_LOW_LATENCY;
527+
nv_multipass = NV_ENC_MULTI_PASS_DISABLED;
528+
529+
} else if (astrcmpi(preset, "llhq") == 0) {
530+
nv_preset = NV_ENC_PRESET_P4_GUID;
531+
nv_tuning = NV_ENC_TUNING_INFO_LOW_LATENCY;
532+
nv_multipass = NV_ENC_MULTI_PASS_DISABLED;
533+
495534
} else if (astrcmpi(preset, "llhp") == 0) {
496535
nv_preset = NV_ENC_PRESET_P2_GUID;
497536
nv_tuning = NV_ENC_TUNING_INFO_LOW_LATENCY;

0 commit comments

Comments
 (0)