diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-vaapi.c b/plugins/obs-ffmpeg/obs-ffmpeg-vaapi.c index 5829fb246..c5aa0128a 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-vaapi.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-vaapi.c @@ -29,6 +29,7 @@ #ifdef ENABLE_HEVC #include #endif +#include #include @@ -356,6 +357,14 @@ static bool vaapi_update(void *data, obs_data_t *settings, bool hevc) enc->height = enc->context->height; + const char *ffmpeg_opts = obs_data_get_string(settings, "ffmpeg_opts"); + struct obs_options opts = obs_parse_options(ffmpeg_opts); + for (size_t i = 0; i < opts.count; i++) { + struct obs_option *opt = &opts.options[i]; + av_opt_set(enc->context->priv_data, opt->name, opt->value, 0); + } + obs_free_options(opts); + info("settings:\n" "\tdevice: %s\n" "\trate_control: %s\n" @@ -367,10 +376,11 @@ static bool vaapi_update(void *data, obs_data_t *settings, bool hevc) "\tkeyint: %d\n" "\twidth: %d\n" "\theight: %d\n" - "\tb-frames: %d\n", + "\tb-frames: %d\n" + "\tffmpeg opts: %s\n", device, rate_control, profile, level, qp, bitrate, maxrate, enc->context->gop_size, enc->context->width, enc->context->height, - enc->context->max_b_frames); + enc->context->max_b_frames, ffmpeg_opts); return vaapi_init_codec(enc, device); } @@ -945,6 +955,10 @@ static obs_properties_t *vaapi_properties_internal(bool hevc) 20, 1); obs_property_int_set_suffix(p, " s"); + obs_properties_add_text(props, "ffmpeg_opts", + obs_module_text("FFmpegOpts"), + OBS_TEXT_DEFAULT); + return props; }