From 47ca14e2597a1b645455185b9ca0f8a77bb51096 Mon Sep 17 00:00:00 2001 From: John Andrews Date: Mon, 25 Apr 2022 13:06:52 +1200 Subject: [PATCH] fixing hardware decoding and added unit test --- .../FfmpegBuilderExecutor.cs | 13 ++-- .../FfmpegBuilder_BasicTests.cs | 37 ++++++++++ .../FfmpegBuilder_MetadataTests.cs | 70 +++++++++---------- 3 files changed, 80 insertions(+), 40 deletions(-) diff --git a/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderExecutor.cs b/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderExecutor.cs index 0e9f1411..36b3e326 100644 --- a/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderExecutor.cs +++ b/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderExecutor.cs @@ -22,10 +22,6 @@ namespace FileFlows.VideoNodes.FfmpegBuilderNodes var model = this.Model; List ffArgs = new List(); ffArgs.AddRange(new[] { "-strict", "-2" }); // allow experimental stuff - if (HardwareDecoding) - { - ffArgs.AddRange(GetHardwareDecodingArgs()); - } bool hasChange = false; int actualIndex = 0; int currentType = 0; @@ -66,7 +62,13 @@ namespace FileFlows.VideoNodes.FfmpegBuilderNodes else model.InputFiles[0] = args.WorkingFile; - foreach(string file in model.InputFiles) + + if (HardwareDecoding) + { + startArgs.AddRange(GetHardwareDecodingArgs()); + } + + foreach (string file in model.InputFiles) { startArgs.Add("-i"); startArgs.Add(file); @@ -91,6 +93,7 @@ namespace FileFlows.VideoNodes.FfmpegBuilderNodes { var result = args.Execute(new ExecuteArgs { + Command = ffmpegExe, ArgumentList = new[] { "-y", diff --git a/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_BasicTests.cs b/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_BasicTests.cs index 95f38714..b500103f 100644 --- a/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_BasicTests.cs +++ b/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_BasicTests.cs @@ -776,6 +776,43 @@ namespace FileFlows.VideoNodes.Tests.FfmpegBuilderTests string log = logger.ToString(); Assert.AreEqual(1, result); } + + + [TestMethod] + public void FfmpegBuilder_HardwareDecoding() + { + const string file = @"D:\videos\unprocessed\basic.mkv"; + var logger = new TestLogger(); + const string ffmpeg = @"C:\utils\ffmpeg\ffmpeg.exe"; + var vi = new VideoInfoHelper(ffmpeg, logger); + var vii = vi.Read(file); + var args = new NodeParameters(file, logger, false, string.Empty); + args.GetToolPathActual = (string tool) => ffmpeg; + args.TempPath = @"D:\videos\temp"; + args.Parameters.Add("VideoInfo", vii); + + + FfmpegBuilderStart ffStart = new(); + Assert.AreEqual(1, ffStart.Execute(args)); + + FfmpegBuilderVideoCodec ffEncode = new(); + ffEncode.VideoCodec = "h264"; + ffEncode.Execute(args); + + + FfmpegBuilderAudioAddTrack ffAddAudio = new(); + ffAddAudio.Codec = "ac3"; + ffAddAudio.Index = 0; + ffAddAudio.Execute(args); + + FfmpegBuilderExecutor ffExecutor = new(); + ffExecutor.HardwareDecoding = true; + int result = ffExecutor.Execute(args); + + string log = logger.ToString(); + Assert.AreEqual(1, result); + } + } } diff --git a/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_MetadataTests.cs b/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_MetadataTests.cs index d60d9efa..99fca048 100644 --- a/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_MetadataTests.cs +++ b/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_MetadataTests.cs @@ -1,44 +1,44 @@ -#if(DEBUG) +//#if(DEBUG) -using FileFlows.VideoNodes.FfmpegBuilderNodes; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using VideoNodes.Tests; +//using FileFlows.VideoNodes.FfmpegBuilderNodes; +//using Microsoft.VisualStudio.TestTools.UnitTesting; +//using VideoNodes.Tests; -namespace FileFlows.VideoNodes.Tests.FfmpegBuilderTests -{ - [TestClass] - public class FfmpegBuilder_MetadataTests - { - [TestMethod] - public void FfmpegBuilder_MetadataJson() - { - const string file = @"D:\videos\unprocessed\basic.mkv"; - var logger = new TestLogger(); - const string ffmpeg = @"C:\utils\ffmpeg\ffmpeg.exe"; - var vi = new VideoInfoHelper(ffmpeg, logger); - var vii = vi.Read(file); - var args = new NodeParameters(file, logger, false, string.Empty); - VideoMetadata md = System.Text.Json.JsonSerializer.Deserialize(File.ReadAllText(@"D:\videos\metadata.json")); - args.Variables.Add("VideoMetadata", md); - args.GetToolPathActual = (string tool) => ffmpeg; - args.TempPath = @"D:\videos\temp"; - args.Parameters.Add("VideoInfo", vii); +//namespace FileFlows.VideoNodes.Tests.FfmpegBuilderTests +//{ +// [TestClass] +// public class FfmpegBuilder_MetadataTests +// { +// [TestMethod] +// public void FfmpegBuilder_MetadataJson() +// { +// const string file = @"D:\videos\unprocessed\basic.mkv"; +// var logger = new TestLogger(); +// const string ffmpeg = @"C:\utils\ffmpeg\ffmpeg.exe"; +// var vi = new VideoInfoHelper(ffmpeg, logger); +// var vii = vi.Read(file); +// var args = new NodeParameters(file, logger, false, string.Empty); +// VideoMetadata md = System.Text.Json.JsonSerializer.Deserialize(File.ReadAllText(@"D:\videos\metadata.json")); +// args.Variables.Add("VideoMetadata", md); +// args.GetToolPathActual = (string tool) => ffmpeg; +// args.TempPath = @"D:\videos\temp"; +// args.Parameters.Add("VideoInfo", vii); - FfmpegBuilderStart ffStart = new (); - Assert.AreEqual(1, ffStart.Execute(args)); +// FfmpegBuilderStart ffStart = new (); +// Assert.AreEqual(1, ffStart.Execute(args)); - FfmpegBuilderVideoMetadata ffMetadata = new(); - Assert.AreEqual(1, ffMetadata.Execute(args)); +// FfmpegBuilderVideoMetadata ffMetadata = new(); +// Assert.AreEqual(1, ffMetadata.Execute(args)); - FfmpegBuilderExecutor ffExecutor = new(); - int result = ffExecutor.Execute(args); +// FfmpegBuilderExecutor ffExecutor = new(); +// int result = ffExecutor.Execute(args); - string log = logger.ToString(); - Assert.AreEqual(1, result); - } - } -} +// string log = logger.ToString(); +// Assert.AreEqual(1, result); +// } +// } +//} -#endif \ No newline at end of file +//#endif \ No newline at end of file