aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgnattu <gnattu@users.noreply.github.com>2024-09-08 01:21:14 +0800
committerGitHub <noreply@github.com>2024-09-07 11:21:14 -0600
commitdf00909b85db0c312879df404049dd98508781d2 (patch)
tree995bc10bead60341d29eba4cca1273b4fab85f94
parent5d4f71eb9a2095a9fc42f9098bad23a870a50307 (diff)
Backport #12562 and #12521 (#12602)
Co-authored-by: Dmitry Lyzo <56478732+dmitrylyzo@users.noreply.github.com> Co-authored-by: Nyanmisaka <nst799610810@gmail.com>
-rw-r--r--MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs21
-rw-r--r--MediaBrowser.Model/Dlna/StreamBuilder.cs12
2 files changed, 25 insertions, 8 deletions
diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
index 52faf22f2..d6ad7e2b3 100644
--- a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
+++ b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
@@ -1914,7 +1914,26 @@ namespace MediaBrowser.Controller.MediaEncoding
}
var profile = state.GetRequestedProfiles(targetVideoCodec).FirstOrDefault() ?? string.Empty;
- profile = WhiteSpaceRegex().Replace(profile, string.Empty);
+ profile = WhiteSpaceRegex().Replace(profile, string.Empty).ToLowerInvariant();
+
+ var videoProfiles = Array.Empty<string>();
+ if (string.Equals("h264", targetVideoCodec, StringComparison.OrdinalIgnoreCase))
+ {
+ videoProfiles = _videoProfilesH264;
+ }
+ else if (string.Equals("hevc", targetVideoCodec, StringComparison.OrdinalIgnoreCase))
+ {
+ videoProfiles = _videoProfilesH265;
+ }
+ else if (string.Equals("av1", targetVideoCodec, StringComparison.OrdinalIgnoreCase))
+ {
+ videoProfiles = _videoProfilesAv1;
+ }
+
+ if (!videoProfiles.Contains(profile, StringComparison.OrdinalIgnoreCase))
+ {
+ profile = string.Empty;
+ }
// We only transcode to HEVC 8-bit for now, force Main Profile.
if (profile.Contains("main10", StringComparison.OrdinalIgnoreCase)
diff --git a/MediaBrowser.Model/Dlna/StreamBuilder.cs b/MediaBrowser.Model/Dlna/StreamBuilder.cs
index cd18fea12..ad00149e0 100644
--- a/MediaBrowser.Model/Dlna/StreamBuilder.cs
+++ b/MediaBrowser.Model/Dlna/StreamBuilder.cs
@@ -925,7 +925,7 @@ namespace MediaBrowser.Model.Dlna
{
audioStream = directAudioStream;
playlistItem.AudioStreamIndex = audioStream.Index;
- playlistItem.AudioCodecs = new[] { audioStream.Codec };
+ playlistItem.AudioCodecs = audioCodecs = new[] { audioStream.Codec };
// Copy matching audio codec options
playlistItem.AudioSampleRate = audioStream.SampleRate;
@@ -966,15 +966,14 @@ namespace MediaBrowser.Model.Dlna
var appliedVideoConditions = options.Profile.CodecProfiles
.Where(i => i.Type == CodecType.Video &&
- i.ContainsAnyCodec(videoStream?.Codec, container, useSubContainer) &&
+ i.ContainsAnyCodec(videoCodecs, 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();
foreach (var i in appliedVideoConditions)
{
- var transcodingVideoCodecs = ContainerProfile.SplitValue(videoCodec);
- foreach (var transcodingVideoCodec in transcodingVideoCodecs)
+ foreach (var transcodingVideoCodec in videoCodecs)
{
if (i.ContainsAnyCodec(transcodingVideoCodec, container, useSubContainer))
{
@@ -999,15 +998,14 @@ namespace MediaBrowser.Model.Dlna
var appliedAudioConditions = options.Profile.CodecProfiles
.Where(i => i.Type == CodecType.VideoAudio &&
- i.ContainsAnyCodec(audioStream?.Codec, container) &&
+ i.ContainsAnyCodec(audioCodecs, container) &&
i.ApplyConditions.All(applyCondition => ConditionProcessor.IsVideoAudioConditionSatisfied(applyCondition, audioChannels, inputAudioBitrate, inputAudioSampleRate, inputAudioBitDepth, audioProfile, isSecondaryAudio)))
// Reverse codec profiles for backward compatibility - first codec profile has higher priority
.Reverse();
foreach (var codecProfile in appliedAudioConditions)
{
- var transcodingAudioCodecs = ContainerProfile.SplitValue(audioCodec);
- foreach (var transcodingAudioCodec in transcodingAudioCodecs)
+ foreach (var transcodingAudioCodec in audioCodecs)
{
if (codecProfile.ContainsAnyCodec(transcodingAudioCodec, container))
{