fixing hardware decoding and added unit test

This commit is contained in:
John Andrews
2022-04-25 13:06:52 +12:00
parent b0fc1ccea4
commit 47ca14e259
3 changed files with 80 additions and 40 deletions

View File

@@ -22,10 +22,6 @@ namespace FileFlows.VideoNodes.FfmpegBuilderNodes
var model = this.Model;
List<string> ffArgs = new List<string>();
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",

View File

@@ -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);
}
}
}

View File

@@ -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<VideoMetadata>(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<VideoMetadata>(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
//#endif