using System; using System.IO.Pipes; using System.Threading; using System.Threading.Tasks; using FFMpegCore.Pipes; namespace FFMpegCore.Arguments { /// /// Represents input parameter for a named pipe /// public class InputPipeArgument : PipeArgument, IInputArgument { public readonly IPipeSource Writer; public InputPipeArgument(IPipeSource writer) : base(PipeDirection.Out) { Writer = writer; } public override string Text => $"{Writer.GetStreamArguments()} -i \"{PipePath}\""; protected override async Task ProcessDataAsync(CancellationToken token) { await Pipe.WaitForConnectionAsync(token).ConfigureAwait(false); if (!Pipe.IsConnected) throw new OperationCanceledException(); await Writer.WriteAsync(Pipe, token).ConfigureAwait(false); } } }