diff --git a/docs/configuration.md b/docs/configuration.md index 662a07f1994..3d3868374c4 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -2891,6 +2891,35 @@ editing the `conf` file in a text editor. Use the examples as reference. +### vaapi_async_depth + + + + + + + + + + + + + + + + + + +
Description + Number of frames to queue in the GPU. + @warning{Higher values help FPS stability under GPU load, + but may slightly increase latency.} +
Default@code{} + 1 + @endcode
Range1-64
Example@code{} + vaapi_async_depth = 4 + @endcode
+ ## Software Encoder ### sw_preset diff --git a/src/config.cpp b/src/config.cpp index c320ed6dccf..b9b6f2af57d 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -484,6 +484,7 @@ namespace config { { false, // strict_rc_buffer + 1, // async_depth }, // vaapi {}, // capture @@ -1115,6 +1116,7 @@ namespace config { int_f(vars, "vt_realtime", video.vt.vt_realtime, vt::rt_from_view); bool_f(vars, "vaapi_strict_rc_buffer", video.vaapi.strict_rc_buffer); + int_f(vars, "vaapi_async_depth", video.vaapi.async_depth); string_f(vars, "capture", video.capture); string_f(vars, "encoder", video.encoder); diff --git a/src/config.h b/src/config.h index e8d1594fba2..3be248e50f4 100644 --- a/src/config.h +++ b/src/config.h @@ -78,6 +78,7 @@ namespace config { struct { bool strict_rc_buffer; + int async_depth; } vaapi; std::string capture; diff --git a/src/platform/linux/vaapi.cpp b/src/platform/linux/vaapi.cpp index 21f0b354517..f1c7446b8bb 100644 --- a/src/platform/linux/vaapi.cpp +++ b/src/platform/linux/vaapi.cpp @@ -251,6 +251,8 @@ namespace va { BOOST_LOG(info) << "Using normal encoding mode"sv; } + av_dict_set_int(options, "async_depth", config::video.vaapi.async_depth, 0); + VAConfigAttrib rc_attr = {VAConfigAttribRateControl}; auto status = vaGetConfigAttributes(va_display, va_profile, va_entrypoint, &rc_attr, 1); if (status != VA_STATUS_SUCCESS) { diff --git a/src_assets/common/assets/web/config.html b/src_assets/common/assets/web/config.html index 222fba0eccd..5772be48209 100644 --- a/src_assets/common/assets/web/config.html +++ b/src_assets/common/assets/web/config.html @@ -327,6 +327,7 @@

{{ $t('config.configuration') }}

id: "vaapi", name: "VA-API Encoder", options: { + "vaapi_async_depth": "1", "vaapi_strict_rc_buffer": "disabled", }, }, diff --git a/src_assets/common/assets/web/configs/tabs/encoders/VAAPIEncoder.vue b/src_assets/common/assets/web/configs/tabs/encoders/VAAPIEncoder.vue index 063bba45b50..bb5ac0a051c 100644 --- a/src_assets/common/assets/web/configs/tabs/encoders/VAAPIEncoder.vue +++ b/src_assets/common/assets/web/configs/tabs/encoders/VAAPIEncoder.vue @@ -19,6 +19,16 @@ const config = ref(props.config) v-model="config.vaapi_strict_rc_buffer" default="false" > + + +
+ + +
+ {{ $t('config.vaapi_async_depth_desc') }} +
+
diff --git a/src_assets/common/assets/web/public/assets/locale/en.json b/src_assets/common/assets/web/public/assets/locale/en.json index 7c611e6614c..fc608c4b482 100644 --- a/src_assets/common/assets/web/public/assets/locale/en.json +++ b/src_assets/common/assets/web/public/assets/locale/en.json @@ -371,6 +371,8 @@ "touchpad_as_ds4_desc": "If disabled, touchpad presence will not be taken into account during gamepad type selection.", "upnp": "UPnP", "upnp_desc": "Automatically configure port forwarding for streaming over the Internet", + "vaapi_async_depth": "VA-API Async Depth", + "vaapi_async_depth_desc": "Number of frames to queue in the GPU. Higher values help FPS stability under GPU load, but may slightly increase latency.", "vaapi_strict_rc_buffer": "Strictly enforce frame bitrate limits for H.264/HEVC on AMD GPUs", "vaapi_strict_rc_buffer_desc": "Enabling this option can avoid dropped frames over the network during scene changes, but video quality may be reduced during motion.", "virtual_sink": "Virtual Sink",