From 6f8ccab788e85e025eaa44b67a1487bf419afb53 Mon Sep 17 00:00:00 2001 From: Bond_009 Date: Sat, 19 Jun 2021 18:02:33 +0200 Subject: Move non-jellyfin extensions to separate project --- .../Entities/JsonLowerCaseConverter.cs | 29 ---------------------- MediaBrowser.Model/Entities/VirtualFolderInfo.cs | 1 + 2 files changed, 1 insertion(+), 29 deletions(-) delete mode 100644 MediaBrowser.Model/Entities/JsonLowerCaseConverter.cs (limited to 'MediaBrowser.Model/Entities') diff --git a/MediaBrowser.Model/Entities/JsonLowerCaseConverter.cs b/MediaBrowser.Model/Entities/JsonLowerCaseConverter.cs deleted file mode 100644 index 7c627f0e3..000000000 --- a/MediaBrowser.Model/Entities/JsonLowerCaseConverter.cs +++ /dev/null @@ -1,29 +0,0 @@ -#nullable disable -// THIS IS A HACK -// TODO: @bond Move to separate project - -using System; -using System.Text.Json; -using System.Text.Json.Serialization; - -namespace MediaBrowser.Model.Entities -{ - /// - /// Converts an object to a lowercase string. - /// - /// The object type. - public class JsonLowerCaseConverter : JsonConverter - { - /// - public override T Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) - { - return JsonSerializer.Deserialize(ref reader, options); - } - - /// - public override void Write(Utf8JsonWriter writer, T value, JsonSerializerOptions options) - { - writer.WriteStringValue(value?.ToString().ToLowerInvariant()); - } - } -} diff --git a/MediaBrowser.Model/Entities/VirtualFolderInfo.cs b/MediaBrowser.Model/Entities/VirtualFolderInfo.cs index 8fed392b9..2b2bda12c 100644 --- a/MediaBrowser.Model/Entities/VirtualFolderInfo.cs +++ b/MediaBrowser.Model/Entities/VirtualFolderInfo.cs @@ -3,6 +3,7 @@ using System; using System.Text.Json.Serialization; +using Jellyfin.Extensions.Json.Converters; using MediaBrowser.Model.Configuration; namespace MediaBrowser.Model.Entities -- cgit v1.2.3 From bcae195cc3dc0b4c39acb00b7c4590c871daf61c Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Sat, 3 Jul 2021 01:32:57 +0200 Subject: Refactor GetResolutionText This improves GetResolutionText a little by making it easier to read and better parsing resolutions (Also adding a few new ones like PAL resolutions and 8K) Co-authored-by: Maxr1998 --- MediaBrowser.Model/Entities/MediaStream.cs | 75 +++++++++--------------------- 1 file changed, 22 insertions(+), 53 deletions(-) (limited to 'MediaBrowser.Model/Entities') diff --git a/MediaBrowser.Model/Entities/MediaStream.cs b/MediaBrowser.Model/Entities/MediaStream.cs index c67f30d04..bc3586ff2 100644 --- a/MediaBrowser.Model/Entities/MediaStream.cs +++ b/MediaBrowser.Model/Entities/MediaStream.cs @@ -471,62 +471,31 @@ namespace MediaBrowser.Model.Entities private string GetResolutionText() { - var i = this; - - if (i.Width.HasValue && i.Height.HasValue) + if (!this.Width.HasValue || !this.Height.HasValue) { - var width = i.Width.Value; - var height = i.Height.Value; - - if (width >= 3800 || height >= 2000) - { - return "4K"; - } - - if (width >= 2500) - { - if (i.IsInterlaced) - { - return "1440i"; - } - - return "1440p"; - } - - if (width >= 1900 || height >= 1000) - { - if (i.IsInterlaced) - { - return "1080i"; - } - - return "1080p"; - } - - if (width >= 1260 || height >= 700) - { - if (i.IsInterlaced) - { - return "720i"; - } - - return "720p"; - } - - if (width >= 700 || height >= 440) - { - if (i.IsInterlaced) - { - return "480i"; - } - - return "480p"; - } - - return "SD"; + return null; } - return null; + var width = this.Width.Value; + var height = this.Height.Value; + + return width switch + { + <= 720 when height <= 480 => this.IsInterlaced ? "480i" : "480p", + // 720x576 (PAL) (768 when rescaled for square pixels) + <= 768 when height <= 576 => this.IsInterlaced ? "576i" : "576p", + // 960x540 (sometimes 544 which is multiple of 16) + <= 960 when height <= 544 => this.IsInterlaced ? "540i" : "540p", + // 1280x720 + <= 1280 when height <= 962 => this.IsInterlaced ? "720i" : "720p", + // 1920x1080 + <= 1920 when height <= 1440 => this.IsInterlaced ? "1080i" : "1080p", + // 4K + <= 4096 when height <= 3072 => "4K", + // 8K + <= 8192 when height <= 6144 => "8K", + _ => null + }; } public static bool IsTextFormat(string format) -- cgit v1.2.3 From a25c3d1cdaf185c40f36f9271dc8805ff3c5a374 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Sun, 4 Jul 2021 10:22:17 +0200 Subject: Remove usage of this in GetResolutionText --- MediaBrowser.Model/Entities/MediaStream.cs | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) (limited to 'MediaBrowser.Model/Entities') diff --git a/MediaBrowser.Model/Entities/MediaStream.cs b/MediaBrowser.Model/Entities/MediaStream.cs index bc3586ff2..275b438f5 100644 --- a/MediaBrowser.Model/Entities/MediaStream.cs +++ b/MediaBrowser.Model/Entities/MediaStream.cs @@ -471,29 +471,26 @@ namespace MediaBrowser.Model.Entities private string GetResolutionText() { - if (!this.Width.HasValue || !this.Height.HasValue) + if (!Width.HasValue || !Height.HasValue) { return null; } - var width = this.Width.Value; - var height = this.Height.Value; - - return width switch + return Width switch { - <= 720 when height <= 480 => this.IsInterlaced ? "480i" : "480p", + <= 720 when Height <= 480 => IsInterlaced ? "480i" : "480p", // 720x576 (PAL) (768 when rescaled for square pixels) - <= 768 when height <= 576 => this.IsInterlaced ? "576i" : "576p", + <= 768 when Height <= 576 => IsInterlaced ? "576i" : "576p", // 960x540 (sometimes 544 which is multiple of 16) - <= 960 when height <= 544 => this.IsInterlaced ? "540i" : "540p", + <= 960 when Height <= 544 => IsInterlaced ? "540i" : "540p", // 1280x720 - <= 1280 when height <= 962 => this.IsInterlaced ? "720i" : "720p", + <= 1280 when Height <= 962 => IsInterlaced ? "720i" : "720p", // 1920x1080 - <= 1920 when height <= 1440 => this.IsInterlaced ? "1080i" : "1080p", + <= 1920 when Height <= 1440 => IsInterlaced ? "1080i" : "1080p", // 4K - <= 4096 when height <= 3072 => "4K", + <= 4096 when Height <= 3072 => "4K", // 8K - <= 8192 when height <= 6144 => "8K", + <= 8192 when Height <= 6144 => "8K", _ => null }; } -- cgit v1.2.3 From 0512f74459f7fbde7e86d0724be6a62eca083024 Mon Sep 17 00:00:00 2001 From: Bond_009 Date: Tue, 20 Jul 2021 19:31:47 +0200 Subject: Add tests for GetResolutionText --- MediaBrowser.Model/Entities/MediaStream.cs | 2 +- MediaBrowser.Model/Properties/AssemblyInfo.cs | 2 + .../Entities/MediaStreamTests.cs | 75 ++++++++++++++++++++++ 3 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 tests/Jellyfin.Model.Tests/Entities/MediaStreamTests.cs (limited to 'MediaBrowser.Model/Entities') diff --git a/MediaBrowser.Model/Entities/MediaStream.cs b/MediaBrowser.Model/Entities/MediaStream.cs index 275b438f5..9653a8ece 100644 --- a/MediaBrowser.Model/Entities/MediaStream.cs +++ b/MediaBrowser.Model/Entities/MediaStream.cs @@ -469,7 +469,7 @@ namespace MediaBrowser.Model.Entities /// true if this instance is anamorphic; otherwise, false. public bool? IsAnamorphic { get; set; } - private string GetResolutionText() + internal string GetResolutionText() { if (!Width.HasValue || !Height.HasValue) { diff --git a/MediaBrowser.Model/Properties/AssemblyInfo.cs b/MediaBrowser.Model/Properties/AssemblyInfo.cs index f99e9ece9..e50baf604 100644 --- a/MediaBrowser.Model/Properties/AssemblyInfo.cs +++ b/MediaBrowser.Model/Properties/AssemblyInfo.cs @@ -1,5 +1,6 @@ using System.Reflection; using System.Resources; +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following @@ -14,6 +15,7 @@ using System.Runtime.InteropServices; [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: NeutralResourcesLanguage("en")] +[assembly: InternalsVisibleTo("Jellyfin.Model.Tests")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from diff --git a/tests/Jellyfin.Model.Tests/Entities/MediaStreamTests.cs b/tests/Jellyfin.Model.Tests/Entities/MediaStreamTests.cs new file mode 100644 index 000000000..43ffa84bf --- /dev/null +++ b/tests/Jellyfin.Model.Tests/Entities/MediaStreamTests.cs @@ -0,0 +1,75 @@ +using MediaBrowser.Model.Entities; +using Xunit; + +namespace Jellyfin.Model.Tests.Entities +{ + public class MediaStreamTests + { + [Theory] + [InlineData(null, null, false, null)] + [InlineData(null, 0, false, null)] + [InlineData(0, null, false, null)] + [InlineData(640, 480, false, "480p")] + [InlineData(640, 480, true, "480i")] + [InlineData(720, 576, false, "576p")] + [InlineData(720, 576, true, "576i")] + [InlineData(960, 540, false, "540p")] + [InlineData(960, 540, true, "540i")] + [InlineData(1280, 720, false, "720p")] + [InlineData(1280, 720, true, "720i")] + [InlineData(1920, 1080, false, "1080p")] + [InlineData(1920, 1080, true, "1080i")] + [InlineData(4096, 3072, false, "4K")] + [InlineData(8192, 6144, false, "8K")] + [InlineData(512, 384, false, "480p")] + [InlineData(576, 336, false, "480p")] + [InlineData(624, 352, false, "480p")] + [InlineData(640, 352, false, "480p")] + [InlineData(704, 396, false, "480p")] + [InlineData(720, 404, false, "480p")] + [InlineData(720, 480, false, "480p")] + [InlineData(768, 576, false, "576p")] + [InlineData(960, 720, false, "720p")] + [InlineData(1280, 528, false, "720p")] + [InlineData(1280, 532, false, "720p")] + [InlineData(1280, 534, false, "720p")] + [InlineData(1280, 536, false, "720p")] + [InlineData(1280, 544, false, "720p")] + [InlineData(1280, 690, false, "720p")] + [InlineData(1280, 694, false, "720p")] + [InlineData(1280, 696, false, "720p")] + [InlineData(1280, 716, false, "720p")] + [InlineData(1280, 718, false, "720p")] + [InlineData(1912, 792, false, "1080p")] + [InlineData(1916, 1076, false, "1080p")] + [InlineData(1918, 1080, false, "1080p")] + [InlineData(1920, 796, false, "1080p")] + [InlineData(1920, 800, false, "1080p")] + [InlineData(1920, 802, false, "1080p")] + [InlineData(1920, 804, false, "1080p")] + [InlineData(1920, 808, false, "1080p")] + [InlineData(1920, 816, false, "1080p")] + [InlineData(1920, 856, false, "1080p")] + [InlineData(1920, 960, false, "1080p")] + [InlineData(1920, 1024, false, "1080p")] + [InlineData(1920, 1040, false, "1080p")] + [InlineData(1920, 1072, false, "1080p")] + [InlineData(1440, 1072, false, "1080p")] + [InlineData(1440, 1080, false, "1080p")] + [InlineData(3840, 1600, false, "4K")] + [InlineData(3840, 1606, false, "4K")] + [InlineData(3840, 1608, false, "4K")] + [InlineData(3840, 2160, false, "4K")] + public void GetResolutionText_Valid(int? width, int? height, bool interlaced, string expected) + { + var mediaStream = new MediaStream() + { + Width = width, + Height = height, + IsInterlaced = interlaced + }; + + Assert.Equal(expected, mediaStream.GetResolutionText()); + } + } +} -- cgit v1.2.3