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