From 11e0bad4f38107e464faecd8d04b8ec86b8c3a06 Mon Sep 17 00:00:00 2001 From: Yukino Song Date: Sat, 26 Oct 2024 21:31:28 +0800 Subject: [PATCH] Add option for intra refresh (resolves #86) --- src/config.cpp | 1 + src/nvenc/nvenc_base.cpp | 12 ++++++++---- src/nvenc/nvenc_config.h | 3 +++ src_assets/common/assets/web/Navbar.vue | 2 +- src_assets/common/assets/web/config.html | 1 + .../web/configs/tabs/encoders/NvidiaNvencEncoder.vue | 10 ++++++++++ .../common/assets/web/public/assets/locale/en.json | 2 ++ .../common/assets/web/public/assets/locale/zh.json | 2 ++ 8 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/config.cpp b/src/config.cpp index 5361b364..61deef7c 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -1008,6 +1008,7 @@ namespace config { bool_f(vars, "nvenc_spatial_aq", video.nv.adaptive_quantization); generic_f(vars, "nvenc_twopass", video.nv.two_pass, nv::twopass_from_view); bool_f(vars, "nvenc_h264_cavlc", video.nv.h264_cavlc); + bool_f(vars, "nvenc_intra_refresh", video.nv.intra_refresh); bool_f(vars, "nvenc_realtime_hags", video.nv_realtime_hags); bool_f(vars, "nvenc_opengl_vulkan_on_dxgi", video.nv_opengl_vulkan_on_dxgi); bool_f(vars, "nvenc_latency_over_power", video.nv_sunshine_high_power_mode); diff --git a/src/nvenc/nvenc_base.cpp b/src/nvenc/nvenc_base.cpp index 0f4f1e64..b2fa8ad3 100644 --- a/src/nvenc/nvenc_base.cpp +++ b/src/nvenc/nvenc_base.cpp @@ -321,10 +321,14 @@ namespace nvenc { set_ref_frames(format_config.maxNumRefFramesInDPB, format_config.numRefL0, 5); set_minqp_if_enabled(config.min_qp_hevc); fill_h264_hevc_vui(format_config.hevcVUIParameters); - format_config.enableIntraRefresh = 1; - format_config.singleSliceIntraRefresh = 1; - format_config.intraRefreshPeriod = 300; - format_config.intraRefreshCnt = 299; + + if (config.intra_refresh) { + format_config.enableIntraRefresh = 1; + format_config.singleSliceIntraRefresh = 1; + format_config.intraRefreshPeriod = 300; + format_config.intraRefreshCnt = 299; + } + break; } diff --git a/src/nvenc/nvenc_config.h b/src/nvenc/nvenc_config.h index 213a0d28..96519ad1 100644 --- a/src/nvenc/nvenc_config.h +++ b/src/nvenc/nvenc_config.h @@ -48,6 +48,9 @@ namespace nvenc { // Add filler data to encoded frames to stay at target bitrate, mainly for testing bool insert_filler_data = false; + + // Intra refresh for clients that doesn't request keyframe correctly + bool intra_refresh = false; }; } // namespace nvenc diff --git a/src_assets/common/assets/web/Navbar.vue b/src_assets/common/assets/web/Navbar.vue index 9ec81fc2..cb058d26 100644 --- a/src_assets/common/assets/web/Navbar.vue +++ b/src_assets/common/assets/web/Navbar.vue @@ -2,7 +2,7 @@