瀏覽代碼

obs-ffmpeg: Add FFmpeg Options for VA-API

David Rosca 2 年之前
父節點
當前提交
17cb966c62
共有 1 個文件被更改,包括 16 次插入2 次删除
  1. 16 2
      plugins/obs-ffmpeg/obs-ffmpeg-vaapi.c

+ 16 - 2
plugins/obs-ffmpeg/obs-ffmpeg-vaapi.c

@@ -29,6 +29,7 @@
 #ifdef ENABLE_HEVC
 #include <obs-hevc.h>
 #endif
+#include <opts-parser.h>
 
 #include <unistd.h>
 
@@ -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;
 }