From 400d67b60b39ec971a52d209fbd6ef47863e3f6a Mon Sep 17 00:00:00 2001 From: John Andrews Date: Mon, 23 Sep 2024 02:54:44 +1200 Subject: [PATCH] FF-1753: Added dynamicrange to title formatter --- .../FfmpegBuilderSetTrackTitles.cs | 9 +++++-- .../FFmpegBuilder_SetTrackTitlesTests.cs | 27 +++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderSetTrackTitles.cs b/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderSetTrackTitles.cs index b8d913b6..a0bafeb9 100644 --- a/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderSetTrackTitles.cs +++ b/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderSetTrackTitles.cs @@ -192,7 +192,8 @@ public class FfmpegBuilderSetTrackTitles: FfmpegBuilderNode fps: track.Stream?.FramesPerSecond ?? 0, pixelFormat: track.Stream?.PixelFormat?.EmptyAsNull(), resolution: track.Stream == null ? null : ResolutionHelper.GetResolution(track.Stream.Width, track.Stream.Height), - dimensions: track.Stream == null ? null : track.Stream.Width + "x" + track.Stream.Height + dimensions: track.Stream == null ? null : track.Stream.Width + "x" + track.Stream.Height, + dynamicRange: track.Stream.HDR ? "HDR" : "SDR" ); if (originalTitle == track.Title) continue; @@ -263,10 +264,11 @@ public class FfmpegBuilderSetTrackTitles: FfmpegBuilderNode /// the tracks video dimensions /// the tracks video pixelFormat /// the tracks video FPS + /// the dynamic range /// the formatted string internal static string FormatTitle(string formatter, string separator, string language, string codec, bool isDefault = false, float bitrate = 0, float channels = 0, int sampleRate = 0, bool isForced = false, bool sdh = false, bool cc = false, bool hi = false, - ResolutionHelper.Resolution? resolution = null, string? dimensions = null, string? pixelFormat = null, float? fps = null) + ResolutionHelper.Resolution? resolution = null, string? dimensions = null, string? pixelFormat = null, float? fps = null, string? dynamicRange = null) { if (string.IsNullOrWhiteSpace(formatter)) return string.Empty; @@ -336,6 +338,9 @@ public class FfmpegBuilderSetTrackTitles: FfmpegBuilderNode formatter = Replace(formatter, "!pixelformat!", pixelFormat ?? string.Empty); formatter = Replace(formatter, "!pixelformat", pixelFormat?.ToLowerInvariant() ?? string.Empty); formatter = Replace(formatter, "pixelformat", pixelFormat?.ToUpperInvariant() ?? string.Empty); + formatter = Replace(formatter, "!dynamicrange!", dynamicRange ?? string.Empty); + formatter = Replace(formatter, "!dynamicrange", dynamicRange?.ToLowerInvariant() ?? string.Empty); + formatter = Replace(formatter, "dynamicrange", dynamicRange?.ToUpperInvariant() ?? string.Empty); formatter = Replace(formatter, "dimensions", dimensions ?? string.Empty); // Remove standalone separators diff --git a/VideoNodes/Tests/FfmpegBuilderTests/FFmpegBuilder_SetTrackTitlesTests.cs b/VideoNodes/Tests/FfmpegBuilderTests/FFmpegBuilder_SetTrackTitlesTests.cs index e6b80fdd..3095b72f 100644 --- a/VideoNodes/Tests/FfmpegBuilderTests/FFmpegBuilder_SetTrackTitlesTests.cs +++ b/VideoNodes/Tests/FfmpegBuilderTests/FFmpegBuilder_SetTrackTitlesTests.cs @@ -402,6 +402,33 @@ public class FFmpegBuilder_SetTrackTitlesTests : VideoTestBase Assert.AreEqual("Track: English / HEVC / 720p", result); } + + [TestMethod] + public void FormatTitle_Video_HDR() + { + // Arrange + string formatter = "Track: lang / codec / fps / resolution / dimensions / pixelformat / dynamicrange"; + string separator = " / "; + string language = "English"; + string codec = "HEVC"; + + ResolutionHelper.Resolution resolution = ResolutionHelper.Resolution.r720p; + + // Act + string result = FfmpegBuilderSetTrackTitles.FormatTitle(formatter, separator, language, codec, + resolution: resolution, dynamicRange: "HDR"); + + // Assert + Assert.AreEqual("Track: English / HEVC / 720P / HDR", result); + + // Act + result = FfmpegBuilderSetTrackTitles.FormatTitle(formatter, separator, language, codec, + resolution: resolution, dynamicRange: "SDR"); + + // Assert + Assert.AreEqual("Track: English / HEVC / 720P / SDR", result); + } + [TestMethod] public void FormatTitle_Video_PixelFormat() {