diff --git a/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_VideoEncodeTests.cs b/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_VideoEncodeTests.cs index c27cd63e..796a02f0 100644 --- a/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_VideoEncodeTests.cs +++ b/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_VideoEncodeTests.cs @@ -78,6 +78,69 @@ public class FfmpegBuilder_VideoEncode_VideoEncodeTests: TestBase public void FfmpegBuilder_VideoEncode_H264() => TestEncode(false, false, false); [TestMethod] public void FfmpegBuilder_VideoEncode_H264_10bit() => TestEncode(false, false, true); + + + [TestMethod] + public void FfmpegBuilder_VideoEncode_FailIfNoHardware() + { + var logger = new TestLogger(); + const string ffmpeg = @"C:\utils\ffmpeg\ffmpeg.exe"; + var vi = new VideoInfoHelper(ffmpeg, logger); + var vii = vi.Read(TestFile_120_mbps_4k_uhd_hevc_10bit); + var args = new NodeParameters(TestFile_50_mbps_hd_h264, logger, false, string.Empty); + args.GetToolPathActual = (string tool) => ffmpeg; + args.TempPath = @"D:\videos\temp"; + args.Parameters.Add("VideoInfo", vii); + + + FfmpegBuilderStart ffStart = new(); + ffStart.PreExecute(args); + Assert.AreEqual(1, ffStart.Execute(args)); + + FfmpegBuilderVideoCodec ffCodec = new(); + ffCodec.VideoCodec = "h265"; + ffCodec.VideoCodecParameters = "hevc_qsv"; + ffCodec.PreExecute(args); + ffCodec.Execute(args); + + FfmpegBuilderExecutor ffExecutor = new(); + ffExecutor.PreExecute(args); + int result = ffExecutor.Execute(args); + string log = logger.ToString(); + Assert.AreEqual(-1, result); + + } + + [TestMethod] + public void FfmpegBuilder_VideoEncode_AutoUseHardware() + { + var logger = new TestLogger(); + const string ffmpeg = @"C:\utils\ffmpeg\ffmpeg.exe"; + var vi = new VideoInfoHelper(ffmpeg, logger); + var vii = vi.Read(TestFile_120_mbps_4k_uhd_hevc_10bit); + var args = new NodeParameters(TestFile_50_mbps_hd_h264, logger, false, string.Empty); + args.GetToolPathActual = (string tool) => ffmpeg; + args.TempPath = @"D:\videos\temp"; + args.Parameters.Add("VideoInfo", vii); + + + FfmpegBuilderStart ffStart = new(); + ffStart.PreExecute(args); + Assert.AreEqual(1, ffStart.Execute(args)); + + FfmpegBuilderVideoCodec ffCodec = new(); + ffCodec.VideoCodec = "h265"; + ffCodec.VideoCodecParameters = "h265"; + ffCodec.PreExecute(args); + ffCodec.Execute(args); + + FfmpegBuilderExecutor ffExecutor = new(); + ffExecutor.PreExecute(args); + int result = ffExecutor.Execute(args); + string log = logger.ToString(); + Assert.AreEqual(1, result); + + } } #endif \ No newline at end of file diff --git a/VideoNodes/VideoNodes/EncodingNode.cs b/VideoNodes/VideoNodes/EncodingNode.cs index 9fd48e6c..cb5261d1 100644 --- a/VideoNodes/VideoNodes/EncodingNode.cs +++ b/VideoNodes/VideoNodes/EncodingNode.cs @@ -106,55 +106,58 @@ namespace FileFlows.VideoNodes return "libx264"; } - if (vidparams.ToLower().Contains("hevc_nvenc")) - { - // nvidia h265 encoding, check can - bool canProcess = CanUseHardwareEncoding.CanProcess(Args, ffmpeg, vidparams); - if (canProcess == false) - { - // change to cpu encoding - Args.Logger?.ILog("Can't encode using hevc_nvenc, falling back to CPU encoding H265 (libx265)"); - return "libx265"; - } - return vidparams; - } - else if (vidparams.ToLower().Contains("h264_nvenc")) - { - // nvidia h264 encoding, check can - bool canProcess = CanUseHardwareEncoding.CanProcess(Args, ffmpeg, vidparams); - if (canProcess == false) - { - // change to cpu encoding - Args.Logger?.ILog("Can't encode using h264_nvenc, falling back to CPU encoding H264 (libx264)"); - return "libx264"; - } - return vidparams; - } - else if (vidparams.ToLower().Contains("hevc_qsv")) - { - // nvidia h265 encoding, check can - bool canProcess = CanUseHardwareEncoding.CanProcess(Args, ffmpeg, vidparams); - if (canProcess == false) - { - // change to cpu encoding - Args.Logger?.ILog("Can't encode using hevc_qsv, falling back to CPU encoding H265 (libx265)"); - return "libx265"; - } - return vidparams; - } - else if (vidparams.ToLower().Contains("h264_qsv")) - { - // nvidia h264 encoding, check can - bool canProcess = CanUseHardwareEncoding.CanProcess(Args, ffmpeg, vidparams); - if (canProcess == false) - { - // change to cpu encoding - Args.Logger?.ILog("Can't encode using h264_qsv, falling back to CPU encoding H264 (libx264)"); - return "libx264"; - } - return vidparams; - } return vidparams; + + // no longer do this + //if (vidparams.ToLower().Contains("hevc_nvenc")) + //{ + // // nvidia h265 encoding, check can + // bool canProcess = CanUseHardwareEncoding.CanProcess(Args, ffmpeg, vidparams); + // if (canProcess == false) + // { + // // change to cpu encoding + // Args.Logger?.ILog("Can't encode using hevc_nvenc, falling back to CPU encoding H265 (libx265)"); + // return "libx265"; + // } + // return vidparams; + //} + //else if (vidparams.ToLower().Contains("h264_nvenc")) + //{ + // // nvidia h264 encoding, check can + // bool canProcess = CanUseHardwareEncoding.CanProcess(Args, ffmpeg, vidparams); + // if (canProcess == false) + // { + // // change to cpu encoding + // Args.Logger?.ILog("Can't encode using h264_nvenc, falling back to CPU encoding H264 (libx264)"); + // return "libx264"; + // } + // return vidparams; + //} + //else if (vidparams.ToLower().Contains("hevc_qsv")) + //{ + // // nvidia h265 encoding, check can + // bool canProcess = CanUseHardwareEncoding.CanProcess(Args, ffmpeg, vidparams); + // if (canProcess == false) + // { + // // change to cpu encoding + // Args.Logger?.ILog("Can't encode using hevc_qsv, falling back to CPU encoding H265 (libx265)"); + // return "libx265"; + // } + // return vidparams; + //} + //else if (vidparams.ToLower().Contains("h264_qsv")) + //{ + // // nvidia h264 encoding, check can + // bool canProcess = CanUseHardwareEncoding.CanProcess(Args, ffmpeg, vidparams); + // if (canProcess == false) + // { + // // change to cpu encoding + // Args.Logger?.ILog("Can't encode using h264_qsv, falling back to CPU encoding H264 (libx264)"); + // return "libx264"; + // } + // return vidparams; + //} + //return vidparams; } public bool HasNvidiaCard(string ffmpeg)