Add tests for ComputeEqualLengthSegments and fix bug
This commit is contained in:
parent
c7b25a9fe4
commit
3e5cb8e04e
|
@ -221,7 +221,14 @@ namespace Jellyfin.MediaEncoding.Hls.Playlist
|
|||
|
||||
internal static double[] ComputeEqualLengthSegments(long desiredSegmentLengthMs, long totalRuntimeTicks)
|
||||
{
|
||||
var segmentLengthTicks = TimeSpan.FromMilliseconds(desiredSegmentLengthMs).Ticks;
|
||||
if (desiredSegmentLengthMs == 0 || totalRuntimeTicks == 0)
|
||||
{
|
||||
throw new InvalidOperationException($"Invalid segment length ({desiredSegmentLengthMs}) or runtime ticks ({totalRuntimeTicks})");
|
||||
}
|
||||
|
||||
var desiredSegmentLength = TimeSpan.FromMilliseconds(desiredSegmentLengthMs);
|
||||
|
||||
var segmentLengthTicks = desiredSegmentLength.Ticks;
|
||||
var wholeSegments = totalRuntimeTicks / segmentLengthTicks;
|
||||
var remainingTicks = totalRuntimeTicks % segmentLengthTicks;
|
||||
|
||||
|
@ -229,7 +236,7 @@ namespace Jellyfin.MediaEncoding.Hls.Playlist
|
|||
var segments = new double[segmentsLen];
|
||||
for (int i = 0; i < wholeSegments; i++)
|
||||
{
|
||||
segments[i] = desiredSegmentLengthMs;
|
||||
segments[i] = desiredSegmentLength.TotalSeconds;
|
||||
}
|
||||
|
||||
if (remainingTicks != 0)
|
||||
|
|
|
@ -1,10 +1,26 @@
|
|||
using Jellyfin.MediaEncoding.Hls.Playlist;
|
||||
using System;
|
||||
using Jellyfin.MediaEncoding.Hls.Playlist;
|
||||
using Xunit;
|
||||
|
||||
namespace Jellyfin.MediaEncoding.Hls.Tests.Playlist
|
||||
{
|
||||
public class DynamicHlsPlaylistGeneratorTests
|
||||
{
|
||||
[Theory]
|
||||
[MemberData(nameof(ComputeEqualLengthSegments_Valid_Success_Data))]
|
||||
public void ComputeEqualLengthSegments_Valid_Success(long desiredSegmentLengthMs, long totalRuntimeTicks, double[] segments)
|
||||
{
|
||||
Assert.Equal(segments, DynamicHlsPlaylistGenerator.ComputeEqualLengthSegments(desiredSegmentLengthMs, totalRuntimeTicks));
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(0, 1000000)]
|
||||
[InlineData(1000, 0)]
|
||||
public void ComputeEqualLengthSegments_Invalid_ThrowsInvalidOperationException(long desiredSegmentLengthMs, long totalRuntimeTicks)
|
||||
{
|
||||
Assert.Throws<InvalidOperationException>(() => DynamicHlsPlaylistGenerator.ComputeEqualLengthSegments(desiredSegmentLengthMs, totalRuntimeTicks));
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("testfile.mkv", new string[0], false)]
|
||||
[InlineData("testfile.flv", new[] { "mp4", "mkv", "ts" }, false)]
|
||||
|
@ -21,5 +37,19 @@ namespace Jellyfin.MediaEncoding.Hls.Tests.Playlist
|
|||
{
|
||||
Assert.False(DynamicHlsPlaylistGenerator.IsExtractionAllowedForFile(filePath, allowedExtensions));
|
||||
}
|
||||
|
||||
private static TheoryData<long, long, double[]> ComputeEqualLengthSegments_Valid_Success_Data()
|
||||
{
|
||||
var data = new TheoryData<long, long, double[]>
|
||||
{
|
||||
{ 6000, TimeSpan.FromMilliseconds(13000).Ticks, new[] { 6.0, 6.0, 1.0 } },
|
||||
{ 3000, TimeSpan.FromMilliseconds(15000).Ticks, new[] { 3.0, 3.0, 3.0, 3.0, 3.0 } },
|
||||
{ 6000, TimeSpan.FromMilliseconds(25000).Ticks, new[] { 6.0, 6.0, 6.0, 6.0, 1.0 } },
|
||||
{ 6000, TimeSpan.FromMilliseconds(20123).Ticks, new[] { 6.0, 6.0, 6.0, 2.123 } },
|
||||
{ 6000, TimeSpan.FromMilliseconds(1234).Ticks, new[] { 1.234 } }
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user