releases/tests/Paca.Tests/Core/VideoTonemapEnhancerGateTests.cs

85 lines
No EOL
3.2 KiB
C#

using System;
using Paca.Core;
using Xunit;
namespace Paca.Tests.Core;
public class VideoTonemapEnhancerGateTests
{
[Fact]
public void Gate413_VideoTonemapEnhancer_BuildsHdrToSdrFilter_WithSelectedAlgorithm()
{
var filterMobius = VideoTonemapEnhancer.BuildHdrToSdrFilter(TonemapAlgorithm.Mobius);
Assert.Contains("tonemap=mobius", filterMobius);
Assert.Contains("zscale=transfer=bt709", filterMobius);
var filterHable = VideoTonemapEnhancer.BuildHdrToSdrFilter(TonemapAlgorithm.Hable);
Assert.Contains("tonemap=hable", filterHable);
var filterReinhard = VideoTonemapEnhancer.BuildHdrToSdrFilter(TonemapAlgorithm.Reinhard);
Assert.Contains("tonemap=reinhard", filterReinhard);
}
[Fact]
public void Gate414_VideoTonemapEnhancer_BuildsColorGradeFilter_WithCustomPreset()
{
var cinematic = VideoTonemapEnhancer.BuildColorGradeFilter(ColorGradePreset.CinematicWarm);
Assert.Contains("eq=contrast=1.10", cinematic);
Assert.Contains("saturation=1.15", cinematic);
Assert.Contains("colorbalance=rs=0.05", cinematic);
var oled = VideoTonemapEnhancer.BuildColorGradeFilter(ColorGradePreset.OledDeepBlack);
Assert.Contains("contrast=1.05", oled);
Assert.Contains("gamma=0.95", oled);
var none = VideoTonemapEnhancer.BuildColorGradeFilter(ColorGradePreset.None);
Assert.Empty(none);
}
[Fact]
public void Gate415_VideoTonemapEnhancer_CombinesTonemapAndColorGrade_Properly()
{
var combined = VideoTonemapEnhancer.BuildCombinedFilter(TonemapAlgorithm.Hable, ColorGradePreset.CinematicWarm);
Assert.Contains("tonemap=hable", combined);
Assert.Contains("colorbalance=rs=0.05", combined);
}
[Fact]
public void Gate416_VideoTonemapEnhancer_BuildsFfmpegCliArgs_WithPixelFormat()
{
var args = VideoTonemapEnhancer.BuildFfmpegArgs("hdr.mp4", "sdr.mp4", TonemapAlgorithm.Mobius, ColorGradePreset.OledDeepBlack, crf: 20);
Assert.Contains("-i \"hdr.mp4\"", args);
Assert.Contains("-vf \"", args);
Assert.Contains("tonemap=mobius", args);
Assert.Contains("-c:v libx264 -crf 20", args);
Assert.Contains("-pix_fmt yuv420p", args);
Assert.Contains("-c:a copy", args);
Assert.Contains("\"sdr.mp4\"", args);
}
[Fact]
public void Gate417_VideoTonemapEnhancer_SupportsHardwareAcceleratedGpuEncoding()
{
var nvencArgs = VideoTonemapEnhancer.BuildFfmpegArgs(
"hdr.mp4", "sdr.mp4",
TonemapAlgorithm.Hable, ColorGradePreset.CinematicWarm,
crf: 22,
videoEncoder: "hevc_nvenc",
presetSpeed: "p4");
Assert.Contains("-c:v hevc_nvenc", nvencArgs);
Assert.Contains("-cq 22", nvencArgs);
Assert.Contains("-preset p4", nvencArgs);
Assert.DoesNotContain("libx264", nvencArgs);
var qsvArgs = VideoTonemapEnhancer.BuildFfmpegArgs(
"hdr.mp4", "sdr.mp4",
TonemapAlgorithm.Mobius, ColorGradePreset.Vibrant,
crf: 24,
videoEncoder: "av1_qsv");
Assert.Contains("-c:v av1_qsv", qsvArgs);
Assert.Contains("-global_quality 24", qsvArgs);
}
}