Pārlūkot izejas kodu

Revert "Merge pull request #5943 from Maxr1998/device-profile-defaults"

This PR broke direct play in JMP and caused aspect ratio issues in web.

This reverts commit 4c8df4c5bbc7138ec23066b98de17cdb405e9fe0.
Joshua M. Boniface 4 gadi atpakaļ
vecāks
revīzija
b7c3510da1

+ 7 - 19
Emby.Dlna/Didl/DidlBuilder.cs

@@ -974,28 +974,15 @@ namespace Emby.Dlna.Didl
                 return;
             }
 
-            // TODO: Remove these default values
-            var albumArtUrlInfo = GetImageUrl(
-                imageInfo,
-                _profile.MaxAlbumArtWidth ?? 10000,
-                _profile.MaxAlbumArtHeight ?? 10000,
-                "jpg");
+            var albumartUrlInfo = GetImageUrl(imageInfo, _profile.MaxAlbumArtWidth, _profile.MaxAlbumArtHeight, "jpg");
 
             writer.WriteStartElement("upnp", "albumArtURI", NsUpnp);
-            if (!string.IsNullOrEmpty(_profile.AlbumArtPn))
-            {
-                writer.WriteAttributeString("dlna", "profileID", NsDlna, _profile.AlbumArtPn);
-            }
-
-            writer.WriteString(albumArtUrlInfo.url);
+            writer.WriteAttributeString("dlna", "profileID", NsDlna, _profile.AlbumArtPn);
+            writer.WriteString(albumartUrlInfo.url);
             writer.WriteFullEndElement();
 
-            // TODO: Remove these default values
-            var iconUrlInfo = GetImageUrl(
-                imageInfo,
-                _profile.MaxIconWidth ?? 48,
-                _profile.MaxIconHeight ?? 48,
-                "jpg");
+            // TOOD: Remove these default values
+            var iconUrlInfo = GetImageUrl(imageInfo, _profile.MaxIconWidth ?? 48, _profile.MaxIconHeight ?? 48, "jpg");
             writer.WriteElementString("upnp", "icon", NsUpnp, iconUrlInfo.url);
 
             if (!_profile.EnableAlbumArtInDidl)
@@ -1219,7 +1206,8 @@ namespace Emby.Dlna.Didl
 
             if (width.HasValue && height.HasValue)
             {
-                var newSize = DrawingUtils.Resize(new ImageDimensions(width.Value, height.Value), 0, 0, maxWidth, maxHeight);
+                var newSize = DrawingUtils.Resize(
+                        new ImageDimensions(width.Value, height.Value), 0, 0, maxWidth, maxHeight);
 
                 width = newSize.Width;
                 height = newSize.Height;

+ 3 - 3
Jellyfin.Api/Controllers/UniversalAudioController.cs

@@ -298,9 +298,9 @@ namespace Jellyfin.Api.Controllers
                 {
                     Type = DlnaProfileType.Audio,
                     Context = EncodingContext.Streaming,
-                    Container = transcodingContainer ?? "mp3",
-                    AudioCodec = audioCodec ?? "mp3",
-                    Protocol = transcodingProtocol ?? "http",
+                    Container = transcodingContainer,
+                    AudioCodec = audioCodec,
+                    Protocol = transcodingProtocol,
                     BreakOnNonKeyFrames = breakOnNonKeyFrames ?? false,
                     MaxAudioChannels = transcodingAudioChannels?.ToString(CultureInfo.InvariantCulture)
                 }

+ 44 - 17
MediaBrowser.Model/Dlna/ContainerProfile.cs

@@ -1,7 +1,7 @@
+#nullable disable
 #pragma warning disable CS1591
 
 using System;
-using System.ComponentModel.DataAnnotations;
 using System.Linq;
 using System.Xml.Serialization;
 
@@ -12,12 +12,22 @@ namespace MediaBrowser.Model.Dlna
         [XmlAttribute("type")]
         public DlnaProfileType Type { get; set; }
 
-        public ProfileCondition[]? Conditions { get; set; } = Array.Empty<ProfileCondition>();
+        public ProfileCondition[] Conditions { get; set; }
 
         [XmlAttribute("container")]
-        public string Container { get; set; } = string.Empty;
+        public string Container { get; set; }
 
-        public static string[] SplitValue(string? value)
+        public ContainerProfile()
+        {
+            Conditions = Array.Empty<ProfileCondition>();
+        }
+
+        public string[] GetContainers()
+        {
+            return SplitValue(Container);
+        }
+
+        public static string[] SplitValue(string value)
         {
             if (string.IsNullOrEmpty(value))
             {
@@ -27,14 +37,14 @@ namespace MediaBrowser.Model.Dlna
             return value.Split(',', StringSplitOptions.RemoveEmptyEntries);
         }
 
-        public bool ContainsContainer(string? container)
+        public bool ContainsContainer(string container)
         {
-            var containers = SplitValue(Container);
+            var containers = GetContainers();
 
             return ContainsContainer(containers, container);
         }
 
-        public static bool ContainsContainer(string? profileContainers, string? inputContainer)
+        public static bool ContainsContainer(string profileContainers, string inputContainer)
         {
             var isNegativeList = false;
             if (profileContainers != null && profileContainers.StartsWith('-'))
@@ -46,29 +56,46 @@ namespace MediaBrowser.Model.Dlna
             return ContainsContainer(SplitValue(profileContainers), isNegativeList, inputContainer);
         }
 
-        public static bool ContainsContainer(string[]? profileContainers, string? inputContainer)
+        public static bool ContainsContainer(string[] profileContainers, string inputContainer)
         {
             return ContainsContainer(profileContainers, false, inputContainer);
         }
 
-        public static bool ContainsContainer(string[]? profileContainers, bool isNegativeList, string? inputContainer)
+        public static bool ContainsContainer(string[] profileContainers, bool isNegativeList, string inputContainer)
         {
-            if (profileContainers == null || profileContainers.Length == 0)
+            if (profileContainers.Length == 0)
             {
-                return isNegativeList;
+                return true;
             }
 
-            var allInputContainers = SplitValue(inputContainer);
-
-            foreach (var container in allInputContainers)
+            if (isNegativeList)
             {
-                if (profileContainers.Contains(container, StringComparer.OrdinalIgnoreCase))
+                var allInputContainers = SplitValue(inputContainer);
+
+                foreach (var container in allInputContainers)
                 {
-                    return !isNegativeList;
+                    if (profileContainers.Contains(container, StringComparer.OrdinalIgnoreCase))
+                    {
+                        return false;
+                    }
                 }
+
+                return true;
             }
+            else
+            {
+                var allInputContainers = SplitValue(inputContainer);
 
-            return isNegativeList;
+                foreach (var container in allInputContainers)
+                {
+                    if (profileContainers.Contains(container, StringComparer.OrdinalIgnoreCase))
+                    {
+                        return true;
+                    }
+                }
+
+                return false;
+            }
         }
     }
 }

+ 60 - 48
MediaBrowser.Model/Dlna/DeviceProfile.cs

@@ -1,6 +1,6 @@
+#nullable disable
 #pragma warning disable CA1819 // Properties should not return arrays
 using System;
-using System.ComponentModel;
 using System.Linq;
 using System.Xml.Serialization;
 using MediaBrowser.Model.MediaInfo;
@@ -13,104 +13,121 @@ namespace MediaBrowser.Model.Dlna
     [XmlRoot("Profile")]
     public class DeviceProfile
     {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="DeviceProfile"/> class.
+        /// </summary>
+        public DeviceProfile()
+        {
+            DirectPlayProfiles = Array.Empty<DirectPlayProfile>();
+            TranscodingProfiles = Array.Empty<TranscodingProfile>();
+            ResponseProfiles = Array.Empty<ResponseProfile>();
+            CodecProfiles = Array.Empty<CodecProfile>();
+            ContainerProfiles = Array.Empty<ContainerProfile>();
+            SubtitleProfiles = Array.Empty<SubtitleProfile>();
+
+            XmlRootAttributes = Array.Empty<XmlAttribute>();
+
+            SupportedMediaTypes = "Audio,Photo,Video";
+            MaxStreamingBitrate = 8000000;
+            MaxStaticBitrate = 8000000;
+            MusicStreamingTranscodingBitrate = 128000;
+        }
+
         /// <summary>
         /// Gets or sets the Name.
         /// </summary>
-        public string? Name { get; set; }
+        public string Name { get; set; }
 
         /// <summary>
         /// Gets or sets the Id.
         /// </summary>
         [XmlIgnore]
-        public string? Id { get; set; }
+        public string Id { get; set; }
 
         /// <summary>
         /// Gets or sets the Identification.
         /// </summary>
-        public DeviceIdentification? Identification { get; set; }
+        public DeviceIdentification Identification { get; set; }
 
         /// <summary>
         /// Gets or sets the FriendlyName.
         /// </summary>
-        public string? FriendlyName { get; set; }
+        public string FriendlyName { get; set; }
 
         /// <summary>
         /// Gets or sets the Manufacturer.
         /// </summary>
-        public string? Manufacturer { get; set; }
+        public string Manufacturer { get; set; }
 
         /// <summary>
         /// Gets or sets the ManufacturerUrl.
         /// </summary>
-        public string? ManufacturerUrl { get; set; }
+        public string ManufacturerUrl { get; set; }
 
         /// <summary>
         /// Gets or sets the ModelName.
         /// </summary>
-        public string? ModelName { get; set; }
+        public string ModelName { get; set; }
 
         /// <summary>
         /// Gets or sets the ModelDescription.
         /// </summary>
-        public string? ModelDescription { get; set; }
+        public string ModelDescription { get; set; }
 
         /// <summary>
         /// Gets or sets the ModelNumber.
         /// </summary>
-        public string? ModelNumber { get; set; }
+        public string ModelNumber { get; set; }
 
         /// <summary>
         /// Gets or sets the ModelUrl.
         /// </summary>
-        public string? ModelUrl { get; set; }
+        public string ModelUrl { get; set; }
 
         /// <summary>
         /// Gets or sets the SerialNumber.
         /// </summary>
-        public string? SerialNumber { get; set; }
+        public string SerialNumber { get; set; }
 
         /// <summary>
         /// Gets or sets a value indicating whether EnableAlbumArtInDidl.
         /// </summary>
-        [DefaultValue(false)]
         public bool EnableAlbumArtInDidl { get; set; }
 
         /// <summary>
         /// Gets or sets a value indicating whether EnableSingleAlbumArtLimit.
         /// </summary>
-        [DefaultValue(false)]
         public bool EnableSingleAlbumArtLimit { get; set; }
 
         /// <summary>
         /// Gets or sets a value indicating whether EnableSingleSubtitleLimit.
         /// </summary>
-        [DefaultValue(false)]
         public bool EnableSingleSubtitleLimit { get; set; }
 
         /// <summary>
         /// Gets or sets the SupportedMediaTypes.
         /// </summary>
-        public string SupportedMediaTypes { get; set; } = "Audio,Photo,Video";
+        public string SupportedMediaTypes { get; set; }
 
         /// <summary>
         /// Gets or sets the UserId.
         /// </summary>
-        public string? UserId { get; set; }
+        public string UserId { get; set; }
 
         /// <summary>
         /// Gets or sets the AlbumArtPn.
         /// </summary>
-        public string? AlbumArtPn { get; set; }
+        public string AlbumArtPn { get; set; }
 
         /// <summary>
         /// Gets or sets the MaxAlbumArtWidth.
         /// </summary>
-        public int? MaxAlbumArtWidth { get; set; }
+        public int MaxAlbumArtWidth { get; set; }
 
         /// <summary>
         /// Gets or sets the MaxAlbumArtHeight.
         /// </summary>
-        public int? MaxAlbumArtHeight { get; set; }
+        public int MaxAlbumArtHeight { get; set; }
 
         /// <summary>
         /// Gets or sets the MaxIconWidth.
@@ -125,97 +142,92 @@ namespace MediaBrowser.Model.Dlna
         /// <summary>
         /// Gets or sets the MaxStreamingBitrate.
         /// </summary>
-        public int? MaxStreamingBitrate { get; set; } = 8000000;
+        public int? MaxStreamingBitrate { get; set; }
 
         /// <summary>
         /// Gets or sets the MaxStaticBitrate.
         /// </summary>
-        public int? MaxStaticBitrate { get; set; } = 8000000;
+        public int? MaxStaticBitrate { get; set; }
 
         /// <summary>
         /// Gets or sets the MusicStreamingTranscodingBitrate.
         /// </summary>
-        public int? MusicStreamingTranscodingBitrate { get; set; } = 128000;
+        public int? MusicStreamingTranscodingBitrate { get; set; }
 
         /// <summary>
         /// Gets or sets the MaxStaticMusicBitrate.
         /// </summary>
-        public int? MaxStaticMusicBitrate { get; set; } = 8000000;
+        public int? MaxStaticMusicBitrate { get; set; }
 
         /// <summary>
         /// Gets or sets the content of the aggregationFlags element in the urn:schemas-sonycom:av namespace.
         /// </summary>
-        public string? SonyAggregationFlags { get; set; }
+        public string SonyAggregationFlags { get; set; }
 
         /// <summary>
         /// Gets or sets the ProtocolInfo.
         /// </summary>
-        public string? ProtocolInfo { get; set; }
+        public string ProtocolInfo { get; set; }
 
         /// <summary>
         /// Gets or sets the TimelineOffsetSeconds.
         /// </summary>
-        [DefaultValue(0)]
         public int TimelineOffsetSeconds { get; set; }
 
         /// <summary>
         /// Gets or sets a value indicating whether RequiresPlainVideoItems.
         /// </summary>
-        [DefaultValue(false)]
         public bool RequiresPlainVideoItems { get; set; }
 
         /// <summary>
         /// Gets or sets a value indicating whether RequiresPlainFolders.
         /// </summary>
-        [DefaultValue(false)]
         public bool RequiresPlainFolders { get; set; }
 
         /// <summary>
         /// Gets or sets a value indicating whether EnableMSMediaReceiverRegistrar.
         /// </summary>
-        [DefaultValue(false)]
         public bool EnableMSMediaReceiverRegistrar { get; set; }
 
         /// <summary>
         /// Gets or sets a value indicating whether IgnoreTranscodeByteRangeRequests.
         /// </summary>
-        [DefaultValue(false)]
         public bool IgnoreTranscodeByteRangeRequests { get; set; }
 
         /// <summary>
         /// Gets or sets the XmlRootAttributes.
         /// </summary>
-        public XmlAttribute[] XmlRootAttributes { get; set; } = Array.Empty<XmlAttribute>();
+        public XmlAttribute[] XmlRootAttributes { get; set; }
 
         /// <summary>
         /// Gets or sets the direct play profiles.
         /// </summary>
-        public DirectPlayProfile[] DirectPlayProfiles { get; set; } = Array.Empty<DirectPlayProfile>();
+        public DirectPlayProfile[] DirectPlayProfiles { get; set; }
 
         /// <summary>
         /// Gets or sets the transcoding profiles.
         /// </summary>
-        public TranscodingProfile[] TranscodingProfiles { get; set; } = Array.Empty<TranscodingProfile>();
+        public TranscodingProfile[] TranscodingProfiles { get; set; }
 
         /// <summary>
         /// Gets or sets the ContainerProfiles.
         /// </summary>
-        public ContainerProfile[] ContainerProfiles { get; set; } = Array.Empty<ContainerProfile>();
+        public ContainerProfile[] ContainerProfiles { get; set; }
 
         /// <summary>
         /// Gets or sets the CodecProfiles.
         /// </summary>
-        public CodecProfile[] CodecProfiles { get; set; } = Array.Empty<CodecProfile>();
+        public CodecProfile[] CodecProfiles { get; set; }
 
         /// <summary>
         /// Gets or sets the ResponseProfiles.
         /// </summary>
-        public ResponseProfile[] ResponseProfiles { get; set; } = Array.Empty<ResponseProfile>();
+        public ResponseProfile[] ResponseProfiles { get; set; }
 
         /// <summary>
         /// Gets or sets the SubtitleProfiles.
         /// </summary>
-        public SubtitleProfile[] SubtitleProfiles { get; set; } = Array.Empty<SubtitleProfile>();
+        public SubtitleProfile[] SubtitleProfiles { get; set; }
 
         /// <summary>
         /// The GetSupportedMediaTypes.
@@ -232,13 +244,13 @@ namespace MediaBrowser.Model.Dlna
         /// <param name="container">The container.</param>
         /// <param name="audioCodec">The audio Codec.</param>
         /// <returns>A <see cref="TranscodingProfile"/>.</returns>
-        public TranscodingProfile? GetAudioTranscodingProfile(string? container, string? audioCodec)
+        public TranscodingProfile GetAudioTranscodingProfile(string container, string audioCodec)
         {
             container = (container ?? string.Empty).TrimStart('.');
 
             foreach (var i in TranscodingProfiles)
             {
-                if (i.Type != DlnaProfileType.Audio)
+                if (i.Type != MediaBrowser.Model.Dlna.DlnaProfileType.Audio)
                 {
                     continue;
                 }
@@ -266,13 +278,13 @@ namespace MediaBrowser.Model.Dlna
         /// <param name="audioCodec">The audio Codec.</param>
         /// <param name="videoCodec">The video Codec.</param>
         /// <returns>The <see cref="TranscodingProfile"/>.</returns>
-        public TranscodingProfile? GetVideoTranscodingProfile(string? container, string? audioCodec, string? videoCodec)
+        public TranscodingProfile GetVideoTranscodingProfile(string container, string audioCodec, string videoCodec)
         {
             container = (container ?? string.Empty).TrimStart('.');
 
             foreach (var i in TranscodingProfiles)
             {
-                if (i.Type != DlnaProfileType.Video)
+                if (i.Type != MediaBrowser.Model.Dlna.DlnaProfileType.Video)
                 {
                     continue;
                 }
@@ -287,7 +299,7 @@ namespace MediaBrowser.Model.Dlna
                     continue;
                 }
 
-                if (!string.Equals(videoCodec, i.VideoCodec, StringComparison.OrdinalIgnoreCase))
+                if (!string.Equals(videoCodec, i.VideoCodec ?? string.Empty, StringComparison.OrdinalIgnoreCase))
                 {
                     continue;
                 }
@@ -308,7 +320,7 @@ namespace MediaBrowser.Model.Dlna
         /// <param name="audioSampleRate">The audio sample rate.</param>
         /// <param name="audioBitDepth">The audio bit depth.</param>
         /// <returns>The <see cref="ResponseProfile"/>.</returns>
-        public ResponseProfile? GetAudioMediaProfile(string container, string? audioCodec, int? audioChannels, int? audioBitrate, int? audioSampleRate, int? audioBitDepth)
+        public ResponseProfile GetAudioMediaProfile(string container, string audioCodec, int? audioChannels, int? audioBitrate, int? audioSampleRate, int? audioBitDepth)
         {
             foreach (var i in ResponseProfiles)
             {
@@ -372,7 +384,7 @@ namespace MediaBrowser.Model.Dlna
         /// <param name="width">The width.</param>
         /// <param name="height">The height.</param>
         /// <returns>The <see cref="ResponseProfile"/>.</returns>
-        public ResponseProfile? GetImageMediaProfile(string container, int? width, int? height)
+        public ResponseProfile GetImageMediaProfile(string container, int? width, int? height)
         {
             foreach (var i in ResponseProfiles)
             {
@@ -430,10 +442,10 @@ namespace MediaBrowser.Model.Dlna
         /// <param name="videoCodecTag">The video Codec tag.</param>
         /// <param name="isAvc">True if Avc.</param>
         /// <returns>The <see cref="ResponseProfile"/>.</returns>
-        public ResponseProfile? GetVideoMediaProfile(
+        public ResponseProfile GetVideoMediaProfile(
             string container,
-            string? audioCodec,
-            string? videoCodec,
+            string audioCodec,
+            string videoCodec,
             int? width,
             int? height,
             int? bitDepth,

+ 4 - 4
MediaBrowser.Model/Dlna/DirectPlayProfile.cs

@@ -1,6 +1,6 @@
+#nullable disable
 #pragma warning disable CS1591
 
-using System.ComponentModel.DataAnnotations;
 using System.Xml.Serialization;
 
 namespace MediaBrowser.Model.Dlna
@@ -8,13 +8,13 @@ namespace MediaBrowser.Model.Dlna
     public class DirectPlayProfile
     {
         [XmlAttribute("container")]
-        public string? Container { get; set; }
+        public string Container { get; set; }
 
         [XmlAttribute("audioCodec")]
-        public string? AudioCodec { get; set; }
+        public string AudioCodec { get; set; }
 
         [XmlAttribute("videoCodec")]
-        public string? VideoCodec { get; set; }
+        public string VideoCodec { get; set; }
 
         [XmlAttribute("type")]
         public DlnaProfileType Type { get; set; }

+ 6 - 16
MediaBrowser.Model/Dlna/TranscodingProfile.cs

@@ -1,7 +1,6 @@
+#nullable disable
 #pragma warning disable CS1591
 
-using System.ComponentModel;
-using System.ComponentModel.DataAnnotations;
 using System.Xml.Serialization;
 
 namespace MediaBrowser.Model.Dlna
@@ -9,56 +8,47 @@ namespace MediaBrowser.Model.Dlna
     public class TranscodingProfile
     {
         [XmlAttribute("container")]
-        public string Container { get; set; } = string.Empty;
+        public string Container { get; set; }
 
         [XmlAttribute("type")]
         public DlnaProfileType Type { get; set; }
 
         [XmlAttribute("videoCodec")]
-        public string VideoCodec { get; set; } = string.Empty;
+        public string VideoCodec { get; set; }
 
         [XmlAttribute("audioCodec")]
-        public string AudioCodec { get; set; } = string.Empty;
+        public string AudioCodec { get; set; }
 
         [XmlAttribute("protocol")]
-        public string Protocol { get; set; } = string.Empty;
+        public string Protocol { get; set; }
 
-        [DefaultValue(false)]
         [XmlAttribute("estimateContentLength")]
         public bool EstimateContentLength { get; set; }
 
-        [DefaultValue(false)]
         [XmlAttribute("enableMpegtsM2TsMode")]
         public bool EnableMpegtsM2TsMode { get; set; }
 
-        [DefaultValue(TranscodeSeekInfo.Auto)]
         [XmlAttribute("transcodeSeekInfo")]
         public TranscodeSeekInfo TranscodeSeekInfo { get; set; }
 
-        [DefaultValue(false)]
         [XmlAttribute("copyTimestamps")]
         public bool CopyTimestamps { get; set; }
 
-        [DefaultValue(EncodingContext.Streaming)]
         [XmlAttribute("context")]
         public EncodingContext Context { get; set; }
 
-        [DefaultValue(false)]
         [XmlAttribute("enableSubtitlesInManifest")]
         public bool EnableSubtitlesInManifest { get; set; }
 
         [XmlAttribute("maxAudioChannels")]
-        public string? MaxAudioChannels { get; set; }
+        public string MaxAudioChannels { get; set; }
 
-        [DefaultValue(0)]
         [XmlAttribute("minSegments")]
         public int MinSegments { get; set; }
 
-        [DefaultValue(0)]
         [XmlAttribute("segmentLength")]
         public int SegmentLength { get; set; }
 
-        [DefaultValue(false)]
         [XmlAttribute("breakOnNonKeyFrames")]
         public bool BreakOnNonKeyFrames { get; set; }