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 4c8df4c5bb.
This commit is contained in:
Joshua M. Boniface 2021-05-04 21:59:42 -04:00
parent fd102abd81
commit b7c3510da1
6 changed files with 125 additions and 108 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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