From 4dcf40a4dd09fc9c531d4d97befbaf15dc0eafb4 Mon Sep 17 00:00:00 2001 From: Roel van Haandel Date: Wed, 29 Apr 2026 22:25:46 +0200 Subject: [PATCH 1/2] Fix: correct QSV and VAAPI hardware filter chains to prevent green screen corruption --- lib/encoders/qsv.py | 11 +++++------ lib/encoders/vaapi.py | 3 ++- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/encoders/qsv.py b/lib/encoders/qsv.py index 03043f5..3fbae17 100644 --- a/lib/encoders/qsv.py +++ b/lib/encoders/qsv.py @@ -254,9 +254,8 @@ def generate_filtergraphs(self, current_filter_args, smart_filters, encoder_name end_filter_args.append(",".join(end_chain)) else: # Pure HW path - frames stay in QSV memory - chain = [f"format={target_fmt}|qsv", - "hwupload=extra_hw_frames=64", - "format=qsv", f"vpp_qsv=format={target_fmt}"] + # We skip hwupload as it would attempt to upload hardware frames as software frames, causing corruption. + chain = ["format=qsv", f"vpp_qsv=format={target_fmt}"] end_filter_args.append(",".join(chain)) # Add the smart filters to the end @@ -318,7 +317,7 @@ def stream_args(self, stream_info, stream_id, encoder_name, filter_state=None): # Use default LA_ICQ mode encoder_args += [ '-global_quality', str(defaults.get('qsv_constant_quality_scale')), - '-look_ahead_depth', '100', '-extbrc', '1', + '-look_ahead_depth', '40', '-extbrc', '1', ] if encoder_name in ["h264_qsv"]: encoder_args += ['-look_ahead', '1'] @@ -352,7 +351,7 @@ def stream_args(self, stream_info, stream_id, encoder_name, filter_state=None): # They enable lookahead via "-look_ahead_depth " and "-extbrc 1" instead. if encoder_name in ["h264_qsv"]: encoder_args += ['-look_ahead', '1'] - encoder_args += ['-look_ahead_depth', '100', '-extbrc', '1'] + encoder_args += ['-look_ahead_depth', '40', '-extbrc', '1'] else: # Configure the QSV encoder with a bitrate-based mode # Set the max and average bitrate (used by all bitrate-based modes) @@ -361,7 +360,7 @@ def stream_args(self, stream_info, stream_id, encoder_name, filter_state=None): # Add lookahead if encoder_name in ["h264_qsv"]: encoder_args += ['-look_ahead', '1'] - encoder_args += ['-look_ahead_depth', '100', '-extbrc', '1'] + encoder_args += ['-look_ahead_depth', '40', '-extbrc', '1'] elif self.settings.get_setting('qsv_encoder_ratecontrol_method') == 'CBR': # Add 'maxrate' with the same value to make CBR mode encoder_args += ['-maxrate', f"{self.settings.get_setting('qsv_average_bitrate')}M"] diff --git a/lib/encoders/vaapi.py b/lib/encoders/vaapi.py index 88c4fd2..17f4d9b 100644 --- a/lib/encoders/vaapi.py +++ b/lib/encoders/vaapi.py @@ -219,7 +219,8 @@ def generate_filtergraphs(self, current_filter_args, smart_filters, encoder_name end_filter_args.append(",".join(end_chain)) else: # Pure HW path - frames stay in VAAPI memory - chain = [f"format={target_fmt}|vaapi", "hwupload"] + # We skip hwupload as it would attempt to upload hardware frames as software frames. + chain = ["format=vaapi"] end_filter_args.append(",".join(chain)) # Add the smart filters to the end From 813e280aed6d872a9dca27bd66888dfc8213036f Mon Sep 17 00:00:00 2001 From: Roel van Haandel Date: Wed, 29 Apr 2026 22:29:24 +0200 Subject: [PATCH 2/2] Chore: update author to DeRoelO in plugin metadata --- info.json | 2 +- lib/encoders/qsv.py | 2 +- lib/encoders/vaapi.py | 2 +- plugin.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/info.json b/info.json index 9c29d34..26205b7 100644 --- a/info.json +++ b/info.json @@ -1,5 +1,5 @@ { - "author": "Josh.5", + "author": "DeRoelO", "compatibility": [ 2 ], diff --git a/lib/encoders/qsv.py b/lib/encoders/qsv.py index 3fbae17..096afe5 100644 --- a/lib/encoders/qsv.py +++ b/lib/encoders/qsv.py @@ -4,7 +4,7 @@ """ plugins.qsv.py - Written by: Josh.5 + Written by: DeRoelO (Based on Josh.5) Date: 08 Jun 2022, (8:14 AM) Copyright: diff --git a/lib/encoders/vaapi.py b/lib/encoders/vaapi.py index 17f4d9b..3719393 100644 --- a/lib/encoders/vaapi.py +++ b/lib/encoders/vaapi.py @@ -5,7 +5,7 @@ """ plugins.vaapi.py - Written by: Josh.5 + Written by: DeRoelO (Based on Josh.5) Date: 08 Jun 2022, (8:15 AM) Copyright: diff --git a/plugin.py b/plugin.py index 4750346..ca43bc1 100644 --- a/plugin.py +++ b/plugin.py @@ -4,7 +4,7 @@ """ plugins.plugin.py - Written by: Josh.5 + Written by: DeRoelO (Based on Josh.5) Date: 4 June 2022, (6:08 PM) Copyright: