mirror of https://github.com/ErsatzTV/ErsatzTV.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.3 KiB
86 lines
2.3 KiB
using ErsatzTV.FFmpeg.Format; |
|
using ErsatzTV.FFmpeg.InputOption; |
|
using ErsatzTV.FFmpeg.State; |
|
|
|
namespace ErsatzTV.FFmpeg; |
|
|
|
public abstract record InputFile(string Path, IList<MediaStream> Streams) |
|
{ |
|
public List<IInputOption> InputOptions { get; } = new(); |
|
public List<IPipelineFilterStep> FilterSteps { get; } = new(); |
|
} |
|
|
|
public record ConcatInputFile(string Url, FrameSize Resolution) : InputFile( |
|
Url, |
|
new List<MediaStream> |
|
{ |
|
new VideoStream( |
|
0, |
|
string.Empty, |
|
string.Empty, |
|
Option<IPixelFormat>.None, |
|
ColorParams.Default, |
|
Resolution, |
|
string.Empty, |
|
string.Empty, |
|
Option<string>.None, |
|
false, |
|
ScanKind.Unknown) |
|
}) |
|
{ |
|
public void AddOption(IInputOption option) |
|
{ |
|
if (option.AppliesTo(this)) |
|
{ |
|
InputOptions.Add(option); |
|
} |
|
} |
|
} |
|
|
|
public record AudioInputFile(string Path, IList<AudioStream> AudioStreams, AudioState DesiredState) : InputFile( |
|
Path, |
|
AudioStreams.Cast<MediaStream>().ToList()) |
|
{ |
|
public void AddOption(IInputOption option) |
|
{ |
|
if (option.AppliesTo(this)) |
|
{ |
|
InputOptions.Add(option); |
|
} |
|
} |
|
} |
|
|
|
public record NullAudioInputFile : AudioInputFile |
|
{ |
|
public NullAudioInputFile(AudioState DesiredState) : base( |
|
"anullsrc", |
|
new List<AudioStream> { new(0, "unknown", -1) }, |
|
DesiredState) => |
|
InputOptions.Add(new LavfiInputOption()); |
|
|
|
public void Deconstruct(out AudioState DesiredState) => DesiredState = this.DesiredState; |
|
} |
|
|
|
public record VideoInputFile(string Path, IList<VideoStream> VideoStreams) : InputFile( |
|
Path, |
|
VideoStreams.Cast<MediaStream>().ToList()) |
|
{ |
|
public void AddOption(IInputOption option) |
|
{ |
|
if (option.AppliesTo(this)) |
|
{ |
|
InputOptions.Add(option); |
|
} |
|
} |
|
} |
|
|
|
public record WatermarkInputFile(string Path, IList<VideoStream> VideoStreams, WatermarkState DesiredState) |
|
: VideoInputFile(Path, VideoStreams); |
|
|
|
public record SubtitleInputFile(string Path, IList<MediaStream> SubtitleStreams, SubtitleMethod Method) : InputFile( |
|
Path, |
|
SubtitleStreams) |
|
{ |
|
public bool IsImageBased => SubtitleStreams.All( |
|
s => s.Codec is "hdmv_pgs_subtitle" or "dvd_subtitle" or "dvdsub" or "vobsub" or "pgssub" or "pgs"); |
|
}
|
|
|