mirror of
https://github.com/rosenbjerg/FFMpegCore.git
synced 2025-12-17 19:45:44 +00:00
Compare commits
11 commits
7a2b09bf17
...
c38c308630
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c38c308630 | ||
|
|
55d526ce92 | ||
|
|
ebe60ef5da | ||
|
|
e12bc2a148 | ||
|
|
736420e916 | ||
|
|
f9a3f2b0dc | ||
|
|
1442c08e37 | ||
|
|
cdf2dd5b65 | ||
|
|
3c6cb1fb43 | ||
|
|
df03c58081 | ||
|
|
2a16824e69 |
4 changed files with 32 additions and 12 deletions
|
|
@ -171,7 +171,7 @@ public class VideoTest
|
|||
{
|
||||
using var outputFile = new TemporaryFile($"out{VideoType.Mp4.Extension}");
|
||||
|
||||
var videoFramesSource = new RawVideoPipeSource(BitmapSource.CreateBitmaps(128, pixelFormat, 256, 256));
|
||||
var videoFramesSource = new RawVideoPipeSource(BitmapSource.CreateBitmaps(64, pixelFormat, 256, 256));
|
||||
var success = FFMpegArguments
|
||||
.FromPipeInput(videoFramesSource)
|
||||
.OutputToFile(outputFile, false, opt => opt
|
||||
|
|
@ -491,7 +491,7 @@ public class VideoTest
|
|||
private static async Task Video_ToTS_Args_Pipe_Internal(dynamic pixelFormat, CancellationToken cancellationToken)
|
||||
{
|
||||
using var output = new TemporaryFile($"out{VideoType.Ts.Extension}");
|
||||
var input = new RawVideoPipeSource(BitmapSource.CreateBitmaps(128, pixelFormat, 256, 256));
|
||||
var input = new RawVideoPipeSource(BitmapSource.CreateBitmaps(64, pixelFormat, 256, 256));
|
||||
|
||||
var success = await FFMpegArguments
|
||||
.FromPipeInput(input)
|
||||
|
|
@ -528,7 +528,7 @@ public class VideoTest
|
|||
public void RawVideoPipeSource_Ogv_Scale(SKColorType pixelFormat)
|
||||
{
|
||||
using var outputFile = new TemporaryFile($"out{VideoType.Ogv.Extension}");
|
||||
var videoFramesSource = new RawVideoPipeSource(BitmapSource.CreateBitmaps(128, pixelFormat, 256, 256));
|
||||
var videoFramesSource = new RawVideoPipeSource(BitmapSource.CreateBitmaps(64, pixelFormat, 256, 256));
|
||||
|
||||
FFMpegArguments
|
||||
.FromPipeInput(videoFramesSource)
|
||||
|
|
@ -582,7 +582,7 @@ public class VideoTest
|
|||
private static void Video_ToMP4_Resize_Args_Pipe_Internal(dynamic pixelFormat, CancellationToken cancellationToken)
|
||||
{
|
||||
using var outputFile = new TemporaryFile($"out{VideoType.Mp4.Extension}");
|
||||
var videoFramesSource = new RawVideoPipeSource(BitmapSource.CreateBitmaps(128, pixelFormat, 256, 256));
|
||||
var videoFramesSource = new RawVideoPipeSource(BitmapSource.CreateBitmaps(64, pixelFormat, 256, 256));
|
||||
|
||||
var success = FFMpegArguments
|
||||
.FromPipeInput(videoFramesSource)
|
||||
|
|
@ -944,7 +944,7 @@ public class VideoTest
|
|||
{
|
||||
using var resStream = new MemoryStream();
|
||||
var reader = new StreamPipeSink(resStream);
|
||||
var writer = new RawVideoPipeSource(BitmapSource.CreateBitmaps(128, pixelFormat, 128, 128));
|
||||
var writer = new RawVideoPipeSource(BitmapSource.CreateBitmaps(64, pixelFormat, 128, 128));
|
||||
|
||||
FFMpegArguments
|
||||
.FromPipeInput(writer)
|
||||
|
|
@ -1139,13 +1139,12 @@ public class VideoTest
|
|||
|
||||
[TestMethod]
|
||||
[Timeout(BaseTimeoutMilliseconds, CooperativeCancellation = true)]
|
||||
public void Video_Cancel_CancellationToken_Before_Throws()
|
||||
public void Video_Cancel_CancellationToken_BeforeProcessing_Throws()
|
||||
{
|
||||
using var outputFile = new TemporaryFile("out.mp4");
|
||||
|
||||
using var cts = CancellationTokenSource.CreateLinkedTokenSource(TestContext.CancellationToken);
|
||||
|
||||
cts.Cancel();
|
||||
var task = FFMpegArguments
|
||||
.FromFileInput("testsrc2=size=320x240[out0]; sine[out1]", false, args => args
|
||||
.WithCustomArgument("-re")
|
||||
|
|
@ -1156,8 +1155,29 @@ public class VideoTest
|
|||
.WithSpeedPreset(Speed.VeryFast))
|
||||
.CancellableThrough(cts.Token);
|
||||
|
||||
Assert.ThrowsExactly<OperationCanceledException>(() => task.CancellableThrough(TestContext.CancellationToken)
|
||||
.ProcessSynchronously());
|
||||
cts.Cancel();
|
||||
Assert.ThrowsExactly<OperationCanceledException>(() => task.ProcessSynchronously());
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
[Timeout(BaseTimeoutMilliseconds, CooperativeCancellation = true)]
|
||||
public void Video_Cancel_CancellationToken_BeforePassing_Throws()
|
||||
{
|
||||
using var outputFile = new TemporaryFile("out.mp4");
|
||||
|
||||
using var cts = CancellationTokenSource.CreateLinkedTokenSource(TestContext.CancellationToken);
|
||||
cts.Cancel();
|
||||
|
||||
var task = FFMpegArguments
|
||||
.FromFileInput("testsrc2=size=320x240[out0]; sine[out1]", false, args => args
|
||||
.WithCustomArgument("-re")
|
||||
.ForceFormat("lavfi"))
|
||||
.OutputToFile(outputFile, false, opt => opt
|
||||
.WithAudioCodec(AudioCodec.Aac)
|
||||
.WithVideoCodec(VideoCodec.LibX264)
|
||||
.WithSpeedPreset(Speed.VeryFast));
|
||||
|
||||
Assert.ThrowsExactly<OperationCanceledException>(() => task.CancellableThrough(cts.Token));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
|
|
|
|||
|
|
@ -26,8 +26,7 @@ public class FFMetadataBuilder
|
|||
|
||||
public FFMetadataBuilder WithChapter(string title, double durationSeconds)
|
||||
{
|
||||
Chapters.Add(new FFMetadataChapter(title, Convert.ToInt64(durationSeconds * 1000)));
|
||||
return this;
|
||||
return WithChapter(title, Convert.ToInt64(durationSeconds * 1000));
|
||||
}
|
||||
|
||||
public string GetMetadataFileContent()
|
||||
|
|
|
|||
|
|
@ -297,7 +297,7 @@ public static class FFMpeg
|
|||
{
|
||||
if (Path.GetExtension(input) != Path.GetExtension(output))
|
||||
{
|
||||
output = Path.Combine(Path.GetDirectoryName(output), Path.GetFileNameWithoutExtension(output), Path.GetExtension(input));
|
||||
output = Path.ChangeExtension(output, Path.GetExtension(input));
|
||||
}
|
||||
|
||||
return FFMpegArguments
|
||||
|
|
|
|||
|
|
@ -85,6 +85,7 @@ public class FFMpegArgumentProcessor
|
|||
|
||||
public FFMpegArgumentProcessor CancellableThrough(CancellationToken token, int timeout = 0)
|
||||
{
|
||||
token.ThrowIfCancellationRequested();
|
||||
_cancellationTokenRegistration?.Dispose();
|
||||
_cancellationTokenRegistration = token.Register(() => Cancel(timeout));
|
||||
return this;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue