From 9112cb3c1fc35206f0ff9528aaf3f44269558c6a Mon Sep 17 00:00:00 2001 From: Jason Dove Date: Sun, 16 May 2021 15:47:44 -0500 Subject: [PATCH] only scale to even dimensions (#187) --- .../FFmpegPlaybackSettingsCalculatorTests.cs | 27 +++++++++++++++++++ .../FFmpegPlaybackSettingsCalculator.cs | 4 ++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/ErsatzTV.Core.Tests/FFmpeg/FFmpegPlaybackSettingsCalculatorTests.cs b/ErsatzTV.Core.Tests/FFmpeg/FFmpegPlaybackSettingsCalculatorTests.cs index 3f941b846..ef2255200 100644 --- a/ErsatzTV.Core.Tests/FFmpeg/FFmpegPlaybackSettingsCalculatorTests.cs +++ b/ErsatzTV.Core.Tests/FFmpeg/FFmpegPlaybackSettingsCalculatorTests.cs @@ -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 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() diff --git a/ErsatzTV.Core/FFmpeg/FFmpegPlaybackSettingsCalculator.cs b/ErsatzTV.Core/FFmpeg/FFmpegPlaybackSettingsCalculator.cs index 122fa16ff..a2d725709 100644 --- a/ErsatzTV.Core/FFmpeg/FFmpegPlaybackSettingsCalculator.cs +++ b/ErsatzTV.Core/FFmpeg/FFmpegPlaybackSettingsCalculator.cs @@ -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)); } }