From 3c55747cd63fd8a69f02efbe9ac48ce76d373b81 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 13 Nov 2016 15:27:09 -0500 Subject: fixes #2285 - [BUG] VAAPI Transcoding (Does not work with certain codecs) --- MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs') diff --git a/MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs b/MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs index f811a8d48..e197bdb6f 100644 --- a/MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs +++ b/MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs @@ -606,9 +606,12 @@ namespace MediaBrowser.MediaEncoding.Encoder { // vaapi will throw an error with this input // [vaapi @ 0x7faed8000960] No VAAPI support for codec mpeg4 profile -99. - if (string.Equals(videoStream.Codec, "mpeg4", StringComparison.OrdinalIgnoreCase) && videoStream.Level == -99) + if (string.Equals(videoStream.Codec, "mpeg4", StringComparison.OrdinalIgnoreCase)) { - return false; + if (videoStream.Level == -99 || videoStream.Level == 15) + { + return false; + } } } return true; -- cgit v1.2.3 From afabbfa22beba80d448dc435a2008ec45e805dd6 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 13 Dec 2016 12:04:37 -0500 Subject: add ios dts workaround --- Emby.Dlna/Didl/DidlBuilder.cs | 6 +++-- Emby.Dlna/PlayTo/PlayToController.cs | 3 ++- MediaBrowser.Api/Playback/BaseStreamingService.cs | 6 +++-- MediaBrowser.Api/Playback/StreamState.cs | 12 ++++++++++ MediaBrowser.MediaEncoding/Encoder/EncodingJob.cs | 12 ++++++++++ .../Encoder/EncodingJobFactory.cs | 3 ++- MediaBrowser.Model/Dlna/ConditionProcessor.cs | 26 +++++++++++++++++++++- MediaBrowser.Model/Dlna/ContainerProfile.cs | 8 +++++++ MediaBrowser.Model/Dlna/ContentFeatureBuilder.cs | 6 +++-- MediaBrowser.Model/Dlna/DeviceProfile.cs | 5 +++-- MediaBrowser.Model/Dlna/ProfileConditionValue.cs | 3 ++- MediaBrowser.Model/Dlna/StreamBuilder.cs | 21 +++++++++++------ MediaBrowser.Model/Dlna/StreamInfo.cs | 12 ++++++++++ 13 files changed, 104 insertions(+), 19 deletions(-) (limited to 'MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs') diff --git a/Emby.Dlna/Didl/DidlBuilder.cs b/Emby.Dlna/Didl/DidlBuilder.cs index 3dcdaf2ef..e968509b5 100644 --- a/Emby.Dlna/Didl/DidlBuilder.cs +++ b/Emby.Dlna/Didl/DidlBuilder.cs @@ -207,7 +207,8 @@ namespace Emby.Dlna.Didl streamInfo.TargetVideoStreamCount, streamInfo.TargetAudioStreamCount, streamInfo.TargetVideoCodecTag, - streamInfo.IsTargetAVC); + streamInfo.IsTargetAVC, + streamInfo.AllAudioCodecs); foreach (var contentFeature in contentFeatureList) { @@ -347,7 +348,8 @@ namespace Emby.Dlna.Didl streamInfo.TargetVideoStreamCount, streamInfo.TargetAudioStreamCount, streamInfo.TargetVideoCodecTag, - streamInfo.IsTargetAVC); + streamInfo.IsTargetAVC, + streamInfo.AllAudioCodecs); var filename = url.Substring(0, url.IndexOf('?')); diff --git a/Emby.Dlna/PlayTo/PlayToController.cs b/Emby.Dlna/PlayTo/PlayToController.cs index 7dff8bda1..bfc29d0f5 100644 --- a/Emby.Dlna/PlayTo/PlayToController.cs +++ b/Emby.Dlna/PlayTo/PlayToController.cs @@ -541,7 +541,8 @@ namespace Emby.Dlna.PlayTo streamInfo.TargetVideoStreamCount, streamInfo.TargetAudioStreamCount, streamInfo.TargetVideoCodecTag, - streamInfo.IsTargetAVC); + streamInfo.IsTargetAVC, + streamInfo.AllAudioCodecs); return list.FirstOrDefault(); } diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index 3718edba4..288553ade 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -2358,7 +2358,8 @@ namespace MediaBrowser.Api.Playback state.TargetVideoStreamCount, state.TargetAudioStreamCount, state.TargetVideoCodecTag, - state.IsTargetAVC); + state.IsTargetAVC, + state.AllAudioCodecs); if (mediaProfile != null) { @@ -2580,7 +2581,8 @@ namespace MediaBrowser.Api.Playback state.TargetVideoStreamCount, state.TargetAudioStreamCount, state.TargetVideoCodecTag, - state.IsTargetAVC + state.IsTargetAVC, + state.AllAudioCodecs ).FirstOrDefault() ?? string.Empty; } diff --git a/MediaBrowser.Api/Playback/StreamState.cs b/MediaBrowser.Api/Playback/StreamState.cs index 003599390..9c337781c 100644 --- a/MediaBrowser.Api/Playback/StreamState.cs +++ b/MediaBrowser.Api/Playback/StreamState.cs @@ -11,6 +11,7 @@ using System; using System.Collections.Generic; using System.Globalization; using System.IO; +using System.Linq; using System.Threading; namespace MediaBrowser.Api.Playback @@ -244,6 +245,17 @@ namespace MediaBrowser.Api.Playback public int? OutputAudioBitrate; public int? OutputVideoBitrate; + public List AllAudioCodecs + { + get + { + return MediaSource.MediaStreams.Where(i => i.Type == MediaStreamType.Audio) + .Select(i => i.Codec) + .Where(i => !string.IsNullOrWhiteSpace(i)) + .ToList(); + } + } + public string ActualOutputVideoCodec { get diff --git a/MediaBrowser.MediaEncoding/Encoder/EncodingJob.cs b/MediaBrowser.MediaEncoding/Encoder/EncodingJob.cs index 0c7ff1b76..145337a2a 100644 --- a/MediaBrowser.MediaEncoding/Encoder/EncodingJob.cs +++ b/MediaBrowser.MediaEncoding/Encoder/EncodingJob.cs @@ -11,6 +11,7 @@ using MediaBrowser.Model.Net; using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -117,6 +118,17 @@ namespace MediaBrowser.MediaEncoding.Encoder } } + public List AllAudioCodecs + { + get + { + return MediaSource.MediaStreams.Where(i => i.Type == MediaStreamType.Audio) + .Select(i => i.Codec) + .Where(i => !string.IsNullOrWhiteSpace(i)) + .ToList(); + } + } + private void DisposeIsoMount() { if (IsoMount != null) diff --git a/MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs b/MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs index e197bdb6f..70d02901e 100644 --- a/MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs +++ b/MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs @@ -846,7 +846,8 @@ namespace MediaBrowser.MediaEncoding.Encoder state.TargetVideoStreamCount, state.TargetAudioStreamCount, state.TargetVideoCodecTag, - state.IsTargetAVC); + state.IsTargetAVC, + state.AllAudioCodecs); if (mediaProfile != null) { diff --git a/MediaBrowser.Model/Dlna/ConditionProcessor.cs b/MediaBrowser.Model/Dlna/ConditionProcessor.cs index 1fbb4ffa1..aa0b6f431 100644 --- a/MediaBrowser.Model/Dlna/ConditionProcessor.cs +++ b/MediaBrowser.Model/Dlna/ConditionProcessor.cs @@ -1,7 +1,9 @@ using MediaBrowser.Model.Extensions; using MediaBrowser.Model.MediaInfo; using System; +using System.Collections.Generic; using System.Globalization; +using System.Linq; namespace MediaBrowser.Model.Dlna { @@ -22,12 +24,15 @@ namespace MediaBrowser.Model.Dlna int? numVideoStreams, int? numAudioStreams, string videoCodecTag, - bool? isAvc) + bool? isAvc, + List allAudioCodecs ) { switch (condition.Property) { case ProfileConditionValue.IsAnamorphic: return IsConditionSatisfied(condition, isAnamorphic); + case ProfileConditionValue.HasAudioCodec: + return IsHasAudioCodecConditionSatisfied(condition, allAudioCodecs); case ProfileConditionValue.IsAvc: return IsConditionSatisfied(condition, isAvc); case ProfileConditionValue.VideoFramerate: @@ -162,6 +167,25 @@ namespace MediaBrowser.Model.Dlna } } + private bool IsHasAudioCodecConditionSatisfied(ProfileCondition condition, List allAudioCodecs) + { + if (allAudioCodecs.Count == 0) + { + // If the value is unknown, it satisfies if not marked as required + return !condition.IsRequired; + } + + switch (condition.Condition) + { + case ProfileConditionType.Equals: + return allAudioCodecs.Contains(condition.Value, StringComparer.Ordinal); + case ProfileConditionType.NotEquals: + return !allAudioCodecs.Contains(condition.Value, StringComparer.Ordinal); + default: + throw new InvalidOperationException("Unexpected ProfileConditionType"); + } + } + private bool IsConditionSatisfied(ProfileCondition condition, bool? currentValue) { if (!currentValue.HasValue) diff --git a/MediaBrowser.Model/Dlna/ContainerProfile.cs b/MediaBrowser.Model/Dlna/ContainerProfile.cs index d9b75dfc2..35d7ada6b 100644 --- a/MediaBrowser.Model/Dlna/ContainerProfile.cs +++ b/MediaBrowser.Model/Dlna/ContainerProfile.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Xml.Serialization; using MediaBrowser.Model.Dlna; +using MediaBrowser.Model.Extensions; namespace MediaBrowser.Model.Dlna { @@ -27,5 +28,12 @@ namespace MediaBrowser.Model.Dlna } return list; } + + public bool ContainsContainer(string container) + { + List containers = GetContainers(); + + return containers.Count == 0 || ListHelper.ContainsIgnoreCase(containers, container ?? string.Empty); + } } } diff --git a/MediaBrowser.Model/Dlna/ContentFeatureBuilder.cs b/MediaBrowser.Model/Dlna/ContentFeatureBuilder.cs index 4a16a2780..c6a5116b4 100644 --- a/MediaBrowser.Model/Dlna/ContentFeatureBuilder.cs +++ b/MediaBrowser.Model/Dlna/ContentFeatureBuilder.cs @@ -119,7 +119,8 @@ namespace MediaBrowser.Model.Dlna int? numVideoStreams, int? numAudioStreams, string videoCodecTag, - bool? isAvc) + bool? isAvc, + List allAudioCodecs) { // first bit means Time based seek supported, second byte range seek supported (not sure about the order now), so 01 = only byte seek, 10 = time based, 11 = both, 00 = none string orgOp = ";DLNA.ORG_OP=" + DlnaMaps.GetOrgOpValue(runtimeTicks.HasValue, isDirectStream, transcodeSeekInfo); @@ -161,7 +162,8 @@ namespace MediaBrowser.Model.Dlna numVideoStreams, numAudioStreams, videoCodecTag, - isAvc); + isAvc, + allAudioCodecs); List orgPnValues = new List(); diff --git a/MediaBrowser.Model/Dlna/DeviceProfile.cs b/MediaBrowser.Model/Dlna/DeviceProfile.cs index 821531ed0..638f78dcb 100644 --- a/MediaBrowser.Model/Dlna/DeviceProfile.cs +++ b/MediaBrowser.Model/Dlna/DeviceProfile.cs @@ -297,7 +297,8 @@ namespace MediaBrowser.Model.Dlna int? numVideoStreams, int? numAudioStreams, string videoCodecTag, - bool? isAvc) + bool? isAvc, + List allAudioCodecs) { container = StringHelper.TrimStart(container ?? string.Empty, '.'); @@ -331,7 +332,7 @@ namespace MediaBrowser.Model.Dlna var anyOff = false; foreach (ProfileCondition c in i.Conditions) { - if (!conditionProcessor.IsVideoConditionSatisfied(GetModelProfileCondition(c), width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, refFrames, numVideoStreams, numAudioStreams, videoCodecTag, isAvc)) + if (!conditionProcessor.IsVideoConditionSatisfied(GetModelProfileCondition(c), width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, refFrames, numVideoStreams, numAudioStreams, videoCodecTag, isAvc, allAudioCodecs)) { anyOff = true; break; diff --git a/MediaBrowser.Model/Dlna/ProfileConditionValue.cs b/MediaBrowser.Model/Dlna/ProfileConditionValue.cs index 7e2002f17..9d6321c84 100644 --- a/MediaBrowser.Model/Dlna/ProfileConditionValue.cs +++ b/MediaBrowser.Model/Dlna/ProfileConditionValue.cs @@ -21,6 +21,7 @@ NumVideoStreams = 17, IsSecondaryAudio = 18, VideoCodecTag = 19, - IsAvc = 20 + IsAvc = 20, + HasAudioCodec = 21 } } \ No newline at end of file diff --git a/MediaBrowser.Model/Dlna/StreamBuilder.cs b/MediaBrowser.Model/Dlna/StreamBuilder.cs index 71f0fd541..dee1605f3 100644 --- a/MediaBrowser.Model/Dlna/StreamBuilder.cs +++ b/MediaBrowser.Model/Dlna/StreamBuilder.cs @@ -7,6 +7,7 @@ using MediaBrowser.Model.Session; using System; using System.Collections.Generic; using System.Globalization; +using System.Linq; namespace MediaBrowser.Model.Dlna { @@ -409,6 +410,9 @@ namespace MediaBrowser.Model.Dlna audioStreamIndex = audioStream.Index; } + var allMediaStreams = item.MediaStreams; + var allAudioCodecs = allMediaStreams.Where(i => i.Type == MediaStreamType.Audio).Select(i => i.Codec).Where(i => !string.IsNullOrWhiteSpace(i)).ToList(); + MediaStream videoStream = item.VideoStream; // TODO: This doesn't accout for situation of device being able to handle media bitrate, but wifi connection not fast enough @@ -424,7 +428,7 @@ namespace MediaBrowser.Model.Dlna if (isEligibleForDirectPlay || isEligibleForDirectStream) { // See if it can be direct played - PlayMethod? directPlay = GetVideoDirectPlayProfile(options, item, videoStream, audioStream, isEligibleForDirectPlay, isEligibleForDirectStream); + PlayMethod? directPlay = GetVideoDirectPlayProfile(options, item, videoStream, audioStream, isEligibleForDirectPlay, isEligibleForDirectStream, allMediaStreams); if (directPlay != null) { @@ -552,7 +556,7 @@ namespace MediaBrowser.Model.Dlna int? numAudioStreams = item.GetStreamCount(MediaStreamType.Audio); int? numVideoStreams = item.GetStreamCount(MediaStreamType.Video); - if (!conditionProcessor.IsVideoConditionSatisfied(applyCondition, width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, refFrames, numVideoStreams, numAudioStreams, videoCodecTag, isAvc)) + if (!conditionProcessor.IsVideoConditionSatisfied(applyCondition, width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, refFrames, numVideoStreams, numAudioStreams, videoCodecTag, isAvc, allAudioCodecs)) { LogConditionFailure(options.Profile, "VideoCodecProfile", applyCondition, item); applyConditions = false; @@ -653,7 +657,8 @@ namespace MediaBrowser.Model.Dlna MediaStream videoStream, MediaStream audioStream, bool isEligibleForDirectPlay, - bool isEligibleForDirectStream) + bool isEligibleForDirectStream, + List allMediaStreams) { DeviceProfile profile = options.Profile; @@ -701,7 +706,7 @@ namespace MediaBrowser.Model.Dlna foreach (ContainerProfile i in profile.ContainerProfiles) { if (i.Type == DlnaProfileType.Video && - ListHelper.ContainsIgnoreCase(i.GetContainers(), container)) + i.ContainsContainer(container)) { foreach (ProfileCondition c in i.Conditions) { @@ -734,10 +739,12 @@ namespace MediaBrowser.Model.Dlna int? numAudioStreams = mediaSource.GetStreamCount(MediaStreamType.Audio); int? numVideoStreams = mediaSource.GetStreamCount(MediaStreamType.Video); + var allAudioCodecs = allMediaStreams.Where(i => i.Type == MediaStreamType.Audio).Select(i => i.Codec).Where(i => !string.IsNullOrWhiteSpace(i)).ToList(); + // Check container conditions foreach (ProfileCondition i in conditions) { - if (!conditionProcessor.IsVideoConditionSatisfied(i, width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, refFrames, numVideoStreams, numAudioStreams, videoCodecTag, isAvc)) + if (!conditionProcessor.IsVideoConditionSatisfied(i, width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, refFrames, numVideoStreams, numAudioStreams, videoCodecTag, isAvc, allAudioCodecs)) { LogConditionFailure(profile, "VideoContainerProfile", i, mediaSource); @@ -764,7 +771,7 @@ namespace MediaBrowser.Model.Dlna bool applyConditions = true; foreach (ProfileCondition applyCondition in i.ApplyConditions) { - if (!conditionProcessor.IsVideoConditionSatisfied(applyCondition, width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, refFrames, numVideoStreams, numAudioStreams, videoCodecTag, isAvc)) + if (!conditionProcessor.IsVideoConditionSatisfied(applyCondition, width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, refFrames, numVideoStreams, numAudioStreams, videoCodecTag, isAvc, allAudioCodecs)) { LogConditionFailure(profile, "VideoCodecProfile", applyCondition, mediaSource); applyConditions = false; @@ -784,7 +791,7 @@ namespace MediaBrowser.Model.Dlna foreach (ProfileCondition i in conditions) { - if (!conditionProcessor.IsVideoConditionSatisfied(i, width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, refFrames, numVideoStreams, numAudioStreams, videoCodecTag, isAvc)) + if (!conditionProcessor.IsVideoConditionSatisfied(i, width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, refFrames, numVideoStreams, numAudioStreams, videoCodecTag, isAvc, allAudioCodecs)) { LogConditionFailure(profile, "VideoCodecProfile", i, mediaSource); diff --git a/MediaBrowser.Model/Dlna/StreamInfo.cs b/MediaBrowser.Model/Dlna/StreamInfo.cs index e5dd0353e..105edb131 100644 --- a/MediaBrowser.Model/Dlna/StreamInfo.cs +++ b/MediaBrowser.Model/Dlna/StreamInfo.cs @@ -6,6 +6,7 @@ using MediaBrowser.Model.MediaInfo; using MediaBrowser.Model.Session; using System; using System.Collections.Generic; +using System.Linq; namespace MediaBrowser.Model.Dlna { @@ -412,6 +413,17 @@ namespace MediaBrowser.Model.Dlna } } + public List AllAudioCodecs + { + get + { + return MediaSource.MediaStreams.Where(i => i.Type == MediaStreamType.Audio) + .Select(i => i.Codec) + .Where(i => !string.IsNullOrWhiteSpace(i)) + .ToList(); + } + } + /// /// Returns the video stream that will be used /// -- cgit v1.2.3 From de9cd28a7959f6920c82ff536339653334246c76 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 14 Dec 2016 15:58:55 -0500 Subject: remove tvos dts hack no longer needed --- Emby.Dlna/ContentDirectory/ControlHandler.cs | 27 +++++++++------------- Emby.Dlna/Didl/DidlBuilder.cs | 6 ++--- Emby.Dlna/PlayTo/PlayToController.cs | 3 +-- MediaBrowser.Api/Playback/BaseStreamingService.cs | 6 ++--- MediaBrowser.Api/Playback/StreamState.cs | 11 --------- MediaBrowser.MediaEncoding/Encoder/EncodingJob.cs | 11 --------- .../Encoder/EncodingJobFactory.cs | 3 +-- MediaBrowser.Model/Dlna/ConditionProcessor.cs | 24 +------------------ MediaBrowser.Model/Dlna/ContentFeatureBuilder.cs | 6 ++--- MediaBrowser.Model/Dlna/DeviceProfile.cs | 5 ++-- MediaBrowser.Model/Dlna/ProfileConditionValue.cs | 3 +-- MediaBrowser.Model/Dlna/StreamBuilder.cs | 11 ++++----- MediaBrowser.Model/Dlna/StreamInfo.cs | 11 --------- 13 files changed, 27 insertions(+), 100 deletions(-) (limited to 'MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs') diff --git a/Emby.Dlna/ContentDirectory/ControlHandler.cs b/Emby.Dlna/ContentDirectory/ControlHandler.cs index 98a151f29..bba8c53d9 100644 --- a/Emby.Dlna/ContentDirectory/ControlHandler.cs +++ b/Emby.Dlna/ContentDirectory/ControlHandler.cs @@ -98,6 +98,9 @@ namespace Emby.Dlna.ContentDirectory if (string.Equals(methodName, "Search", StringComparison.OrdinalIgnoreCase)) return HandleSearch(methodParams, user, deviceId).Result; + if (string.Equals(methodName, "X_BrowseByLetter", StringComparison.OrdinalIgnoreCase)) + return HandleX_BrowseByLetter(methodParams, user, deviceId).Result; + throw new ResourceNotFoundException("Unexpected control request name: " + methodName); } @@ -118,7 +121,7 @@ namespace Emby.Dlna.ContentDirectory _userDataManager.SaveUserData(user.Id, item, userdata, UserDataSaveReason.TogglePlayed, CancellationToken.None); - return new Dictionary(StringComparer.OrdinalIgnoreCase); + return new Dictionary(StringComparer.OrdinalIgnoreCase); } private IEnumerable> HandleGetSearchCapabilities() @@ -147,7 +150,7 @@ namespace Emby.Dlna.ContentDirectory private IEnumerable> HandleGetSystemUpdateID() { - var headers = new Dictionary(StringComparer.OrdinalIgnoreCase); + var headers = new Dictionary(StringComparer.OrdinalIgnoreCase); headers.Add("Id", _systemUpdateId.ToString(_usCulture)); return headers; } @@ -309,6 +312,12 @@ namespace Emby.Dlna.ContentDirectory }; } + private Task>> HandleX_BrowseByLetter(IDictionary sparams, User user, string deviceId) + { + // TODO: Implement this method + return HandleSearch(sparams, user, deviceId); + } + private async Task>> HandleSearch(IDictionary sparams, User user, string deviceId) { var searchCriteria = new SearchCriteria(GetValueOrDefault(sparams, "SearchCriteria", "")); @@ -553,20 +562,6 @@ namespace Emby.Dlna.ContentDirectory return result; } - private bool EnablePeopleDisplay(BaseItem item) - { - if (_libraryManager.GetPeopleNames(new InternalPeopleQuery - { - ItemId = item.Id - - }).Count > 0) - { - return item is Movie; - } - - return false; - } - private ServerItem GetItemFromObjectId(string id, User user) { return DidlBuilder.IsIdRoot(id) diff --git a/Emby.Dlna/Didl/DidlBuilder.cs b/Emby.Dlna/Didl/DidlBuilder.cs index e968509b5..3dcdaf2ef 100644 --- a/Emby.Dlna/Didl/DidlBuilder.cs +++ b/Emby.Dlna/Didl/DidlBuilder.cs @@ -207,8 +207,7 @@ namespace Emby.Dlna.Didl streamInfo.TargetVideoStreamCount, streamInfo.TargetAudioStreamCount, streamInfo.TargetVideoCodecTag, - streamInfo.IsTargetAVC, - streamInfo.AllAudioCodecs); + streamInfo.IsTargetAVC); foreach (var contentFeature in contentFeatureList) { @@ -348,8 +347,7 @@ namespace Emby.Dlna.Didl streamInfo.TargetVideoStreamCount, streamInfo.TargetAudioStreamCount, streamInfo.TargetVideoCodecTag, - streamInfo.IsTargetAVC, - streamInfo.AllAudioCodecs); + streamInfo.IsTargetAVC); var filename = url.Substring(0, url.IndexOf('?')); diff --git a/Emby.Dlna/PlayTo/PlayToController.cs b/Emby.Dlna/PlayTo/PlayToController.cs index bfc29d0f5..7dff8bda1 100644 --- a/Emby.Dlna/PlayTo/PlayToController.cs +++ b/Emby.Dlna/PlayTo/PlayToController.cs @@ -541,8 +541,7 @@ namespace Emby.Dlna.PlayTo streamInfo.TargetVideoStreamCount, streamInfo.TargetAudioStreamCount, streamInfo.TargetVideoCodecTag, - streamInfo.IsTargetAVC, - streamInfo.AllAudioCodecs); + streamInfo.IsTargetAVC); return list.FirstOrDefault(); } diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index 288553ade..3718edba4 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -2358,8 +2358,7 @@ namespace MediaBrowser.Api.Playback state.TargetVideoStreamCount, state.TargetAudioStreamCount, state.TargetVideoCodecTag, - state.IsTargetAVC, - state.AllAudioCodecs); + state.IsTargetAVC); if (mediaProfile != null) { @@ -2581,8 +2580,7 @@ namespace MediaBrowser.Api.Playback state.TargetVideoStreamCount, state.TargetAudioStreamCount, state.TargetVideoCodecTag, - state.IsTargetAVC, - state.AllAudioCodecs + state.IsTargetAVC ).FirstOrDefault() ?? string.Empty; } diff --git a/MediaBrowser.Api/Playback/StreamState.cs b/MediaBrowser.Api/Playback/StreamState.cs index 9c337781c..d1ef996ae 100644 --- a/MediaBrowser.Api/Playback/StreamState.cs +++ b/MediaBrowser.Api/Playback/StreamState.cs @@ -245,17 +245,6 @@ namespace MediaBrowser.Api.Playback public int? OutputAudioBitrate; public int? OutputVideoBitrate; - public List AllAudioCodecs - { - get - { - return MediaSource.MediaStreams.Where(i => i.Type == MediaStreamType.Audio) - .Select(i => i.Codec) - .Where(i => !string.IsNullOrWhiteSpace(i)) - .ToList(); - } - } - public string ActualOutputVideoCodec { get diff --git a/MediaBrowser.MediaEncoding/Encoder/EncodingJob.cs b/MediaBrowser.MediaEncoding/Encoder/EncodingJob.cs index 145337a2a..b5ff5cbb6 100644 --- a/MediaBrowser.MediaEncoding/Encoder/EncodingJob.cs +++ b/MediaBrowser.MediaEncoding/Encoder/EncodingJob.cs @@ -118,17 +118,6 @@ namespace MediaBrowser.MediaEncoding.Encoder } } - public List AllAudioCodecs - { - get - { - return MediaSource.MediaStreams.Where(i => i.Type == MediaStreamType.Audio) - .Select(i => i.Codec) - .Where(i => !string.IsNullOrWhiteSpace(i)) - .ToList(); - } - } - private void DisposeIsoMount() { if (IsoMount != null) diff --git a/MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs b/MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs index 70d02901e..e197bdb6f 100644 --- a/MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs +++ b/MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs @@ -846,8 +846,7 @@ namespace MediaBrowser.MediaEncoding.Encoder state.TargetVideoStreamCount, state.TargetAudioStreamCount, state.TargetVideoCodecTag, - state.IsTargetAVC, - state.AllAudioCodecs); + state.IsTargetAVC); if (mediaProfile != null) { diff --git a/MediaBrowser.Model/Dlna/ConditionProcessor.cs b/MediaBrowser.Model/Dlna/ConditionProcessor.cs index aa0b6f431..e9e76a993 100644 --- a/MediaBrowser.Model/Dlna/ConditionProcessor.cs +++ b/MediaBrowser.Model/Dlna/ConditionProcessor.cs @@ -24,15 +24,12 @@ namespace MediaBrowser.Model.Dlna int? numVideoStreams, int? numAudioStreams, string videoCodecTag, - bool? isAvc, - List allAudioCodecs ) + bool? isAvc ) { switch (condition.Property) { case ProfileConditionValue.IsAnamorphic: return IsConditionSatisfied(condition, isAnamorphic); - case ProfileConditionValue.HasAudioCodec: - return IsHasAudioCodecConditionSatisfied(condition, allAudioCodecs); case ProfileConditionValue.IsAvc: return IsConditionSatisfied(condition, isAvc); case ProfileConditionValue.VideoFramerate: @@ -167,25 +164,6 @@ namespace MediaBrowser.Model.Dlna } } - private bool IsHasAudioCodecConditionSatisfied(ProfileCondition condition, List allAudioCodecs) - { - if (allAudioCodecs.Count == 0) - { - // If the value is unknown, it satisfies if not marked as required - return !condition.IsRequired; - } - - switch (condition.Condition) - { - case ProfileConditionType.Equals: - return allAudioCodecs.Contains(condition.Value, StringComparer.Ordinal); - case ProfileConditionType.NotEquals: - return !allAudioCodecs.Contains(condition.Value, StringComparer.Ordinal); - default: - throw new InvalidOperationException("Unexpected ProfileConditionType"); - } - } - private bool IsConditionSatisfied(ProfileCondition condition, bool? currentValue) { if (!currentValue.HasValue) diff --git a/MediaBrowser.Model/Dlna/ContentFeatureBuilder.cs b/MediaBrowser.Model/Dlna/ContentFeatureBuilder.cs index c6a5116b4..4a16a2780 100644 --- a/MediaBrowser.Model/Dlna/ContentFeatureBuilder.cs +++ b/MediaBrowser.Model/Dlna/ContentFeatureBuilder.cs @@ -119,8 +119,7 @@ namespace MediaBrowser.Model.Dlna int? numVideoStreams, int? numAudioStreams, string videoCodecTag, - bool? isAvc, - List allAudioCodecs) + bool? isAvc) { // first bit means Time based seek supported, second byte range seek supported (not sure about the order now), so 01 = only byte seek, 10 = time based, 11 = both, 00 = none string orgOp = ";DLNA.ORG_OP=" + DlnaMaps.GetOrgOpValue(runtimeTicks.HasValue, isDirectStream, transcodeSeekInfo); @@ -162,8 +161,7 @@ namespace MediaBrowser.Model.Dlna numVideoStreams, numAudioStreams, videoCodecTag, - isAvc, - allAudioCodecs); + isAvc); List orgPnValues = new List(); diff --git a/MediaBrowser.Model/Dlna/DeviceProfile.cs b/MediaBrowser.Model/Dlna/DeviceProfile.cs index 638f78dcb..821531ed0 100644 --- a/MediaBrowser.Model/Dlna/DeviceProfile.cs +++ b/MediaBrowser.Model/Dlna/DeviceProfile.cs @@ -297,8 +297,7 @@ namespace MediaBrowser.Model.Dlna int? numVideoStreams, int? numAudioStreams, string videoCodecTag, - bool? isAvc, - List allAudioCodecs) + bool? isAvc) { container = StringHelper.TrimStart(container ?? string.Empty, '.'); @@ -332,7 +331,7 @@ namespace MediaBrowser.Model.Dlna var anyOff = false; foreach (ProfileCondition c in i.Conditions) { - if (!conditionProcessor.IsVideoConditionSatisfied(GetModelProfileCondition(c), width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, refFrames, numVideoStreams, numAudioStreams, videoCodecTag, isAvc, allAudioCodecs)) + if (!conditionProcessor.IsVideoConditionSatisfied(GetModelProfileCondition(c), width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, refFrames, numVideoStreams, numAudioStreams, videoCodecTag, isAvc)) { anyOff = true; break; diff --git a/MediaBrowser.Model/Dlna/ProfileConditionValue.cs b/MediaBrowser.Model/Dlna/ProfileConditionValue.cs index 9d6321c84..7e2002f17 100644 --- a/MediaBrowser.Model/Dlna/ProfileConditionValue.cs +++ b/MediaBrowser.Model/Dlna/ProfileConditionValue.cs @@ -21,7 +21,6 @@ NumVideoStreams = 17, IsSecondaryAudio = 18, VideoCodecTag = 19, - IsAvc = 20, - HasAudioCodec = 21 + IsAvc = 20 } } \ No newline at end of file diff --git a/MediaBrowser.Model/Dlna/StreamBuilder.cs b/MediaBrowser.Model/Dlna/StreamBuilder.cs index dee1605f3..aac4ed4d1 100644 --- a/MediaBrowser.Model/Dlna/StreamBuilder.cs +++ b/MediaBrowser.Model/Dlna/StreamBuilder.cs @@ -411,7 +411,6 @@ namespace MediaBrowser.Model.Dlna } var allMediaStreams = item.MediaStreams; - var allAudioCodecs = allMediaStreams.Where(i => i.Type == MediaStreamType.Audio).Select(i => i.Codec).Where(i => !string.IsNullOrWhiteSpace(i)).ToList(); MediaStream videoStream = item.VideoStream; @@ -556,7 +555,7 @@ namespace MediaBrowser.Model.Dlna int? numAudioStreams = item.GetStreamCount(MediaStreamType.Audio); int? numVideoStreams = item.GetStreamCount(MediaStreamType.Video); - if (!conditionProcessor.IsVideoConditionSatisfied(applyCondition, width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, refFrames, numVideoStreams, numAudioStreams, videoCodecTag, isAvc, allAudioCodecs)) + if (!conditionProcessor.IsVideoConditionSatisfied(applyCondition, width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, refFrames, numVideoStreams, numAudioStreams, videoCodecTag, isAvc)) { LogConditionFailure(options.Profile, "VideoCodecProfile", applyCondition, item); applyConditions = false; @@ -739,12 +738,10 @@ namespace MediaBrowser.Model.Dlna int? numAudioStreams = mediaSource.GetStreamCount(MediaStreamType.Audio); int? numVideoStreams = mediaSource.GetStreamCount(MediaStreamType.Video); - var allAudioCodecs = allMediaStreams.Where(i => i.Type == MediaStreamType.Audio).Select(i => i.Codec).Where(i => !string.IsNullOrWhiteSpace(i)).ToList(); - // Check container conditions foreach (ProfileCondition i in conditions) { - if (!conditionProcessor.IsVideoConditionSatisfied(i, width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, refFrames, numVideoStreams, numAudioStreams, videoCodecTag, isAvc, allAudioCodecs)) + if (!conditionProcessor.IsVideoConditionSatisfied(i, width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, refFrames, numVideoStreams, numAudioStreams, videoCodecTag, isAvc)) { LogConditionFailure(profile, "VideoContainerProfile", i, mediaSource); @@ -771,7 +768,7 @@ namespace MediaBrowser.Model.Dlna bool applyConditions = true; foreach (ProfileCondition applyCondition in i.ApplyConditions) { - if (!conditionProcessor.IsVideoConditionSatisfied(applyCondition, width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, refFrames, numVideoStreams, numAudioStreams, videoCodecTag, isAvc, allAudioCodecs)) + if (!conditionProcessor.IsVideoConditionSatisfied(applyCondition, width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, refFrames, numVideoStreams, numAudioStreams, videoCodecTag, isAvc)) { LogConditionFailure(profile, "VideoCodecProfile", applyCondition, mediaSource); applyConditions = false; @@ -791,7 +788,7 @@ namespace MediaBrowser.Model.Dlna foreach (ProfileCondition i in conditions) { - if (!conditionProcessor.IsVideoConditionSatisfied(i, width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, refFrames, numVideoStreams, numAudioStreams, videoCodecTag, isAvc, allAudioCodecs)) + if (!conditionProcessor.IsVideoConditionSatisfied(i, width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, refFrames, numVideoStreams, numAudioStreams, videoCodecTag, isAvc)) { LogConditionFailure(profile, "VideoCodecProfile", i, mediaSource); diff --git a/MediaBrowser.Model/Dlna/StreamInfo.cs b/MediaBrowser.Model/Dlna/StreamInfo.cs index 105edb131..eb3b7d8fb 100644 --- a/MediaBrowser.Model/Dlna/StreamInfo.cs +++ b/MediaBrowser.Model/Dlna/StreamInfo.cs @@ -413,17 +413,6 @@ namespace MediaBrowser.Model.Dlna } } - public List AllAudioCodecs - { - get - { - return MediaSource.MediaStreams.Where(i => i.Type == MediaStreamType.Audio) - .Select(i => i.Codec) - .Where(i => !string.IsNullOrWhiteSpace(i)) - .ToList(); - } - } - /// /// Returns the video stream that will be used /// -- cgit v1.2.3