aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Emby.Dlna/Didl/DidlBuilder.cs26
-rw-r--r--Jellyfin.Api/Controllers/UniversalAudioController.cs6
-rw-r--r--MediaBrowser.Model/Dlna/ContainerProfile.cs61
-rw-r--r--MediaBrowser.Model/Dlna/DeviceProfile.cs108
-rw-r--r--MediaBrowser.Model/Dlna/DirectPlayProfile.cs8
-rw-r--r--MediaBrowser.Model/Dlna/TranscodingProfile.cs22
6 files changed, 124 insertions, 107 deletions
diff --git a/Emby.Dlna/Didl/DidlBuilder.cs b/Emby.Dlna/Didl/DidlBuilder.cs
index 23ce21f12..8b50d47fb 100644
--- a/Emby.Dlna/Didl/DidlBuilder.cs
+++ b/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;
diff --git a/Jellyfin.Api/Controllers/UniversalAudioController.cs b/Jellyfin.Api/Controllers/UniversalAudioController.cs
index ea9bc675f..9e093fd0f 100644
--- a/Jellyfin.Api/Controllers/UniversalAudioController.cs
+++ b/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)
}
diff --git a/MediaBrowser.Model/Dlna/ContainerProfile.cs b/MediaBrowser.Model/Dlna/ContainerProfile.cs
index c66ec8bc3..56c89d854 100644
--- a/MediaBrowser.Model/Dlna/ContainerProfile.cs
+++ b/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;
+ }
}
}
}
diff --git a/MediaBrowser.Model/Dlna/DeviceProfile.cs b/MediaBrowser.Model/Dlna/DeviceProfile.cs
index 47d101613..ff5186658 100644
--- a/MediaBrowser.Model/Dlna/DeviceProfile.cs
+++ b/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;
@@ -14,103 +14,120 @@ namespace MediaBrowser.Model.Dlna
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,
diff --git a/MediaBrowser.Model/Dlna/DirectPlayProfile.cs b/MediaBrowser.Model/Dlna/DirectPlayProfile.cs
index fa3ad098f..88cb83991 100644
--- a/MediaBrowser.Model/Dlna/DirectPlayProfile.cs
+++ b/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; }
diff --git a/MediaBrowser.Model/Dlna/TranscodingProfile.cs b/MediaBrowser.Model/Dlna/TranscodingProfile.cs
index 214578a85..f05e31047 100644
--- a/MediaBrowser.Model/Dlna/TranscodingProfile.cs
+++ b/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; }