using ErsatzTV.FFmpeg.Format; using ErsatzTV.FFmpeg.OutputFormat; using LanguageExt; namespace ErsatzTV.FFmpeg; public record FrameState( bool SaveReport, HardwareAccelerationMode HardwareAccelerationMode, Option VaapiDriver, Option VaapiDevice, bool Realtime, bool InfiniteLoop, Option Start, Option Finish, string VideoFormat, Option PixelFormat, FrameSize ScaledSize, FrameSize PaddedSize, Option FrameRate, Option VideoBitrate, Option VideoBufferSize, Option VideoTrackTimeScale, bool Deinterlaced, Option AudioFormat, Option AudioChannels, Option AudioBitrate, Option AudioBufferSize, Option AudioSampleRate, Option AudioDuration, bool NormalizeLoudness, bool DoNotMapMetadata, Option MetadataServiceProvider, Option MetadataServiceName, Option MetadataAudioLanguage, OutputFormatKind OutputFormat, Option HlsPlaylistPath, Option HlsSegmentTemplate, long PtsOffset, FrameDataLocation FrameDataLocation = FrameDataLocation.Unknown) { public static FrameState Concat(bool saveReport, string channelName, FrameSize resolution) => new( saveReport, HardwareAccelerationMode.None, Option.None, Option.None, true, // realtime true, // infinite loop Option.None, Option.None, Format.VideoFormat.Undetermined, Option.None, resolution, resolution, Option.None, Option.None, Option.None, Option.None, false, Option.None, Option.None, Option.None, Option.None, Option.None, Option.None, false, // normalize loudness true, // do not map metadata "ErsatzTV", channelName, Option.None, OutputFormatKind.MpegTs, Option.None, Option.None, 0); }