mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-01-15 08:23:28 -03:00
Add profile condition to limit the number of streams (#13583)
This commit is contained in:
@@ -28,6 +28,7 @@ namespace MediaBrowser.Model.Dlna
|
||||
/// <param name="isAnamorphic">A value indicating whether the video is anamorphic.</param>
|
||||
/// <param name="isInterlaced">A value indicating whether the video is interlaced.</param>
|
||||
/// <param name="refFrames">The reference frames.</param>
|
||||
/// <param name="numStreams">The number of streams.</param>
|
||||
/// <param name="numVideoStreams">The number of video streams.</param>
|
||||
/// <param name="numAudioStreams">The number of audio streams.</param>
|
||||
/// <param name="videoCodecTag">The video codec tag.</param>
|
||||
@@ -48,6 +49,7 @@ namespace MediaBrowser.Model.Dlna
|
||||
bool? isAnamorphic,
|
||||
bool? isInterlaced,
|
||||
int? refFrames,
|
||||
int numStreams,
|
||||
int? numVideoStreams,
|
||||
int? numAudioStreams,
|
||||
string? videoCodecTag,
|
||||
@@ -83,6 +85,8 @@ namespace MediaBrowser.Model.Dlna
|
||||
return IsConditionSatisfied(condition, width);
|
||||
case ProfileConditionValue.RefFrames:
|
||||
return IsConditionSatisfied(condition, refFrames);
|
||||
case ProfileConditionValue.NumStreams:
|
||||
return IsConditionSatisfied(condition, numStreams);
|
||||
case ProfileConditionValue.NumAudioStreams:
|
||||
return IsConditionSatisfied(condition, numAudioStreams);
|
||||
case ProfileConditionValue.NumVideoStreams:
|
||||
|
||||
@@ -27,6 +27,7 @@ namespace MediaBrowser.Model.Dlna
|
||||
IsInterlaced = 21,
|
||||
AudioSampleRate = 22,
|
||||
AudioBitDepth = 23,
|
||||
VideoRangeType = 24
|
||||
VideoRangeType = 24,
|
||||
NumStreams = 25
|
||||
}
|
||||
}
|
||||
|
||||
@@ -338,6 +338,9 @@ namespace MediaBrowser.Model.Dlna
|
||||
case ProfileConditionValue.IsSecondaryAudio:
|
||||
return TranscodeReason.SecondaryAudioNotSupported;
|
||||
|
||||
case ProfileConditionValue.NumStreams:
|
||||
return TranscodeReason.StreamCountExceedsLimit;
|
||||
|
||||
case ProfileConditionValue.NumAudioStreams:
|
||||
// TODO
|
||||
return 0;
|
||||
@@ -1019,6 +1022,7 @@ namespace MediaBrowser.Model.Dlna
|
||||
int? packetLength = videoStream?.PacketLength;
|
||||
int? refFrames = videoStream?.RefFrames;
|
||||
|
||||
int numStreams = item.MediaStreams.Count;
|
||||
int? numAudioStreams = item.GetStreamCount(MediaStreamType.Audio);
|
||||
int? numVideoStreams = item.GetStreamCount(MediaStreamType.Video);
|
||||
|
||||
@@ -1027,7 +1031,7 @@ namespace MediaBrowser.Model.Dlna
|
||||
var appliedVideoConditions = options.Profile.CodecProfiles
|
||||
.Where(i => i.Type == CodecType.Video &&
|
||||
i.ContainsAnyCodec(playlistItem.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)))
|
||||
i.ApplyConditions.All(applyCondition => ConditionProcessor.IsVideoConditionSatisfied(applyCondition, width, height, bitDepth, videoBitrate, videoProfile, videoRangeType, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, isInterlaced, refFrames, numStreams, numVideoStreams, numAudioStreams, videoCodecTag, isAvc)))
|
||||
// Reverse codec profiles for backward compatibility - first codec profile has higher priority
|
||||
.Reverse();
|
||||
foreach (var condition in appliedVideoConditions)
|
||||
@@ -1850,6 +1854,7 @@ namespace MediaBrowser.Model.Dlna
|
||||
case ProfileConditionValue.AudioProfile:
|
||||
case ProfileConditionValue.Has64BitOffsets:
|
||||
case ProfileConditionValue.PacketLength:
|
||||
case ProfileConditionValue.NumStreams:
|
||||
case ProfileConditionValue.NumAudioStreams:
|
||||
case ProfileConditionValue.NumVideoStreams:
|
||||
case ProfileConditionValue.IsSecondaryAudio:
|
||||
@@ -2258,10 +2263,11 @@ namespace MediaBrowser.Model.Dlna
|
||||
int? packetLength = videoStream?.PacketLength;
|
||||
int? refFrames = videoStream?.RefFrames;
|
||||
|
||||
int numStreams = mediaSource.MediaStreams.Count;
|
||||
int? numAudioStreams = mediaSource.GetStreamCount(MediaStreamType.Audio);
|
||||
int? numVideoStreams = mediaSource.GetStreamCount(MediaStreamType.Video);
|
||||
|
||||
return conditions.Where(applyCondition => !ConditionProcessor.IsVideoConditionSatisfied(applyCondition, width, height, bitDepth, videoBitrate, videoProfile, videoRangeType, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, isInterlaced, refFrames, numVideoStreams, numAudioStreams, videoCodecTag, isAvc));
|
||||
return conditions.Where(applyCondition => !ConditionProcessor.IsVideoConditionSatisfied(applyCondition, width, height, bitDepth, videoBitrate, videoProfile, videoRangeType, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, isInterlaced, refFrames, numStreams, numVideoStreams, numAudioStreams, videoCodecTag, isAvc));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -14,6 +14,7 @@ namespace MediaBrowser.Model.Session
|
||||
SubtitleCodecNotSupported = 1 << 3,
|
||||
AudioIsExternal = 1 << 4,
|
||||
SecondaryAudioNotSupported = 1 << 5,
|
||||
StreamCountExceedsLimit = 1 << 26,
|
||||
|
||||
// Video Constraints
|
||||
VideoProfileNotSupported = 1 << 6,
|
||||
|
||||
Reference in New Issue
Block a user