@ -5,7 +5,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
@@ -5,7 +5,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [Unreleased]
### Added
- Use VP9 and AV1 hardware-accelerated decoders with VAAPI when available
- Use AV1 hardware-accelerated decoder with VAAPI, QSV, NVIDIA when available
- Use VP9 hardware-accelerated decoder with VAAPI when available
### Fixed
- Align default docker image (no acceleration) with new images from [ErsatzTV-ffmpeg](https://github.com/jasongdove/ErsatzTV-ffmpeg)
@ -13,6 +14,7 @@ public class HardwareCapabilitiesFactory : IHardwareCapabilitiesFactory
@@ -13,6 +14,7 @@ public class HardwareCapabilitiesFactory : IHardwareCapabilitiesFactory
@ -23,18 +25,62 @@ public class HardwareCapabilitiesFactory : IHardwareCapabilitiesFactory
@@ -23,18 +25,62 @@ public class HardwareCapabilitiesFactory : IHardwareCapabilitiesFactory
@ -126,13 +172,19 @@ public class HardwareCapabilitiesFactory : IHardwareCapabilitiesFactory
@@ -126,13 +172,19 @@ public class HardwareCapabilitiesFactory : IHardwareCapabilitiesFactory
@ -169,7 +221,7 @@ public class HardwareCapabilitiesFactory : IHardwareCapabilitiesFactory
@@ -169,7 +221,7 @@ public class HardwareCapabilitiesFactory : IHardwareCapabilitiesFactory
@ -7,18 +8,26 @@ public class NvidiaHardwareCapabilities : IHardwareCapabilities
@@ -7,18 +8,26 @@ public class NvidiaHardwareCapabilities : IHardwareCapabilities
@ -38,18 +47,38 @@ public class NvidiaHardwareCapabilities : IHardwareCapabilities
@@ -38,18 +47,38 @@ public class NvidiaHardwareCapabilities : IHardwareCapabilities
@ -62,5 +91,18 @@ public class NvidiaHardwareCapabilities : IHardwareCapabilities
@@ -62,5 +91,18 @@ public class NvidiaHardwareCapabilities : IHardwareCapabilities
@ -15,11 +15,11 @@ public class VaapiHardwareCapabilities : IHardwareCapabilities
@@ -15,11 +15,11 @@ public class VaapiHardwareCapabilities : IHardwareCapabilities
@ -95,22 +95,22 @@ public class VaapiHardwareCapabilities : IHardwareCapabilities
@@ -95,22 +95,22 @@ public class VaapiHardwareCapabilities : IHardwareCapabilities
_=>false
};
if(!result)
if(!isHardware)
{
_logger.LogDebug(
"VAAPI does not support decoding {Format}/{Profile}, will use software decoder",
@ -142,7 +142,7 @@ public class VaapiHardwareCapabilities : IHardwareCapabilities
@@ -142,7 +142,7 @@ public class VaapiHardwareCapabilities : IHardwareCapabilities
_=>false
};
if(!result)
if(!isHardware)
{
_logger.LogDebug(
"VAAPI does not support encoding {Format} with bit depth {BitDepth}, will use software encoder",
@ -150,6 +150,6 @@ public class VaapiHardwareCapabilities : IHardwareCapabilities
@@ -150,6 +150,6 @@ public class VaapiHardwareCapabilities : IHardwareCapabilities
@ -17,7 +19,7 @@ public class VaapiHardwareAccelerationOption : GlobalOption
@@ -17,7 +19,7 @@ public class VaapiHardwareAccelerationOption : GlobalOption
@ -15,6 +15,7 @@ public class AmfPipelineBuilder : SoftwarePipelineBuilder
@@ -15,6 +15,7 @@ public class AmfPipelineBuilder : SoftwarePipelineBuilder
privatereadonlyILogger_logger;
publicAmfPipelineBuilder(
IFFmpegCapabilitiesffmpegCapabilities,
IHardwareCapabilitieshardwareCapabilities,
HardwareAccelerationModehardwareAccelerationMode,
Option<VideoInputFile>videoInputFile,
@ -24,6 +25,7 @@ public class AmfPipelineBuilder : SoftwarePipelineBuilder
@@ -24,6 +25,7 @@ public class AmfPipelineBuilder : SoftwarePipelineBuilder
stringreportsFolder,
stringfontsFolder,
ILoggerlogger):base(
ffmpegCapabilities,
hardwareAccelerationMode,
videoInputFile,
audioInputFile,
@ -44,11 +46,11 @@ public class AmfPipelineBuilder : SoftwarePipelineBuilder
@@ -44,11 +46,11 @@ public class AmfPipelineBuilder : SoftwarePipelineBuilder
@ -58,10 +60,10 @@ public class AmfPipelineBuilder : SoftwarePipelineBuilder
@@ -58,10 +60,10 @@ public class AmfPipelineBuilder : SoftwarePipelineBuilder
// disable hw accel if decoder/encoder isn't supported
@ -19,6 +19,7 @@ public class NvidiaPipelineBuilder : SoftwarePipelineBuilder
@@ -19,6 +19,7 @@ public class NvidiaPipelineBuilder : SoftwarePipelineBuilder
privatereadonlyILogger_logger;
publicNvidiaPipelineBuilder(
IFFmpegCapabilitiesffmpegCapabilities,
IHardwareCapabilitieshardwareCapabilities,
HardwareAccelerationModehardwareAccelerationMode,
Option<VideoInputFile>videoInputFile,
@ -28,6 +29,7 @@ public class NvidiaPipelineBuilder : SoftwarePipelineBuilder
@@ -28,6 +29,7 @@ public class NvidiaPipelineBuilder : SoftwarePipelineBuilder
stringreportsFolder,
stringfontsFolder,
ILoggerlogger):base(
ffmpegCapabilities,
hardwareAccelerationMode,
videoInputFile,
audioInputFile,
@ -48,11 +50,11 @@ public class NvidiaPipelineBuilder : SoftwarePipelineBuilder
@@ -48,11 +50,11 @@ public class NvidiaPipelineBuilder : SoftwarePipelineBuilder
@ -60,10 +62,10 @@ public class NvidiaPipelineBuilder : SoftwarePipelineBuilder
@@ -60,10 +62,10 @@ public class NvidiaPipelineBuilder : SoftwarePipelineBuilder
// mpeg2_cuvid seems to have issues when yadif_cuda is used, so just use software decoding
@ -71,10 +73,10 @@ public class NvidiaPipelineBuilder : SoftwarePipelineBuilder
@@ -71,10 +73,10 @@ public class NvidiaPipelineBuilder : SoftwarePipelineBuilder
// disable hw accel if decoder/encoder isn't supported
@ -97,6 +99,8 @@ public class NvidiaPipelineBuilder : SoftwarePipelineBuilder
@@ -97,6 +99,8 @@ public class NvidiaPipelineBuilder : SoftwarePipelineBuilder
@ -24,6 +26,7 @@ public abstract class PipelineBuilderBase : IPipelineBuilder
@@ -24,6 +26,7 @@ public abstract class PipelineBuilderBase : IPipelineBuilder
privatereadonlyILogger_logger;
protectedPipelineBuilderBase(
IFFmpegCapabilitiesffmpegCapabilities,
HardwareAccelerationModehardwareAccelerationMode,
Option<VideoInputFile>videoInputFile,
Option<AudioInputFile>audioInputFile,
@ -33,6 +36,7 @@ public abstract class PipelineBuilderBase : IPipelineBuilder
@@ -33,6 +36,7 @@ public abstract class PipelineBuilderBase : IPipelineBuilder
@ -218,7 +222,7 @@ public abstract class PipelineBuilderBase : IPipelineBuilder
@@ -218,7 +222,7 @@ public abstract class PipelineBuilderBase : IPipelineBuilder
returnnewFFmpegPipeline(pipelineSteps);
}
privateOption<IDecoder>LogUnknownDecoder(
privatevoidLogUnknownDecoder(
HardwareAccelerationModehardwareAccelerationMode,
stringvideoFormat,
stringpixelFormat)
@ -228,7 +232,6 @@ public abstract class PipelineBuilderBase : IPipelineBuilder
@@ -228,7 +232,6 @@ public abstract class PipelineBuilderBase : IPipelineBuilder
@ -428,29 +431,20 @@ public abstract class PipelineBuilderBase : IPipelineBuilder
@@ -428,29 +431,20 @@ public abstract class PipelineBuilderBase : IPipelineBuilder
@ -32,7 +32,10 @@ public class PipelineBuilderFactory : IPipelineBuilderFactory
@@ -32,7 +32,10 @@ public class PipelineBuilderFactory : IPipelineBuilderFactory
@ -41,6 +44,7 @@ public class PipelineBuilderFactory : IPipelineBuilderFactory
@@ -41,6 +44,7 @@ public class PipelineBuilderFactory : IPipelineBuilderFactory
@ -51,6 +55,7 @@ public class PipelineBuilderFactory : IPipelineBuilderFactory
@@ -51,6 +55,7 @@ public class PipelineBuilderFactory : IPipelineBuilderFactory
@ -61,6 +66,7 @@ public class PipelineBuilderFactory : IPipelineBuilderFactory
@@ -61,6 +66,7 @@ public class PipelineBuilderFactory : IPipelineBuilderFactory
@ -71,6 +77,7 @@ public class PipelineBuilderFactory : IPipelineBuilderFactory
@@ -71,6 +77,7 @@ public class PipelineBuilderFactory : IPipelineBuilderFactory
@ -81,6 +88,7 @@ public class PipelineBuilderFactory : IPipelineBuilderFactory
@@ -81,6 +88,7 @@ public class PipelineBuilderFactory : IPipelineBuilderFactory
@ -91,6 +99,7 @@ public class PipelineBuilderFactory : IPipelineBuilderFactory
@@ -91,6 +99,7 @@ public class PipelineBuilderFactory : IPipelineBuilderFactory
@ -19,6 +19,7 @@ public class QsvPipelineBuilder : SoftwarePipelineBuilder
@@ -19,6 +19,7 @@ public class QsvPipelineBuilder : SoftwarePipelineBuilder
privatereadonlyILogger_logger;
publicQsvPipelineBuilder(
IFFmpegCapabilitiesffmpegCapabilities,
IHardwareCapabilitieshardwareCapabilities,
HardwareAccelerationModehardwareAccelerationMode,
Option<VideoInputFile>videoInputFile,
@ -28,6 +29,7 @@ public class QsvPipelineBuilder : SoftwarePipelineBuilder
@@ -28,6 +29,7 @@ public class QsvPipelineBuilder : SoftwarePipelineBuilder
stringreportsFolder,
stringfontsFolder,
ILoggerlogger):base(
ffmpegCapabilities,
hardwareAccelerationMode,
videoInputFile,
audioInputFile,
@ -48,31 +50,33 @@ public class QsvPipelineBuilder : SoftwarePipelineBuilder
@@ -48,31 +50,33 @@ public class QsvPipelineBuilder : SoftwarePipelineBuilder
@ -13,6 +14,7 @@ public class SoftwarePipelineBuilder : PipelineBuilderBase
@@ -13,6 +14,7 @@ public class SoftwarePipelineBuilder : PipelineBuilderBase
privatereadonlyILogger_logger;
publicSoftwarePipelineBuilder(
IFFmpegCapabilitiesffmpegCapabilities,
HardwareAccelerationModehardwareAccelerationMode,
Option<VideoInputFile>videoInputFile,
Option<AudioInputFile>audioInputFile,
@ -21,6 +23,7 @@ public class SoftwarePipelineBuilder : PipelineBuilderBase
@@ -21,6 +23,7 @@ public class SoftwarePipelineBuilder : PipelineBuilderBase
@ -19,6 +19,7 @@ public class VaapiPipelineBuilder : SoftwarePipelineBuilder
@@ -19,6 +19,7 @@ public class VaapiPipelineBuilder : SoftwarePipelineBuilder
privatereadonlyILogger_logger;
publicVaapiPipelineBuilder(
IFFmpegCapabilitiesffmpegCapabilities,
IHardwareCapabilitieshardwareCapabilities,
HardwareAccelerationModehardwareAccelerationMode,
Option<VideoInputFile>videoInputFile,
@ -28,6 +29,7 @@ public class VaapiPipelineBuilder : SoftwarePipelineBuilder
@@ -28,6 +29,7 @@ public class VaapiPipelineBuilder : SoftwarePipelineBuilder
stringreportsFolder,
stringfontsFolder,
ILoggerlogger):base(
ffmpegCapabilities,
hardwareAccelerationMode,
videoInputFile,
audioInputFile,
@ -48,18 +50,18 @@ public class VaapiPipelineBuilder : SoftwarePipelineBuilder
@@ -48,18 +50,18 @@ public class VaapiPipelineBuilder : SoftwarePipelineBuilder
@ -70,16 +72,16 @@ public class VaapiPipelineBuilder : SoftwarePipelineBuilder
@@ -70,16 +72,16 @@ public class VaapiPipelineBuilder : SoftwarePipelineBuilder
// use software decoding with an extensive pipeline
@ -16,6 +16,7 @@ public class VideoToolboxPipelineBuilder : SoftwarePipelineBuilder
@@ -16,6 +16,7 @@ public class VideoToolboxPipelineBuilder : SoftwarePipelineBuilder
privatereadonlyILogger_logger;
publicVideoToolboxPipelineBuilder(
IFFmpegCapabilitiesffmpegCapabilities,
IHardwareCapabilitieshardwareCapabilities,
HardwareAccelerationModehardwareAccelerationMode,
Option<VideoInputFile>videoInputFile,
@ -25,6 +26,7 @@ public class VideoToolboxPipelineBuilder : SoftwarePipelineBuilder
@@ -25,6 +26,7 @@ public class VideoToolboxPipelineBuilder : SoftwarePipelineBuilder
stringreportsFolder,
stringfontsFolder,
ILoggerlogger):base(
ffmpegCapabilities,
hardwareAccelerationMode,
videoInputFile,
audioInputFile,
@ -45,11 +47,11 @@ public class VideoToolboxPipelineBuilder : SoftwarePipelineBuilder
@@ -45,11 +47,11 @@ public class VideoToolboxPipelineBuilder : SoftwarePipelineBuilder
@ -59,10 +61,10 @@ public class VideoToolboxPipelineBuilder : SoftwarePipelineBuilder
@@ -59,10 +61,10 @@ public class VideoToolboxPipelineBuilder : SoftwarePipelineBuilder
// disable hw accel if decoder/encoder isn't supported