diff --git a/MediaBrowser.MediaEncoding/BdInfo/BdInfoExaminer.cs b/MediaBrowser.MediaEncoding/BdInfo/BdInfoExaminer.cs index 5bae4fbd5a..6ca994fb7e 100644 --- a/MediaBrowser.MediaEncoding/BdInfo/BdInfoExaminer.cs +++ b/MediaBrowser.MediaEncoding/BdInfo/BdInfoExaminer.cs @@ -1,7 +1,9 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; using BDInfo; +using Jellyfin.Extensions; using MediaBrowser.Model.Entities; using MediaBrowser.Model.IO; using MediaBrowser.Model.MediaInfo; @@ -60,21 +62,20 @@ public class BdInfoExaminer : IBlurayExaminer var sortedStreams = playlist.SortedStreams; var mediaStreams = new List(sortedStreams.Count); - foreach (var stream in sortedStreams) + for (int i = 0; i < sortedStreams.Count; i++) { + var stream = sortedStreams[i]; switch (stream) { case TSVideoStream videoStream: - AddVideoStream(mediaStreams, videoStream); + AddVideoStream(mediaStreams, i, videoStream); break; case TSAudioStream audioStream: - AddAudioStream(mediaStreams, audioStream); + AddAudioStream(mediaStreams, i, audioStream); break; - case TSTextStream textStream: - AddSubtitleStream(mediaStreams, textStream); - break; - case TSGraphicsStream graphicStream: - AddSubtitleStream(mediaStreams, graphicStream); + case TSTextStream: + case TSGraphicsStream: + AddSubtitleStream(mediaStreams, i, stream); break; } } @@ -96,18 +97,19 @@ public class BdInfoExaminer : IBlurayExaminer /// Adds the video stream. /// /// The streams. + /// The stream index. /// The video stream. - private void AddVideoStream(List streams, TSVideoStream videoStream) + private void AddVideoStream(List streams, int index, TSVideoStream videoStream) { var mediaStream = new MediaStream { BitRate = Convert.ToInt32(videoStream.BitRate), Width = videoStream.Width, Height = videoStream.Height, - Codec = videoStream.CodecShortName, + Codec = GetNormalizedCodec(videoStream), IsInterlaced = videoStream.IsInterlaced, Type = MediaStreamType.Video, - Index = streams.Count + Index = index }; if (videoStream.FrameRateDenominator > 0) @@ -125,17 +127,19 @@ public class BdInfoExaminer : IBlurayExaminer /// Adds the audio stream. /// /// The streams. + /// The stream index. /// The audio stream. - private void AddAudioStream(List streams, TSAudioStream audioStream) + private void AddAudioStream(List streams, int index, TSAudioStream audioStream) { var stream = new MediaStream { - Codec = audioStream.CodecShortName, + Codec = GetNormalizedCodec(audioStream), Language = audioStream.LanguageCode, - Channels = audioStream.ChannelCount, + ChannelLayout = string.Format(CultureInfo.InvariantCulture, "{0:D}.{1:D}", audioStream.ChannelCount, audioStream.LFE), + Channels = audioStream.ChannelCount + audioStream.LFE, SampleRate = audioStream.SampleRate, Type = MediaStreamType.Audio, - Index = streams.Count + Index = index }; var bitrate = Convert.ToInt32(audioStream.BitRate); @@ -145,11 +149,6 @@ public class BdInfoExaminer : IBlurayExaminer stream.BitRate = bitrate; } - if (audioStream.LFE > 0) - { - stream.Channels = audioStream.ChannelCount + 1; - } - streams.Add(stream); } @@ -157,31 +156,28 @@ public class BdInfoExaminer : IBlurayExaminer /// Adds the subtitle stream. /// /// The streams. - /// The text stream. - private void AddSubtitleStream(List streams, TSTextStream textStream) + /// The stream index. + /// The stream. + private void AddSubtitleStream(List streams, int index, TSStream stream) { streams.Add(new MediaStream { - Language = textStream.LanguageCode, - Codec = textStream.CodecShortName, + Language = stream.LanguageCode, + Codec = GetNormalizedCodec(stream), Type = MediaStreamType.Subtitle, - Index = streams.Count + Index = index }); } - /// - /// Adds the subtitle stream. - /// - /// The streams. - /// The text stream. - private void AddSubtitleStream(List streams, TSGraphicsStream textStream) - { - streams.Add(new MediaStream + private string GetNormalizedCodec(TSStream stream) + => stream.StreamType switch { - Language = textStream.LanguageCode, - Codec = textStream.CodecShortName, - Type = MediaStreamType.Subtitle, - Index = streams.Count - }); - } + TSStreamType.MPEG1_VIDEO => "mpeg1video", + TSStreamType.MPEG2_VIDEO => "mpeg2video", + TSStreamType.VC1_VIDEO => "vc1", + TSStreamType.AC3_PLUS_AUDIO or TSStreamType.AC3_PLUS_SECONDARY_AUDIO => "eac3", + TSStreamType.DTS_AUDIO or TSStreamType.DTS_HD_AUDIO or TSStreamType.DTS_HD_MASTER_AUDIO or TSStreamType.DTS_HD_SECONDARY_AUDIO => "dts", + TSStreamType.PRESENTATION_GRAPHICS => "pgssub", + _ => stream.CodecShortName + }; }