Make output capacity configureable and set higher default

Fixes #42
This commit is contained in:
Malte Rosenbjerg 2020-03-01 12:55:57 +01:00
parent c0e1742330
commit cdcecda648
5 changed files with 46 additions and 27 deletions

View file

@ -1,19 +0,0 @@
using FFMpegCore.FFMPEG;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace FFMpegCore.Test
{
[TestClass]
public class FFMpegTest
{
[TestMethod]
public void CTOR_Default()
{
var encoder = new FFMpeg();
var probe = new FFProbe();
Assert.IsNotNull(encoder);
Assert.IsNotNull(probe);
}
}
}

View file

@ -0,0 +1,35 @@
using System.IO;
using FFMpegCore.Enums;
using FFMpegCore.FFMPEG;
using FFMpegCore.FFMPEG.Argument;
using FFMpegCore.Test.Resources;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Newtonsoft.Json;
namespace FFMpegCore.Test
{
[TestClass]
public class FFProbeTests
{
[TestMethod]
public void Probe_TooLongOutput()
{
var output = new FFProbe(5);
Assert.ThrowsException<JsonSerializationException>(() =>
{
output.ParseVideoInfo(VideoLibrary.LocalVideo.FullName);
});
}
[TestMethod]
public void Probe_Success()
{
var output = new FFProbe();
var info = output.ParseVideoInfo(VideoLibrary.LocalVideo.FullName);
Assert.AreEqual(13, info.Duration.Seconds);
}
}
}

View file

@ -10,11 +10,13 @@ namespace FFMpegCore.FFMPEG
{
public sealed class FFProbe
{
private readonly int _outputCapacity;
static readonly double BITS_TO_MB = 1024 * 1024 * 8;
private readonly string _ffprobePath;
public FFProbe(): base()
public FFProbe(int outputCapacity = int.MaxValue)
{
_outputCapacity = outputCapacity;
FFProbeHelper.RootExceptionCheck(FFMpegOptions.Options.RootDirectory);
_ffprobePath = FFMpegOptions.Options.FFProbeBinary;
}
@ -45,7 +47,7 @@ public Task<VideoInfo> ParseVideoInfoAsync(string source)
/// <returns>A video info object containing all details necessary.</returns>
public VideoInfo ParseVideoInfo(VideoInfo info)
{
var instance = new Instance(_ffprobePath, BuildFFProbeArguments(info));
var instance = new Instance(_ffprobePath, BuildFFProbeArguments(info)) {DataBufferCapacity = _outputCapacity};
instance.BlockUntilFinished();
var output = string.Join("", instance.OutputData);
return ParseVideoInfoInternal(info, output);
@ -57,7 +59,7 @@ public VideoInfo ParseVideoInfo(VideoInfo info)
/// <returns>A video info object containing all details necessary.</returns>
public async Task<VideoInfo> ParseVideoInfoAsync(VideoInfo info)
{
var instance = new Instance(_ffprobePath, BuildFFProbeArguments(info));
var instance = new Instance(_ffprobePath, BuildFFProbeArguments(info)) {DataBufferCapacity = _outputCapacity};
await instance.FinishedRunning();
var output = string.Join("", instance.OutputData);
return ParseVideoInfoInternal(info, output);

View file

@ -10,9 +10,9 @@
<Version>1.0.12</Version>
<AssemblyVersion>1.1.0.0</AssemblyVersion>
<FileVersion>1.1.0.0</FileVersion>
<PackageReleaseNotes>Add support for drawtext</PackageReleaseNotes>
<PackageReleaseNotes>Add more argument types and make ffprobe output capacity configurable</PackageReleaseNotes>
<LangVersion>8</LangVersion>
<PackageVersion>1.2.0</PackageVersion>
<PackageVersion>1.3.0</PackageVersion>
<Authors>Vlad Jerca, Malte Rosenbjerg</Authors>
<PackageTags>ffmpeg ffprobe convert video audio mediafile resize analyze muxing</PackageTags>
<RepositoryType>GitHub</RepositoryType>

View file

@ -12,7 +12,7 @@ public class VideoInfo
/// Create a video information object from a file information object.
/// </summary>
/// <param name="fileInfo">Video file information.</param>
public VideoInfo(FileInfo fileInfo)
public VideoInfo(FileInfo fileInfo, int outputCapacity = int.MaxValue)
{
fileInfo.Refresh();
@ -21,14 +21,15 @@ public VideoInfo(FileInfo fileInfo)
_file = fileInfo;
new FFProbe().ParseVideoInfo(this);
new FFProbe(outputCapacity).ParseVideoInfo(this);
}
/// <summary>
/// Create a video information object from a target path.
/// </summary>
/// <param name="path">Path to video.</param>
public VideoInfo(string path) : this(new FileInfo(path)) { }
/// <param name="outputCapacity">Max amount of outputlines</param>
public VideoInfo(string path, int outputCapacity = int.MaxValue) : this(new FileInfo(path), outputCapacity) { }
/// <summary>
/// Duration of the video file.