mirror of
https://github.com/rosenbjerg/FFMpegCore.git
synced 2024-11-10 08:34:12 +01:00
Added Unit tests for input and output pipes
Former-commit-id: 5991cc99f0
This commit is contained in:
parent
2a6347e1db
commit
5edd89dc90
1 changed files with 122 additions and 2 deletions
|
@ -1,6 +1,7 @@
|
||||||
using FFMpegCore.Enums;
|
using FFMpegCore.Enums;
|
||||||
using FFMpegCore.FFMPEG.Argument;
|
using FFMpegCore.FFMPEG.Argument;
|
||||||
using FFMpegCore.FFMPEG.Enums;
|
using FFMpegCore.FFMPEG.Enums;
|
||||||
|
using FFMpegCore.FFMPEG.Exceptions;
|
||||||
using FFMpegCore.FFMPEG.Pipes;
|
using FFMpegCore.FFMPEG.Pipes;
|
||||||
using FFMpegCore.Test.Resources;
|
using FFMpegCore.Test.Resources;
|
||||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||||
|
@ -62,7 +63,7 @@ public bool Convert(VideoType type, bool multithreaded = false, VideoSize size =
|
||||||
File.Delete(output.FullName);
|
File.Delete(output.FullName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ConvertFromStreamPipe(VideoType type, ArgumentContainer container)
|
private void ConvertFromStreamPipe(VideoType type, ArgumentContainer container)
|
||||||
{
|
{
|
||||||
var output = Input.OutputLocation(type);
|
var output = Input.OutputLocation(type);
|
||||||
|
@ -118,6 +119,54 @@ private void ConvertFromStreamPipe(VideoType type, ArgumentContainer container)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ConvertToStreamPipe(VideoType type, ArgumentContainer container)
|
||||||
|
{
|
||||||
|
using (var ms = new MemoryStream())
|
||||||
|
{
|
||||||
|
var input = VideoInfo.FromFileInfo(VideoLibrary.LocalVideo);
|
||||||
|
var arguments = new ArgumentContainer { new InputArgument(input) };
|
||||||
|
|
||||||
|
foreach (var arg in container)
|
||||||
|
{
|
||||||
|
arguments.Add(arg.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
var streamPipeDataReader = new StreamPipeDataReader(ms);
|
||||||
|
streamPipeDataReader.BlockSize = streamPipeDataReader.BlockSize * 16;
|
||||||
|
arguments.Add(new OutputPipeArgument(streamPipeDataReader));
|
||||||
|
|
||||||
|
var scaling = container.Find<ScaleArgument>();
|
||||||
|
|
||||||
|
Encoder.Convert(arguments);
|
||||||
|
|
||||||
|
ms.Position = 0;
|
||||||
|
var outputVideo = VideoInfo.FromStream(ms);
|
||||||
|
|
||||||
|
Assert.IsTrue(Math.Abs((outputVideo.Duration - input.Duration).TotalMilliseconds) < 1000.0 / input.FrameRate);
|
||||||
|
|
||||||
|
if (scaling == null)
|
||||||
|
{
|
||||||
|
Assert.AreEqual(outputVideo.Width, input.Width);
|
||||||
|
Assert.AreEqual(outputVideo.Height, input.Height);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (scaling.Value.Width != -1)
|
||||||
|
{
|
||||||
|
Assert.AreEqual(outputVideo.Width, scaling.Value.Width);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (scaling.Value.Height != -1)
|
||||||
|
{
|
||||||
|
Assert.AreEqual(outputVideo.Height, scaling.Value.Height);
|
||||||
|
}
|
||||||
|
|
||||||
|
Assert.AreNotEqual(outputVideo.Width, input.Width);
|
||||||
|
Assert.AreNotEqual(outputVideo.Height, input.Height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void Convert(VideoType type, ArgumentContainer container)
|
public void Convert(VideoType type, ArgumentContainer container)
|
||||||
{
|
{
|
||||||
var output = Input.OutputLocation(type);
|
var output = Input.OutputLocation(type);
|
||||||
|
@ -255,6 +304,78 @@ public void Video_ToMP4_Args_StreamPipe()
|
||||||
ConvertFromStreamPipe(VideoType.Mp4, container);
|
ConvertFromStreamPipe(VideoType.Mp4, container);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public void Video_ToMP4_Args_StreamOutputPipe_Async_Failure()
|
||||||
|
{
|
||||||
|
Assert.ThrowsException<FFMpegException>(() =>
|
||||||
|
{
|
||||||
|
using (var ms = new MemoryStream())
|
||||||
|
{
|
||||||
|
var pipeSource = new StreamPipeDataReader(ms);
|
||||||
|
var container = new ArgumentContainer
|
||||||
|
{
|
||||||
|
new InputArgument(VideoLibrary.LocalVideo),
|
||||||
|
new VideoCodecArgument(VideoCodec.LibX264),
|
||||||
|
new ForceFormatArgument("mkv"),
|
||||||
|
new OutputPipeArgument(pipeSource)
|
||||||
|
};
|
||||||
|
|
||||||
|
var input = VideoInfo.FromFileInfo(VideoLibrary.LocalVideoWebm);
|
||||||
|
Encoder.ConvertAsync(container).WaitForResult();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public void Video_ToMP4_Args_StreamOutputPipe_Failure()
|
||||||
|
{
|
||||||
|
Assert.ThrowsException<FFMpegException>(() =>
|
||||||
|
{
|
||||||
|
var container = new ArgumentContainer
|
||||||
|
{
|
||||||
|
new ForceFormatArgument("mkv")
|
||||||
|
};
|
||||||
|
ConvertToStreamPipe(VideoType.Mp4, container);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public void Video_ToMP4_Args_StreamOutputPipe_Async()
|
||||||
|
{
|
||||||
|
Assert.ThrowsException<FFMpegException>(() =>
|
||||||
|
{
|
||||||
|
using (var ms = new MemoryStream())
|
||||||
|
{
|
||||||
|
var pipeSource = new StreamPipeDataReader(ms);
|
||||||
|
var container = new ArgumentContainer
|
||||||
|
{
|
||||||
|
new InputArgument(VideoLibrary.LocalVideo),
|
||||||
|
new VideoCodecArgument(VideoCodec.LibX264),
|
||||||
|
new ForceFormatArgument("mp4"),
|
||||||
|
new OutputPipeArgument(pipeSource)
|
||||||
|
};
|
||||||
|
|
||||||
|
var input = VideoInfo.FromFileInfo(VideoLibrary.LocalVideoWebm);
|
||||||
|
Encoder.ConvertAsync(container).WaitForResult();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public void Video_ToMP4_Args_StreamOutputPipe()
|
||||||
|
{
|
||||||
|
Assert.ThrowsException<FFMpegException>(() =>
|
||||||
|
{
|
||||||
|
var container = new ArgumentContainer
|
||||||
|
{
|
||||||
|
new VideoCodecArgument(VideoCodec.LibX264),
|
||||||
|
new ForceFormatArgument("mp4")
|
||||||
|
};
|
||||||
|
ConvertToStreamPipe(VideoType.Mp4, container);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void Video_ToTS()
|
public void Video_ToTS()
|
||||||
{
|
{
|
||||||
|
@ -278,7 +399,6 @@ public void Video_ToTS_Args_Pipe()
|
||||||
{
|
{
|
||||||
var container = new ArgumentContainer
|
var container = new ArgumentContainer
|
||||||
{
|
{
|
||||||
new CopyArgument(),
|
|
||||||
new ForceFormatArgument(VideoCodec.MpegTs)
|
new ForceFormatArgument(VideoCodec.MpegTs)
|
||||||
};
|
};
|
||||||
ConvertFromPipe(VideoType.Ts, container);
|
ConvertFromPipe(VideoType.Ts, container);
|
||||||
|
|
Loading…
Reference in a new issue