aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiels van Velzen <nielsvanvelzen@users.noreply.github.com>2024-09-06 22:04:10 +0200
committerGitHub <noreply@github.com>2024-09-06 22:04:10 +0200
commitd250f7bd9585997febe35e19f0f983857ae77366 (patch)
tree0bd38d93b818c1326c2e80bfc12fd307e49c87cd
parent435e50fd9abe63037d459a68cdce62f023eaa84f (diff)
parent29d5344ba743524d0f86e2cdf5e0139288f8d253 (diff)
Merge pull request #12420 from gnattu/codec-profile-subcontainer
Add SubContainer support to CodecProfile
-rw-r--r--MediaBrowser.Model/Dlna/CodecProfile.cs16
-rw-r--r--MediaBrowser.Model/Dlna/StreamBuilder.cs6
2 files changed, 14 insertions, 8 deletions
diff --git a/MediaBrowser.Model/Dlna/CodecProfile.cs b/MediaBrowser.Model/Dlna/CodecProfile.cs
index f857bf3a8..07c1a29a4 100644
--- a/MediaBrowser.Model/Dlna/CodecProfile.cs
+++ b/MediaBrowser.Model/Dlna/CodecProfile.cs
@@ -28,24 +28,28 @@ namespace MediaBrowser.Model.Dlna
[XmlAttribute("container")]
public string Container { get; set; }
+ [XmlAttribute("subcontainer")]
+ public string SubContainer { get; set; }
+
public string[] GetCodecs()
{
return ContainerProfile.SplitValue(Codec);
}
- private bool ContainsContainer(string container)
+ private bool ContainsContainer(string container, bool useSubContainer = false)
{
- return ContainerProfile.ContainsContainer(Container, container);
+ var containerToCheck = useSubContainer && string.Equals(Container, "hls", StringComparison.OrdinalIgnoreCase) ? SubContainer : Container;
+ return ContainerProfile.ContainsContainer(containerToCheck, container);
}
- public bool ContainsAnyCodec(string codec, string container)
+ public bool ContainsAnyCodec(string codec, string container, bool useSubContainer = false)
{
- return ContainsAnyCodec(ContainerProfile.SplitValue(codec), container);
+ return ContainsAnyCodec(ContainerProfile.SplitValue(codec), container, useSubContainer);
}
- public bool ContainsAnyCodec(string[] codec, string container)
+ public bool ContainsAnyCodec(string[] codec, string container, bool useSubContainer = false)
{
- if (!ContainsContainer(container))
+ if (!ContainsContainer(container, useSubContainer))
{
return false;
}
diff --git a/MediaBrowser.Model/Dlna/StreamBuilder.cs b/MediaBrowser.Model/Dlna/StreamBuilder.cs
index 1101c76ea..7f387bfaa 100644
--- a/MediaBrowser.Model/Dlna/StreamBuilder.cs
+++ b/MediaBrowser.Model/Dlna/StreamBuilder.cs
@@ -962,9 +962,11 @@ namespace MediaBrowser.Model.Dlna
int? numAudioStreams = item.GetStreamCount(MediaStreamType.Audio);
int? numVideoStreams = item.GetStreamCount(MediaStreamType.Video);
+ var useSubContainer = playlistItem.SubProtocol == MediaStreamProtocol.hls;
+
var appliedVideoConditions = options.Profile.CodecProfiles
.Where(i => i.Type == CodecType.Video &&
- i.ContainsAnyCodec(videoStream?.Codec, container) &&
+ i.ContainsAnyCodec(videoStream?.Codec, container, useSubContainer) &&
i.ApplyConditions.All(applyCondition => ConditionProcessor.IsVideoConditionSatisfied(applyCondition, width, height, bitDepth, videoBitrate, videoProfile, videoRangeType, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, isInterlaced, refFrames, numVideoStreams, numAudioStreams, videoCodecTag, isAvc)))
// Reverse codec profiles for backward compatibility - first codec profile has higher priority
.Reverse();
@@ -974,7 +976,7 @@ namespace MediaBrowser.Model.Dlna
var transcodingVideoCodecs = ContainerProfile.SplitValue(videoCodec);
foreach (var transcodingVideoCodec in transcodingVideoCodecs)
{
- if (i.ContainsAnyCodec(transcodingVideoCodec, container))
+ if (i.ContainsAnyCodec(transcodingVideoCodec, container, useSubContainer))
{
ApplyTranscodingConditions(playlistItem, i.Conditions, transcodingVideoCodec, true, true);
continue;