diff --git a/CHANGELOG.md b/CHANGELOG.md index 66e2d8543..3c32f8d99 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -94,6 +94,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Fix scheduling loop/failure caused by some duration schedule items - Fix `video_bit_depth` search field for Plex media - Fix template and deco template editors with MariaDB/MySql backend +- Fix transcoding 10-bit source content using QSV acceleration on Windows ### Changed - Show health checks at top of home page; scroll release notes if needed diff --git a/ErsatzTV.FFmpeg/Pipeline/QsvPipelineBuilder.cs b/ErsatzTV.FFmpeg/Pipeline/QsvPipelineBuilder.cs index 5f9b0f091..44ecf74ea 100644 --- a/ErsatzTV.FFmpeg/Pipeline/QsvPipelineBuilder.cs +++ b/ErsatzTV.FFmpeg/Pipeline/QsvPipelineBuilder.cs @@ -572,11 +572,18 @@ public class QsvPipelineBuilder : SoftwarePipelineBuilder { IPipelineFilterStep scaleStep; - if (currentState.ScaledSize != desiredState.ScaledSize && ffmpegState is - { - DecoderHardwareAccelerationMode: HardwareAccelerationMode.None, - EncoderHardwareAccelerationMode: HardwareAccelerationMode.None - } && context is { HasWatermark: false, HasSubtitleOverlay: false, ShouldDeinterlace: false }) + bool useSoftwareFilter = ffmpegState is + { + DecoderHardwareAccelerationMode: HardwareAccelerationMode.None, + EncoderHardwareAccelerationMode: HardwareAccelerationMode.None + } && context is { HasWatermark: false, HasSubtitleOverlay: false, ShouldDeinterlace: false }; + + // auto_scale filter seems to muck up 10-bit software decode => hardware scale, so use software scale in that case + useSoftwareFilter = useSoftwareFilter || + (ffmpegState is { DecoderHardwareAccelerationMode: HardwareAccelerationMode.None } && + OperatingSystem.IsWindows() && currentState.BitDepth == 10); + + if (currentState.ScaledSize != desiredState.ScaledSize && useSoftwareFilter) { scaleStep = new ScaleFilter( currentState,