From 17c9db52dde71f737a2f9f6c364bb5365282b818 Mon Sep 17 00:00:00 2001 From: Malte Rosenbjerg Date: Sun, 24 May 2020 19:17:14 +0200 Subject: [PATCH] Renaming Former-commit-id: 39dd390e8139a435e62730a785d6543aefe5b0c2 --- FFMpegCore.Test/VideoTest.cs | 18 +++++----- .../FFMpeg/Arguments/InputPipeArgument.cs | 4 +-- .../FFMpeg/Arguments/OutputPipeArgument.cs | 4 +-- FFMpegCore/FFMpeg/FFMpeg.cs | 2 +- FFMpegCore/FFMpeg/FFMpegArgumentProcessor.cs | 33 ++++++++----------- FFMpegCore/FFMpeg/FFMpegArguments.cs | 4 +-- .../{IPipeDataReader.cs => IPipeSink.cs} | 2 +- .../{IPipeDataWriter.cs => IPipeSource.cs} | 2 +- ...ipeDataWriter.cs => RawVideoPipeSource.cs} | 8 ++--- ...eamPipeDataReader.cs => StreamPipeSink.cs} | 4 +-- ...mPipeDataWriter.cs => StreamPipeSource.cs} | 6 ++-- FFMpegCore/FFProbe/FFProbe.cs | 4 +-- 12 files changed, 42 insertions(+), 49 deletions(-) rename FFMpegCore/FFMpeg/Pipes/{IPipeDataReader.cs => IPipeSink.cs} (85%) rename FFMpegCore/FFMpeg/Pipes/{IPipeDataWriter.cs => IPipeSource.cs} (89%) rename FFMpegCore/FFMpeg/Pipes/{RawVideoPipeDataWriter.cs => RawVideoPipeSource.cs} (86%) rename FFMpegCore/FFMpeg/Pipes/{StreamPipeDataReader.cs => StreamPipeSink.cs} (81%) rename FFMpegCore/FFMpeg/Pipes/{StreamPipeDataWriter.cs => StreamPipeSource.cs} (73%) diff --git a/FFMpegCore.Test/VideoTest.cs b/FFMpegCore.Test/VideoTest.cs index 9285433..aafb334 100644 --- a/FFMpegCore.Test/VideoTest.cs +++ b/FFMpegCore.Test/VideoTest.cs @@ -72,7 +72,7 @@ private void ConvertFromStreamPipe(ContainerFormat type, params IArgument[] inpu var input = FFProbe.Analyse(VideoLibrary.LocalVideoWebm.FullName); using (var inputStream = File.OpenRead(input.Path)) { - var pipeSource = new StreamPipeDataWriter(inputStream); + var pipeSource = new StreamPipeSource(inputStream); var arguments = FFMpegArguments.FromPipe(pipeSource); foreach (var arg in inputArguments) arguments.WithArgument(arg); @@ -124,7 +124,7 @@ private void ConvertToStreamPipe(params IArgument[] inputArguments) foreach (var arg in inputArguments) arguments.WithArgument(arg); - var streamPipeDataReader = new StreamPipeDataReader(ms); + var streamPipeDataReader = new StreamPipeSink(ms); var processor = arguments.OutputToPipe(streamPipeDataReader); var scaling = arguments.Find(); @@ -220,7 +220,7 @@ public void ConvertFromPipe(ContainerFormat type, System.Drawing.Imaging.PixelFo try { - var videoFramesSource = new RawVideoPipeDataWriter(BitmapSource.CreateBitmaps(128, fmt, 256, 256)); + var videoFramesSource = new RawVideoPipeSource(BitmapSource.CreateBitmaps(128, fmt, 256, 256)); var arguments = FFMpegArguments.FromPipe(videoFramesSource); foreach (var arg in inputArguments) arguments.WithArgument(arg); @@ -302,7 +302,7 @@ public async Task Video_ToMP4_Args_StreamOutputPipe_Async_Failure() await Assert.ThrowsExceptionAsync(async () => { await using var ms = new MemoryStream(); - var pipeSource = new StreamPipeDataReader(ms); + var pipeSource = new StreamPipeSink(ms); await FFMpegArguments .FromInputFiles(VideoLibrary.LocalVideo) .ForceFormat("mkv") @@ -322,7 +322,7 @@ public void Video_ToMP4_Args_StreamOutputPipe_Failure() public void Video_ToMP4_Args_StreamOutputPipe_Async() { using var ms = new MemoryStream(); - var pipeSource = new StreamPipeDataReader(ms); + var pipeSource = new StreamPipeSink(ms); FFMpegArguments .FromInputFiles(VideoLibrary.LocalVideo) .WithVideoCodec(VideoCodec.LibX264) @@ -622,8 +622,8 @@ public void Video_UpdatesProgress() public void Video_TranscodeInMemory() { using var resStream = new MemoryStream(); - var reader = new StreamPipeDataReader(resStream); - var writer = new RawVideoPipeDataWriter(BitmapSource.CreateBitmaps(128, System.Drawing.Imaging.PixelFormat.Format24bppRgb, 128, 128)); + var reader = new StreamPipeSink(resStream); + var writer = new RawVideoPipeSource(BitmapSource.CreateBitmaps(128, System.Drawing.Imaging.PixelFormat.Format24bppRgb, 128, 128)); FFMpegArguments .FromPipe(writer) @@ -642,8 +642,8 @@ public void Video_TranscodeInMemory() public async Task Video_Cancel_Async() { await using var resStream = new MemoryStream(); - var reader = new StreamPipeDataReader(resStream); - var writer = new RawVideoPipeDataWriter(BitmapSource.CreateBitmaps(512, System.Drawing.Imaging.PixelFormat.Format24bppRgb, 128, 128)); + var reader = new StreamPipeSink(resStream); + var writer = new RawVideoPipeSource(BitmapSource.CreateBitmaps(512, System.Drawing.Imaging.PixelFormat.Format24bppRgb, 128, 128)); var task = FFMpegArguments .FromPipe(writer) diff --git a/FFMpegCore/FFMpeg/Arguments/InputPipeArgument.cs b/FFMpegCore/FFMpeg/Arguments/InputPipeArgument.cs index 3d3b525..990995a 100644 --- a/FFMpegCore/FFMpeg/Arguments/InputPipeArgument.cs +++ b/FFMpegCore/FFMpeg/Arguments/InputPipeArgument.cs @@ -10,9 +10,9 @@ namespace FFMpegCore.Arguments /// public class InputPipeArgument : PipeArgument, IInputArgument { - public readonly IPipeDataWriter Writer; + public readonly IPipeSource Writer; - public InputPipeArgument(IPipeDataWriter writer) : base(PipeDirection.Out) + public InputPipeArgument(IPipeSource writer) : base(PipeDirection.Out) { Writer = writer; } diff --git a/FFMpegCore/FFMpeg/Arguments/OutputPipeArgument.cs b/FFMpegCore/FFMpeg/Arguments/OutputPipeArgument.cs index 40475fc..f762752 100644 --- a/FFMpegCore/FFMpeg/Arguments/OutputPipeArgument.cs +++ b/FFMpegCore/FFMpeg/Arguments/OutputPipeArgument.cs @@ -7,9 +7,9 @@ namespace FFMpegCore.Arguments { public class OutputPipeArgument : PipeArgument, IOutputArgument { - public readonly IPipeDataReader Reader; + public readonly IPipeSink Reader; - public OutputPipeArgument(IPipeDataReader reader) : base(PipeDirection.In) + public OutputPipeArgument(IPipeSink reader) : base(PipeDirection.In) { Reader = reader; } diff --git a/FFMpegCore/FFMpeg/FFMpeg.cs b/FFMpegCore/FFMpeg/FFMpeg.cs index e2fcfde..8d16a19 100644 --- a/FFMpegCore/FFMpeg/FFMpeg.cs +++ b/FFMpegCore/FFMpeg/FFMpeg.cs @@ -59,7 +59,7 @@ public static Bitmap Snapshot(MediaAnalysis source, Size? size = null, TimeSpan? .Resize(size) .Seek(captureTime) .ForceFormat("rawvideo") - .OutputToPipe(new StreamPipeDataReader(ms)) + .OutputToPipe(new StreamPipeSink(ms)) .ProcessSynchronously(); ms.Position = 0; diff --git a/FFMpegCore/FFMpeg/FFMpegArgumentProcessor.cs b/FFMpegCore/FFMpeg/FFMpegArgumentProcessor.cs index bdd6ea5..096c800 100644 --- a/FFMpegCore/FFMpeg/FFMpegArgumentProcessor.cs +++ b/FFMpegCore/FFMpeg/FFMpegArgumentProcessor.cs @@ -12,7 +12,11 @@ namespace FFMpegCore { public class FFMpegArgumentProcessor { + private static readonly Regex ProgressRegex = new Regex(@"time=(\d\d:\d\d:\d\d.\d\d?)", RegexOptions.Compiled); private readonly FFMpegArguments _ffMpegArguments; + private Action? _onPercentageProgress; + private Action? _onTimeProgress; + private TimeSpan? _totalTimespan; internal FFMpegArgumentProcessor(FFMpegArguments ffMpegArguments) { @@ -74,15 +78,20 @@ void OnCancelEvent(object sender, EventArgs args) _ffMpegArguments.Post(); } + return HandleCompletion(throwOnError, errorCode, instance); + } + + private bool HandleCompletion(bool throwOnError, int errorCode, Instance instance) + { if (throwOnError && errorCode != 0) throw new FFMpegException(FFMpegExceptionType.Conversion, string.Join("\n", instance.ErrorData)); - + _onPercentageProgress?.Invoke(100.0); if (_totalTimespan.HasValue) _onTimeProgress?.Invoke(_totalTimespan.Value); - + return errorCode == 0; } - + public async Task ProcessAsynchronously(bool throwOnError = true) { using var instance = PrepareInstance(out var cancellationTokenSource, out var errorCode); @@ -113,13 +122,7 @@ await Task.WhenAll(instance.FinishedRunning().ContinueWith(t => _ffMpegArguments.Post(); } - if (throwOnError && errorCode != 0) - throw new FFMpegException(FFMpegExceptionType.Conversion, string.Join("\n", instance.ErrorData)); - - _onPercentageProgress?.Invoke(100.0); - if (_totalTimespan.HasValue) _onTimeProgress?.Invoke(_totalTimespan.Value); - - return errorCode == 0; + return HandleCompletion(throwOnError, errorCode, instance); } private Instance PrepareInstance(out CancellationTokenSource cancellationTokenSource, out int errorCode) @@ -146,18 +149,8 @@ private static bool HandleException(bool throwOnError, Exception e, Instance ins string.Join("\n", instance.ErrorData)); } - - private static readonly Regex ProgressRegex = new Regex(@"time=(\d\d:\d\d:\d\d.\d\d?)", RegexOptions.Compiled); - private Action? _onPercentageProgress; - private Action? _onTimeProgress; - private TimeSpan? _totalTimespan; - private void OutputData(object sender, (DataType Type, string Data) msg) { -#if DEBUG - Trace.WriteLine(msg.Data); -#endif - var match = ProgressRegex.Match(msg.Data); if (!match.Success) return; diff --git a/FFMpegCore/FFMpeg/FFMpegArguments.cs b/FFMpegCore/FFMpeg/FFMpegArguments.cs index bcfe28c..40e72c7 100644 --- a/FFMpegCore/FFMpeg/FFMpegArguments.cs +++ b/FFMpegCore/FFMpeg/FFMpegArguments.cs @@ -32,7 +32,7 @@ private FFMpegArguments(IInputArgument inputArgument) public static FFMpegArguments FromInputFiles(params FileInfo[] files) => new FFMpegArguments(new InputArgument(false, files)); public static FFMpegArguments FromInputFiles(bool verifyExists, params FileInfo[] files) => new FFMpegArguments(new InputArgument(verifyExists, files)); public static FFMpegArguments FromConcatenation(params string[] files) => new FFMpegArguments(new ConcatArgument(files)); - public static FFMpegArguments FromPipe(IPipeDataWriter writer) => new FFMpegArguments(new InputPipeArgument(writer)); + public static FFMpegArguments FromPipe(IPipeSource writer) => new FFMpegArguments(new InputPipeArgument(writer)); public FFMpegArguments WithAudioCodec(Codec audioCodec) => WithArgument(new AudioCodecArgument(audioCodec)); @@ -87,7 +87,7 @@ private FFMpegArguments(IInputArgument inputArgument) public FFMpegArgumentProcessor OutputToFile(string file, bool overwrite = false) => ToProcessor(new OutputArgument(file, overwrite)); public FFMpegArgumentProcessor OutputToFile(Uri uri, bool overwrite = false) => ToProcessor(new OutputArgument(uri.AbsolutePath, overwrite)); - public FFMpegArgumentProcessor OutputToPipe(IPipeDataReader reader) => ToProcessor(new OutputPipeArgument(reader)); + public FFMpegArgumentProcessor OutputToPipe(IPipeSink reader) => ToProcessor(new OutputPipeArgument(reader)); public FFMpegArguments WithArgument(IArgument argument) { diff --git a/FFMpegCore/FFMpeg/Pipes/IPipeDataReader.cs b/FFMpegCore/FFMpeg/Pipes/IPipeSink.cs similarity index 85% rename from FFMpegCore/FFMpeg/Pipes/IPipeDataReader.cs rename to FFMpegCore/FFMpeg/Pipes/IPipeSink.cs index 030b5e9..8010d87 100644 --- a/FFMpegCore/FFMpeg/Pipes/IPipeDataReader.cs +++ b/FFMpegCore/FFMpeg/Pipes/IPipeSink.cs @@ -3,7 +3,7 @@ namespace FFMpegCore.Pipes { - public interface IPipeDataReader + public interface IPipeSink { Task CopyAsync(System.IO.Stream inputStream, CancellationToken cancellationToken); string GetFormat(); diff --git a/FFMpegCore/FFMpeg/Pipes/IPipeDataWriter.cs b/FFMpegCore/FFMpeg/Pipes/IPipeSource.cs similarity index 89% rename from FFMpegCore/FFMpeg/Pipes/IPipeDataWriter.cs rename to FFMpegCore/FFMpeg/Pipes/IPipeSource.cs index 594a27a..35766d0 100644 --- a/FFMpegCore/FFMpeg/Pipes/IPipeDataWriter.cs +++ b/FFMpegCore/FFMpeg/Pipes/IPipeSource.cs @@ -6,7 +6,7 @@ namespace FFMpegCore.Pipes /// /// Interface for ffmpeg pipe source data IO /// - public interface IPipeDataWriter + public interface IPipeSource { string GetFormat(); Task CopyAsync(System.IO.Stream outputStream, CancellationToken cancellationToken); diff --git a/FFMpegCore/FFMpeg/Pipes/RawVideoPipeDataWriter.cs b/FFMpegCore/FFMpeg/Pipes/RawVideoPipeSource.cs similarity index 86% rename from FFMpegCore/FFMpeg/Pipes/RawVideoPipeDataWriter.cs rename to FFMpegCore/FFMpeg/Pipes/RawVideoPipeSource.cs index d35e7d5..8739a40 100644 --- a/FFMpegCore/FFMpeg/Pipes/RawVideoPipeDataWriter.cs +++ b/FFMpegCore/FFMpeg/Pipes/RawVideoPipeSource.cs @@ -7,9 +7,9 @@ namespace FFMpegCore.Pipes { /// - /// Implementation of for a raw video stream that is gathered from + /// Implementation of for a raw video stream that is gathered from /// - public class RawVideoPipeDataWriter : IPipeDataWriter + public class RawVideoPipeSource : IPipeSource { public string StreamFormat { get; private set; } = null!; public int Width { get; private set; } @@ -18,12 +18,12 @@ public class RawVideoPipeDataWriter : IPipeDataWriter private bool _formatInitialized; private readonly IEnumerator _framesEnumerator; - public RawVideoPipeDataWriter(IEnumerator framesEnumerator) + public RawVideoPipeSource(IEnumerator framesEnumerator) { _framesEnumerator = framesEnumerator; } - public RawVideoPipeDataWriter(IEnumerable framesEnumerator) : this(framesEnumerator.GetEnumerator()) { } + public RawVideoPipeSource(IEnumerable framesEnumerator) : this(framesEnumerator.GetEnumerator()) { } public string GetFormat() { diff --git a/FFMpegCore/FFMpeg/Pipes/StreamPipeDataReader.cs b/FFMpegCore/FFMpeg/Pipes/StreamPipeSink.cs similarity index 81% rename from FFMpegCore/FFMpeg/Pipes/StreamPipeDataReader.cs rename to FFMpegCore/FFMpeg/Pipes/StreamPipeSink.cs index 1e2d4c5..ca2246f 100644 --- a/FFMpegCore/FFMpeg/Pipes/StreamPipeDataReader.cs +++ b/FFMpegCore/FFMpeg/Pipes/StreamPipeSink.cs @@ -3,13 +3,13 @@ namespace FFMpegCore.Pipes { - public class StreamPipeDataReader : IPipeDataReader + public class StreamPipeSink : IPipeSink { public System.IO.Stream Destination { get; } public int BlockSize { get; set; } = 4096; public string Format { get; set; } = string.Empty; - public StreamPipeDataReader(System.IO.Stream destination) + public StreamPipeSink(System.IO.Stream destination) { Destination = destination; } diff --git a/FFMpegCore/FFMpeg/Pipes/StreamPipeDataWriter.cs b/FFMpegCore/FFMpeg/Pipes/StreamPipeSource.cs similarity index 73% rename from FFMpegCore/FFMpeg/Pipes/StreamPipeDataWriter.cs rename to FFMpegCore/FFMpeg/Pipes/StreamPipeSource.cs index c2e3d83..db41eb7 100644 --- a/FFMpegCore/FFMpeg/Pipes/StreamPipeDataWriter.cs +++ b/FFMpegCore/FFMpeg/Pipes/StreamPipeSource.cs @@ -4,15 +4,15 @@ namespace FFMpegCore.Pipes { /// - /// Implementation of used for stream redirection + /// Implementation of used for stream redirection /// - public class StreamPipeDataWriter : IPipeDataWriter + public class StreamPipeSource : IPipeSource { public System.IO.Stream Source { get; } public int BlockSize { get; } = 4096; public string StreamFormat { get; } = string.Empty; - public StreamPipeDataWriter(System.IO.Stream source) + public StreamPipeSource(System.IO.Stream source) { Source = source; } diff --git a/FFMpegCore/FFProbe/FFProbe.cs b/FFMpegCore/FFProbe/FFProbe.cs index 8dc0154..73d4c49 100644 --- a/FFMpegCore/FFProbe/FFProbe.cs +++ b/FFMpegCore/FFProbe/FFProbe.cs @@ -20,7 +20,7 @@ public static MediaAnalysis Analyse(string filePath, int outputCapacity = int.Ma } public static MediaAnalysis Analyse(System.IO.Stream stream, int outputCapacity = int.MaxValue) { - var streamPipeSource = new StreamPipeDataWriter(stream); + var streamPipeSource = new StreamPipeSource(stream); var pipeArgument = new InputPipeArgument(streamPipeSource); using var instance = PrepareInstance(pipeArgument.PipePath, outputCapacity); pipeArgument.Pre(); @@ -49,7 +49,7 @@ public static async Task AnalyseAsync(string filePath, int output } public static async Task AnalyseAsync(System.IO.Stream stream, int outputCapacity = int.MaxValue) { - var streamPipeSource = new StreamPipeDataWriter(stream); + var streamPipeSource = new StreamPipeSource(stream); var pipeArgument = new InputPipeArgument(streamPipeSource); using var instance = PrepareInstance(pipeArgument.PipePath, outputCapacity); pipeArgument.Pre();