Browse Source

only scale to even dimensions (#187)

pull/188/head
Jason Dove 5 years ago committed by GitHub
parent
commit
9112cb3c1f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 27
      ErsatzTV.Core.Tests/FFmpeg/FFmpegPlaybackSettingsCalculatorTests.cs
  2. 4
      ErsatzTV.Core/FFmpeg/FFmpegPlaybackSettingsCalculator.cs

27
ErsatzTV.Core.Tests/FFmpeg/FFmpegPlaybackSettingsCalculatorTests.cs

@ -1,6 +1,7 @@ @@ -1,6 +1,7 @@
using System;
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.FFmpeg;
using ErsatzTV.Core.Interfaces.FFmpeg;
using FluentAssertions;
using NUnit.Framework;
@ -276,6 +277,32 @@ namespace ErsatzTV.Core.Tests.FFmpeg @@ -276,6 +277,32 @@ namespace ErsatzTV.Core.Tests.FFmpeg
actual.ScaledSize.IsNone.Should().BeTrue();
actual.PadToDesiredResolution.Should().BeTrue();
}
[Test]
public void Should_ScaleToEvenDimensions_ForTransportStream()
{
FFmpegProfile ffmpegProfile = TestProfile() with
{
NormalizeVideo = true,
Resolution = new Resolution { Width = 1280, Height = 720 }
};
var version = new MediaVersion { Width = 706, Height = 362, SampleAspectRatio = "32:27" };
FFmpegPlaybackSettings actual = _calculator.CalculateSettings(
StreamingMode.TransportStream,
ffmpegProfile,
version,
new MediaStream(),
new MediaStream(),
DateTimeOffset.Now,
DateTimeOffset.Now);
IDisplaySize scaledSize = actual.ScaledSize.IfNone(new MediaVersion { Width = 0, Height = 0 });
scaledSize.Width.Should().Be(1280);
scaledSize.Height.Should().Be(554);
actual.PadToDesiredResolution.Should().BeTrue();
}
[Test]
public void Should_NotPadToDesiredResolution_When_UnscaledContentIsUnderSized_ForHttpLiveStreaming()

4
ErsatzTV.Core/FFmpeg/FFmpegPlaybackSettingsCalculator.cs

@ -79,7 +79,9 @@ namespace ErsatzTV.Core.FFmpeg @@ -79,7 +79,9 @@ namespace ErsatzTV.Core.FFmpeg
IDisplaySize scaledSize = CalculateScaledSize(ffmpegProfile, version);
if (!scaledSize.IsSameSizeAs(version))
{
result.ScaledSize = Some(CalculateScaledSize(ffmpegProfile, version));
int fixedHeight = scaledSize.Height + (scaledSize.Height % 2);
int fixedWidth = scaledSize.Width + (scaledSize.Width % 2);
result.ScaledSize = Some((IDisplaySize)new DisplaySize(fixedWidth, fixedHeight));
}
}

Loading…
Cancel
Save