using System.Globalization; using ErsatzTV.FFmpeg.Environment; namespace ErsatzTV.FFmpeg.InputOption; public class ReadrateInputOption : IInputOption { private readonly int _initialBurstSeconds; public ReadrateInputOption(int initialBurstSeconds = 0) { _initialBurstSeconds = initialBurstSeconds; } public IList EnvironmentVariables => Array.Empty(); public IList GlobalOptions => Array.Empty(); public IList InputOptions(InputFile inputFile) { var result = new List { "-readrate", "1.0" }; if (_initialBurstSeconds > 0) { result.AddRange( new[] { "-readrate_initial_burst", _initialBurstSeconds.ToString(CultureInfo.InvariantCulture) }); } return result; } public IList FilterOptions => Array.Empty(); public IList OutputOptions => Array.Empty(); public FrameState NextState(FrameState currentState) => currentState with { Realtime = true }; public bool AppliesTo(AudioInputFile audioInputFile) => true; // don't use realtime input for a still image public bool AppliesTo(VideoInputFile videoInputFile) => videoInputFile.VideoStreams.All(s => !s.StillImage); public bool AppliesTo(ConcatInputFile concatInputFile) => true; }