using System.Diagnostics.CodeAnalysis; using ADOFAIRenderer.Util.FFmpeg; namespace ADOFAIRenderer.Data; [SuppressMessage("ReSharper", "RedundantDefaultMemberInitializer")] public class RenderConfig { public double RenderFPS { get; set; } public double VideoFPS { get; set; } public int RenderWidth { get; set; } public int RenderHeight { get; set; } public VideoEncodingConfig VideoConfig { get; set; } = new(); public AudioEncodingConfig AudioConfig { get; set; } = new(); public AdvancedConfig AdvancedConfig { get; set; } = new(); public double DelayAfterEnd { get; set; } public bool ShowJudgementText { get; set; } = false; } [SuppressMessage("ReSharper", "RedundantDefaultMemberInitializer")] public class AdvancedConfig { public int? RandomSeed { get; set; } = null; public bool ProcessAudio { get; set; } = true; public bool NonTile { get; set; } = false; public string FileExtension { get; set; } = "mkv"; } public class VideoEncodingConfig { public Codec Codec { get; set; } = Codec.H264; public RateControlMode RateControlMode { get; set; } = RateControlMode.CBR; public int Bitrate { get; set; } = 30000; public int MaxBitrate { get; set; } = 50000; // ReSharper disable once InconsistentNaming public int QP { get; set; } = 18; public double KeyframeInterval { get; set; } = 2.0; public bool ForceSoftwareEncoder { get; set; } } public class AudioEncodingConfig { private int _audioSampleRate = 44100; private int _audioChannels = 2; private int _audioBitrate = 256000; public bool RenderAudio { get; set; } = true; public int AudioSampleRate { get => _audioSampleRate <= 0 ? 44100 : _audioSampleRate; set => _audioSampleRate = value <= 0 ? 44100 : value; } public int AudioChannels { get => _audioChannels <= 0 ? 2 : _audioChannels; set => _audioChannels = value <= 0 ? 2 : value; } public int AudioBitrate { get => _audioBitrate <= 0 ? 256000 : _audioBitrate; set => _audioBitrate = value <= 0 ? 256000 : value; } }