From 5899c72ac315b67a577ea802d70b5d0f70fbe485 Mon Sep 17 00:00:00 2001 From: John Andrews Date: Sat, 13 Jul 2024 10:43:14 +1200 Subject: [PATCH] FF-1668: New Flow Element set device --- FileFlows.Plugin.dll | Bin 146944 -> 146944 bytes FileFlows.Plugin.pdb | Bin 36360 -> 36360 bytes .../EncoderAdjustments/EncoderAdjustment.cs | 7 ++-- .../EncoderAdjustments/IEncoderAdjustment.cs | 14 +++++++- .../EncoderAdjustments/VaapiAdjustments.cs | 24 ++++++++++--- .../FfmpegBuilderExecutor.cs | 9 ++--- .../FfmpegBuilderSetDevice.cs | 32 ++++++++++++++++++ .../FfmpegBuilderNodes/Models/FfmpegModel.cs | 5 +++ .../FFmpegBuilderVideoBitrateEncode/AV1.cs | 14 +++++--- .../FfmpegBuilderVideoBitrateEncode.cs | 12 +++---- .../Video/FfmpegBuilderVideoEncode/AV1.cs | 14 +++++--- .../FfmpegBuilderVideoEncode.cs | 12 +++---- VideoNodes/LogicalNodes/VideoHasErrors.cs | 2 +- VideoNodes/Tests/VaapiAdjustmentTests.cs | 5 +-- VideoNodes/i18n/en.json | 11 ++++++ 15 files changed, 126 insertions(+), 35 deletions(-) create mode 100644 VideoNodes/FfmpegBuilderNodes/FfmpegBuilderSetDevice.cs diff --git a/FileFlows.Plugin.dll b/FileFlows.Plugin.dll index b0766dbc090c0a7f24ec5bf44e9f8b05c8b2343e..3f23b395271b79e437074af39dc124f9292dd35d 100644 GIT binary patch delta 250 zcmZqp!_n}EV?qbZmILZ58hcuM7`OH?eUKAaJL%Z3y*cX~ro5lgdry3d!}cC|rZvJE z=1B&IX(=gYM#(0rmX;|dh9)USNrvX;2FB*8hDPQFiH2zg7C<%I6O5TAFtX(BxiNS8 z7Zauc0R{!9+w0fVdC%5k^Egvk@N0UADU-bdRJ2$ED)mcWmEm z%2dnhZ_bd!V8CF=kj9V#gk}sz49N^845pb`Tk+m$&kcg0wh7KLUL;fpVrmF+-p#ONKNcI}s?J!jKG< YF$IdH07($r0w|ZvV6wg5nyHZq0Juz2mH+?% diff --git a/FileFlows.Plugin.pdb b/FileFlows.Plugin.pdb index 1327b086d1945a85a164086bf6827d8be1702dc6..ef05e11ac2ff5dd8d3660b51fe7136c7b2815d87 100644 GIT binary patch delta 467 zcmV;^0WAKAoC1iP0+4(Z03br!udIGcn=S@O%z1G7ZoJr?v5>$)e=c3={!MVZzkmno zH8M4@8+wGaVoe&lBZ$R4l#oWmLxEQ60{{T6lS@m(KoH08`4mG>iZqW}jI|=vLdAnn z+M);XFv(7mh0U()!;)|BrrOd{lpHd9+W*Y{=D} z47OYduYgd-0x$M3ThUKq57KnV9PX-(&dcq2CV?|tmauM&rFwdD3s+PK-v(E58U*iX z4Aq%v?#|ue?AJF}^(V?^X07I#vve_7_}MIk+L~}FT*>9&fAXU%N*26yzHhG{0aqjl z4Rz+U1-z0rr<5d&+tZoyEDNRUT`eg7z+I(ToD_`RjPfx}CTyIH*(giWG`>zL8Kp5M zMSSaHI%i#K#awRt80UstL4AP!on^bUPsg99-R_t5qvL|Xo9340e$^Km%bKKxT=!v5>$)fBbl13FF}G9N21$ zKX^L}bxD34-&8ri1BGZbX$6=o?SWS60{{T6lTAy*KoExS`4vM?iZn@SBaIcI7AhWu z(iT04hskD=ENpgVKP>t8ZmKOUMadzvr+sJknGa^8XxOU-Q3UtstQwXiNu#Cwq19U3 zR@?wnIl&GM9Q}|re}G_>5}}Vg1TQL-B^j@SZQm7K5Y*TJLuUxMWJ+sd7BZ^viz^K% zbJ%eqyaGZQ3%oeMY(+nbJxJ3rbGWZIx-7TnnFP*oS;D3dTJSrELV zF;r)wxw~|S^IzXW)t@MvxwV>S&eGLj>1VSPYG=Zga3z<6f9sE~C|U5*`M$k+0$h_I zG}M{X7Vt{ioKr?&+@8*qXIUs+?`uKv2ks_Gvq_qyIK7QAAID>wB)6k1EfS1#MoE?@ zjHU&fbk4fcDtFBGG0rWwg8BgcJIi)ypH4qdyWKCFN5@4DZ<(6|5q diff --git a/VideoNodes/FfmpegBuilderNodes/EncoderAdjustments/EncoderAdjustment.cs b/VideoNodes/FfmpegBuilderNodes/EncoderAdjustments/EncoderAdjustment.cs index de5f5eee..f7afadaa 100644 --- a/VideoNodes/FfmpegBuilderNodes/EncoderAdjustments/EncoderAdjustment.cs +++ b/VideoNodes/FfmpegBuilderNodes/EncoderAdjustments/EncoderAdjustment.cs @@ -1,3 +1,5 @@ +using FileFlows.VideoNodes.FfmpegBuilderNodes.Models; + namespace FileFlows.VideoNodes.FfmpegBuilderNodes.EncoderAdjustments; /// @@ -9,12 +11,13 @@ public class EncoderAdjustment /// Run any adjustments that are needed to FFmpeg arguments /// /// a logger to log to + /// the FFmpeg Builder model /// the FFmpeg args to adjust /// the adjusted FFMpeg args - public static List Run(ILogger logger, List args) + public static List Run(ILogger logger, FfmpegModel model, List args) { if (VaapiAdjustments.IsUsingVaapi(args)) - return new VaapiAdjustments().Run(logger, args); + return new VaapiAdjustments().Run(logger, model, args); return args; } diff --git a/VideoNodes/FfmpegBuilderNodes/EncoderAdjustments/IEncoderAdjustment.cs b/VideoNodes/FfmpegBuilderNodes/EncoderAdjustments/IEncoderAdjustment.cs index ebde284c..207d5f59 100644 --- a/VideoNodes/FfmpegBuilderNodes/EncoderAdjustments/IEncoderAdjustment.cs +++ b/VideoNodes/FfmpegBuilderNodes/EncoderAdjustments/IEncoderAdjustment.cs @@ -1,6 +1,18 @@ +using FileFlows.VideoNodes.FfmpegBuilderNodes.Models; + namespace FileFlows.VideoNodes.FfmpegBuilderNodes.EncoderAdjustments; +/// +/// Adjusts the FFmpeg commands +/// public interface IEncoderAdjustment { - List Run(ILogger logger, List args); + /// + /// Runs the encoder adjustments + /// + /// the logger to use + /// the FFmpeg model + /// the FFmpeg arguments + /// the updated FFmpeg arguments + List Run(ILogger logger, FfmpegModel model, List args); } \ No newline at end of file diff --git a/VideoNodes/FfmpegBuilderNodes/EncoderAdjustments/VaapiAdjustments.cs b/VideoNodes/FfmpegBuilderNodes/EncoderAdjustments/VaapiAdjustments.cs index c368c9fc..228e8fcb 100644 --- a/VideoNodes/FfmpegBuilderNodes/EncoderAdjustments/VaapiAdjustments.cs +++ b/VideoNodes/FfmpegBuilderNodes/EncoderAdjustments/VaapiAdjustments.cs @@ -1,3 +1,4 @@ +using FileFlows.VideoNodes.FfmpegBuilderNodes.Models; using FileFlows.VideoNodes.Helpers; namespace FileFlows.VideoNodes.FfmpegBuilderNodes.EncoderAdjustments; @@ -18,19 +19,32 @@ public class VaapiAdjustments : IEncoderAdjustment /// /// Runt the adjustments /// + /// the logger to use + /// the ffmpeg builder model /// the ffmpeg args /// the adjusted arguments - public List Run(ILogger logger, List args) + public List Run(ILogger logger, FfmpegModel? model, List args) { //logger.ILog("Original VAAPI parameters: \n" + string.Join("\n", args)); int iIndex = args.IndexOf("-i"); if (iIndex >= 0 && VaapiHelper.VaapiLinux) { - args.InsertRange(iIndex, new[] + if (string.IsNullOrEmpty(model?.Device)) { - "-vaapi_device", - VaapiHelper.VaapiRenderDevice - }); + args.InsertRange(iIndex, new[] + { + "-vaapi_device", + VaapiHelper.VaapiRenderDevice + }); + }else if (model?.Device != "NONE") + { + args.InsertRange(iIndex, new[] + { + "-vaapi_device", + model.Device + }); + + } } // "-pix_fmt:v:{index}", "p010le", "-profile:v:{index}", "main10" diff --git a/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderExecutor.cs b/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderExecutor.cs index e3826770..e1883dd1 100644 --- a/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderExecutor.cs +++ b/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderExecutor.cs @@ -284,7 +284,7 @@ public class FfmpegBuilderExecutor: FfmpegBuilderNode } var decodingParameters = - GetHardwareDecodingArgs(args, localFile, FFMPEG, video?.Stream?.Codec, pxtFormat, + GetHardwareDecodingArgs(args, model, localFile, FFMPEG, video?.Stream?.Codec, pxtFormat, encodingParameters: encodingParameters, inputPixelFormat: video.Stream.PixelFormat, destPixelFormat: targetIs10Bit ? "p010le" : (video?.Stream?.Is10Bit == false && video?.Stream?.Is12Bit == false) ? "nv12" : null); @@ -344,7 +344,7 @@ public class FfmpegBuilderExecutor: FfmpegBuilderNode } // make any adjustments needed for hardware devices - ffArgs = EncoderAdjustment.Run(args.Logger, ffArgs); + ffArgs = EncoderAdjustment.Run(args.Logger, model, ffArgs); var ffmpeg = FFMPEG; @@ -427,6 +427,7 @@ public class FfmpegBuilderExecutor: FfmpegBuilderNode /// Gets the hardware decoder to user /// /// the node parameters + /// the FFmpeg Builder model /// the local file /// the ffmpeg executable /// the code to use @@ -435,7 +436,7 @@ public class FfmpegBuilderExecutor: FfmpegBuilderNode /// the input pixel format of the source video /// the true pixel format we will be encoding in /// the hardware decoding parameters - internal static string[] GetHardwareDecodingArgs(NodeParameters args, string localFile, string ffmpeg, string codec, string pixelFormat, + internal static string[] GetHardwareDecodingArgs(NodeParameters args, FfmpegModel? model, string localFile, string ffmpeg, string codec, string pixelFormat, List encodingParameters = null, string inputPixelFormat = null, string destPixelFormat = null) { var testFile = FileHelper.Combine(args.TempPath, Guid.NewGuid() + ".hwtest.mkv"); @@ -502,7 +503,7 @@ public class FfmpegBuilderExecutor: FfmpegBuilderNode if (arguments.Any(x => x.Contains("vaapi", StringComparison.InvariantCultureIgnoreCase))) { args.Logger?.ILog("VAAPI detected adjusting parameters for testing"); - arguments = new VaapiAdjustments().Run(args.Logger, arguments); + arguments = new VaapiAdjustments().Run(args.Logger, model, arguments); } args.AdditionalInfoRecorder?.Invoke("Testing", string.Join(" ", hw), 1, new TimeSpan(0, 0, 10)); diff --git a/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderSetDevice.cs b/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderSetDevice.cs new file mode 100644 index 00000000..9dd2259e --- /dev/null +++ b/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderSetDevice.cs @@ -0,0 +1,32 @@ +namespace FileFlows.VideoNodes.FfmpegBuilderNodes; + +/// +/// Sets the device to use +/// +public class FfmpegBuilderSetDevice : FfmpegBuilderNode +{ + /// + public override string HelpUrl => "https://fileflows.com/docs/plugins/video-nodes/ffmpeg-builder/set-device"; + + /// + public override int Outputs => 1; + + /// + public override string Icon => "fas fa-plug"; + + /// + /// Gets or sets the device + /// + [TextVariable(1)] + public string Device { get; set; } + + /// + public override int Execute(NodeParameters args) + { + string device = args.ReplaceVariables(Device ?? string.Empty, stripMissing: true); + args.Logger?.ILog("Device: " + device); + + Model.Device = device?.EmptyAsNull() ?? "NONE"; + return 1; + } +} \ No newline at end of file diff --git a/VideoNodes/FfmpegBuilderNodes/Models/FfmpegModel.cs b/VideoNodes/FfmpegBuilderNodes/Models/FfmpegModel.cs index 9d64e533..01e6fece 100644 --- a/VideoNodes/FfmpegBuilderNodes/Models/FfmpegModel.cs +++ b/VideoNodes/FfmpegBuilderNodes/Models/FfmpegModel.cs @@ -90,6 +90,11 @@ /// public TimeSpan? StartTime { get; set; } + /// + /// Gets or sest the device to use + /// + public string? Device { get; set; } + internal static FfmpegModel CreateModel(VideoInfo info) { var model = new FfmpegModel(info); diff --git a/VideoNodes/FfmpegBuilderNodes/Video/FFmpegBuilderVideoBitrateEncode/AV1.cs b/VideoNodes/FfmpegBuilderNodes/Video/FFmpegBuilderVideoBitrateEncode/AV1.cs index fe0ffc01..0ae8cb5a 100644 --- a/VideoNodes/FfmpegBuilderNodes/Video/FFmpegBuilderVideoBitrateEncode/AV1.cs +++ b/VideoNodes/FfmpegBuilderNodes/Video/FFmpegBuilderVideoBitrateEncode/AV1.cs @@ -60,8 +60,9 @@ public partial class FfmpegBuilderVideoBitrateEncode /// AV1 QSV encoding /// /// the bitrate in Kbps + /// the device from the FFmpeg Builder Model /// the encoding parameters - private static IEnumerable AV1_Qsv(int bitrate) + private static IEnumerable AV1_Qsv(int bitrate, string device) { var args = new List { @@ -71,9 +72,14 @@ public partial class FfmpegBuilderVideoBitrateEncode "-maxrate", bitrate + "k", "-bufsize", (bitrate * 2) + "k" }; - if(VaapiHelper.VaapiLinux) - args.AddRange(new [] { "-qsv_device", VaapiHelper.VaapiRenderDevice}); - + if (VaapiHelper.VaapiLinux) + { + if(string.IsNullOrEmpty(device)) + args.AddRange(new[] { "-qsv_device", VaapiHelper.VaapiRenderDevice }); + else if(device != "NONE") + args.AddRange(new[] { "-qsv_device", device }); + } + return args.ToArray(); } } \ No newline at end of file diff --git a/VideoNodes/FfmpegBuilderNodes/Video/FFmpegBuilderVideoBitrateEncode/FfmpegBuilderVideoBitrateEncode.cs b/VideoNodes/FfmpegBuilderNodes/Video/FFmpegBuilderVideoBitrateEncode/FfmpegBuilderVideoBitrateEncode.cs index 78f4567a..f2c32416 100644 --- a/VideoNodes/FfmpegBuilderNodes/Video/FFmpegBuilderVideoBitrateEncode/FfmpegBuilderVideoBitrateEncode.cs +++ b/VideoNodes/FfmpegBuilderNodes/Video/FFmpegBuilderVideoBitrateEncode/FfmpegBuilderVideoBitrateEncode.cs @@ -87,7 +87,7 @@ public partial class FfmpegBuilderVideoBitrateEncode:VideoEncodeBase { bool tenBit = Codec == CODEC_AV1_10BIT || stream.Stream.Is10Bit; args.Logger?.ILog("10 Bit: " + tenBit); - var encodingParameters = AV1(args, tenBit, Bitrate, encoder).ToArray(); + var encodingParameters = AV1(args, tenBit, Bitrate, encoder, Model.Device).ToArray(); args.Logger?.ILog("Encoding Parameters: " + string.Join(" ", encodingParameters.Select(x => x.Contains(" ") ? "\"" + x + "\"" : x))); @@ -138,14 +138,14 @@ public partial class FfmpegBuilderVideoBitrateEncode:VideoEncodeBase return modified.ToArray(); } - internal static IEnumerable GetEncodingParameters(NodeParameters args, string codec, int bitrate, string encoder, float fps) + internal static IEnumerable GetEncodingParameters(NodeParameters args, string codec, int bitrate, string encoder, float fps, string device) { if (codec == CODEC_H264) return H264(args, false, encoder, bitrate).Select(x => x.Replace("{index}", "0")); if (codec == CODEC_H265 || codec == CODEC_H265_10BIT) return H265(null, args, codec == CODEC_H265_10BIT, bitrate, encoder, fps).Select(x => x.Replace("{index}", "0")); if(codec == CODEC_AV1) - return AV1(args, codec == CODEC_AV1_10BIT, bitrate, encoder).Select(x => x.Replace("{index}", "0")); + return AV1(args, codec == CODEC_AV1_10BIT, bitrate, encoder, device).Select(x => x.Replace("{index}", "0")); throw new Exception("Unsupported codec: " + codec); } @@ -265,7 +265,7 @@ public partial class FfmpegBuilderVideoBitrateEncode:VideoEncodeBase } - private static IEnumerable AV1(NodeParameters args, bool tenBit, int bitrate, string encoder) + private static IEnumerable AV1(NodeParameters args, bool tenBit, int bitrate, string encoder, string device) { // hevc_qsv -load_plugin hevc_hw -pix_fmt p010le -profile:v main10 -global_quality 21 -g 24 -look_ahead 1 -look_ahead_depth 60 List parameters = new List(); @@ -275,14 +275,14 @@ public partial class FfmpegBuilderVideoBitrateEncode:VideoEncodeBase else if(encoder == ENCODER_NVIDIA) parameters.AddRange(AV1_Nvidia(bitrate)); else if(encoder == ENCODER_QSV) - parameters.AddRange(AV1_Qsv(bitrate)); + parameters.AddRange(AV1_Qsv(bitrate, device)); else if(encoder == ENCODER_AMF) parameters.AddRange(AV1_Amd(bitrate)); else if (CanUseHardwareEncoding.CanProcess_Nvidia_AV1(args)) parameters.AddRange(AV1_Nvidia(bitrate)); else if (CanUseHardwareEncoding.CanProcess_Qsv_AV1(args)) - parameters.AddRange(AV1_Qsv(bitrate)); + parameters.AddRange(AV1_Qsv(bitrate, device)); else if (CanUseHardwareEncoding.CanProcess_Amd_AV1(args)) parameters.AddRange(AV1_Amd(bitrate)); else diff --git a/VideoNodes/FfmpegBuilderNodes/Video/FfmpegBuilderVideoEncode/AV1.cs b/VideoNodes/FfmpegBuilderNodes/Video/FfmpegBuilderVideoEncode/AV1.cs index 546da653..f825058f 100644 --- a/VideoNodes/FfmpegBuilderNodes/Video/FfmpegBuilderVideoEncode/AV1.cs +++ b/VideoNodes/FfmpegBuilderNodes/Video/FfmpegBuilderVideoEncode/AV1.cs @@ -85,10 +85,11 @@ public partial class FfmpegBuilderVideoEncode /// /// AV1 QSV encoding /// + /// the device from the FFmpeg Builder model /// the quality /// the speed /// the encoding parameters - private static IEnumerable AV1_Qsv(int quality, string speed) + private static IEnumerable AV1_Qsv(string device, int quality, string speed) { switch (speed) { @@ -109,9 +110,14 @@ public partial class FfmpegBuilderVideoEncode "-global_quality:v", quality.ToString(), "-preset", speed }; - if(VaapiHelper.VaapiLinux) - args.AddRange(new [] { "-qsv_device", VaapiHelper.VaapiRenderDevice}); - + if (VaapiHelper.VaapiLinux) + { + if(string.IsNullOrEmpty(device)) + args.AddRange(new[] { "-qsv_device", VaapiHelper.VaapiRenderDevice }); + else if(device != "NONE") + args.AddRange(new[] { "-qsv_device", device}); + } + return args.ToArray(); } } \ No newline at end of file diff --git a/VideoNodes/FfmpegBuilderNodes/Video/FfmpegBuilderVideoEncode/FfmpegBuilderVideoEncode.cs b/VideoNodes/FfmpegBuilderNodes/Video/FfmpegBuilderVideoEncode/FfmpegBuilderVideoEncode.cs index 8df744e4..6f656fba 100644 --- a/VideoNodes/FfmpegBuilderNodes/Video/FfmpegBuilderVideoEncode/FfmpegBuilderVideoEncode.cs +++ b/VideoNodes/FfmpegBuilderNodes/Video/FfmpegBuilderVideoEncode/FfmpegBuilderVideoEncode.cs @@ -130,7 +130,7 @@ public partial class FfmpegBuilderVideoEncode:VideoEncodeBase { bool tenBit = Codec == CODEC_AV1_10BIT || stream.Stream.Is10Bit; args.Logger?.ILog("10 Bit: " + tenBit); - var encodingParameters = AV1(args, tenBit, Quality, encoder, Speed).ToArray(); + var encodingParameters = AV1(args, tenBit, Quality, encoder, Speed, Model.Device).ToArray(); args.Logger?.ILog("Encoding Parameters: " + string.Join(" ", encodingParameters.Select(x => x.Contains(" ") ? "\"" + x + "\"" : x))); stream.EncodingParameters.AddRange(encodingParameters); @@ -154,14 +154,14 @@ public partial class FfmpegBuilderVideoEncode:VideoEncodeBase return 1; } - internal static IEnumerable GetEncodingParameters(NodeParameters args, string codec, int quality, string encoder, float fps, string speed) + internal static IEnumerable GetEncodingParameters(NodeParameters args, string codec, int quality, string encoder, float fps, string speed, string? device = null) { if (codec == CODEC_H264) return H264(args, false, quality, encoder, speed).Select(x => x.Replace("{index}", "0")); if (codec == CODEC_H265 || codec == CODEC_H265_10BIT) return H265(null, args, codec == CODEC_H265_10BIT, quality, encoder, fps, speed).Select(x => x.Replace("{index}", "0")); if(codec == CODEC_AV1) - return AV1(args, codec == CODEC_AV1_10BIT, quality, encoder, speed).Select(x => x.Replace("{index}", "0")); + return AV1(args, codec == CODEC_AV1_10BIT, quality, encoder, speed, device).Select(x => x.Replace("{index}", "0")); throw new Exception("Unsupported codec: " + codec); } @@ -281,7 +281,7 @@ public partial class FfmpegBuilderVideoEncode:VideoEncodeBase } - private static IEnumerable AV1(NodeParameters args, bool tenBit, int quality, string encoder, string speed) + private static IEnumerable AV1(NodeParameters args, bool tenBit, int quality, string encoder, string speed, string device) { // hevc_qsv -load_plugin hevc_hw -pix_fmt p010le -profile:v main10 -global_quality 21 -g 24 -look_ahead 1 -look_ahead_depth 60 List parameters = new List(); @@ -291,14 +291,14 @@ public partial class FfmpegBuilderVideoEncode:VideoEncodeBase else if(encoder == ENCODER_NVIDIA) parameters.AddRange(AV1_Nvidia(quality, speed)); else if(encoder == ENCODER_QSV) - parameters.AddRange(AV1_Qsv(quality, speed)); + parameters.AddRange(AV1_Qsv(device, quality, speed)); else if(encoder == ENCODER_AMF) parameters.AddRange(AV1_Amd(quality, speed)); else if (CanUseHardwareEncoding.CanProcess_Nvidia_AV1(args)) parameters.AddRange(AV1_Nvidia(quality, speed)); else if (CanUseHardwareEncoding.CanProcess_Qsv_AV1(args)) - parameters.AddRange(AV1_Qsv(quality, speed)); + parameters.AddRange(AV1_Qsv(device, quality, speed)); else if (CanUseHardwareEncoding.CanProcess_Amd_AV1(args)) parameters.AddRange(AV1_Amd(quality, speed)); else diff --git a/VideoNodes/LogicalNodes/VideoHasErrors.cs b/VideoNodes/LogicalNodes/VideoHasErrors.cs index bf5d2e53..e20b271a 100644 --- a/VideoNodes/LogicalNodes/VideoHasErrors.cs +++ b/VideoNodes/LogicalNodes/VideoHasErrors.cs @@ -94,7 +94,7 @@ public class VideoHasErrors: VideoNode if (useHardwareDecoding) { var hardwareDecodingArgs = - FfmpegBuilderNodes.FfmpegBuilderExecutor.GetHardwareDecodingArgs(args, filename, ffmpegPath, + FfmpegBuilderNodes.FfmpegBuilderExecutor.GetHardwareDecodingArgs(args, null, filename, ffmpegPath, video?.Codec, video?.PixelFormat); if (hardwareDecodingArgs?.Any() == true) { diff --git a/VideoNodes/Tests/VaapiAdjustmentTests.cs b/VideoNodes/Tests/VaapiAdjustmentTests.cs index 9524f659..42d506b2 100644 --- a/VideoNodes/Tests/VaapiAdjustmentTests.cs +++ b/VideoNodes/Tests/VaapiAdjustmentTests.cs @@ -1,6 +1,7 @@ #if(DEBUG) using FileFlows.VideoNodes.FfmpegBuilderNodes.EncoderAdjustments; +using FileFlows.VideoNodes.FfmpegBuilderNodes.Models; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace VideoNodes.Tests; @@ -59,7 +60,7 @@ public class VaapiAdjustmentTests: TestBase }; var logger = new TestLogger(); - var updated = new VaapiAdjustments().Run(logger, inputParameters); + var updated = new VaapiAdjustments().Run(logger, null!, inputParameters); Assert.AreEqual("-vf", updated[9]); Assert.AreEqual("format=nv12,hwupload,scale_vaapi=1280:-2", updated[10]); int index = updated.FindIndex(x => x.StartsWith("-filter:v")); @@ -119,7 +120,7 @@ public class VaapiAdjustmentTests: TestBase }; var logger = new TestLogger(); - var updated = new VaapiAdjustments().Run(logger, inputParameters); + var updated = new VaapiAdjustments().Run(logger, null!, inputParameters); Assert.AreEqual("-vf", updated[9]); Assert.AreEqual("format=nv12,hwupload,scale_vaapi=1280:-2", updated[10]); Assert.IsFalse(updated.Any(x => x.StartsWith("-filter:v"))); diff --git a/VideoNodes/i18n/en.json b/VideoNodes/i18n/en.json index 2c302386..0d0e23f1 100644 --- a/VideoNodes/i18n/en.json +++ b/VideoNodes/i18n/en.json @@ -625,6 +625,17 @@ "Index-Help": "The index of the track to set as default, only used if language is not specified." } }, + "FfmpegBuilderSetDevice": { + "Label": "FFMPEG Builder: Set Device", + "Description": "Sets the device to use for hardware encoding/decoder if the encoder/decoder supports it.", + "Outputs": { + "1": "Device set" + }, + "Fields": { + "Device": "Device", + "Device-Help": "The path to the device, or leave blank if no device should be specified." + } + }, "FfmpegBuilderSetFps": { "Label": "FFMPEG Builder: Set FPS", "Description": "Set the frames per second (FPS) in the FFmpeg Builder",