Explorar o código

handle bitrate overflow

Luke Pulverenti %!s(int64=8) %!d(string=hai) anos
pai
achega
6066619138

+ 1 - 1
Emby.Server.Implementations/Sync/SyncHelper.cs

@@ -4,7 +4,7 @@ namespace Emby.Server.Implementations.Sync
 {
     public class SyncHelper
     {
-        public static int? AdjustBitrate(int? profileBitrate, string quality)
+        public static long? AdjustBitrate(long? profileBitrate, string quality)
         {
             if (profileBitrate.HasValue)
             {

+ 4 - 4
MediaBrowser.Api/Playback/MediaInfoService.cs

@@ -227,7 +227,7 @@ namespace MediaBrowser.Api.Playback
             PlaybackInfoResponse result,
             DeviceProfile profile,
             AuthorizationInfo auth,
-            int? maxBitrate,
+            long? maxBitrate,
             long startTimeTicks,
             string mediaSourceId,
             int? audioStreamIndex,
@@ -249,7 +249,7 @@ namespace MediaBrowser.Api.Playback
             MediaSourceInfo mediaSource,
             DeviceProfile profile,
             AuthorizationInfo auth,
-            int? maxBitrate,
+            long? maxBitrate,
             long startTimeTicks,
             string mediaSourceId,
             int? audioStreamIndex,
@@ -383,7 +383,7 @@ namespace MediaBrowser.Api.Playback
             }
         }
 
-        private int? GetMaxBitrate(int? clientMaxBitrate)
+        private long? GetMaxBitrate(long? clientMaxBitrate)
         {
             var maxBitrate = clientMaxBitrate;
             var remoteClientMaxBitrate = _config.Configuration.RemoteClientBitrateLimit;
@@ -425,7 +425,7 @@ namespace MediaBrowser.Api.Playback
             }
         }
 
-        private void SortMediaSources(PlaybackInfoResponse result, int? maxBitrate)
+        private void SortMediaSources(PlaybackInfoResponse result, long? maxBitrate)
         {
             var originalList = result.MediaSources.ToList();
 

+ 1 - 5
MediaBrowser.Api/Playback/StreamState.cs

@@ -93,13 +93,9 @@ namespace MediaBrowser.Api.Playback
                     {
                         return 3;
                     }
-                    return 6;
-                }
-
-                if (!RunTimeTicks.HasValue)
-                {
                     return 3;
                 }
+
                 return 3;
             }
         }

+ 2 - 2
MediaBrowser.Model/Dlna/AudioOptions.cs

@@ -41,7 +41,7 @@ namespace MediaBrowser.Model.Dlna
         /// <summary>
         /// The application's configured quality setting
         /// </summary>
-        public int? MaxBitrate { get; set; }
+        public long? MaxBitrate { get; set; }
 
         /// <summary>
         /// Gets or sets the context.
@@ -59,7 +59,7 @@ namespace MediaBrowser.Model.Dlna
         /// Gets the maximum bitrate.
         /// </summary>
         /// <returns>System.Nullable&lt;System.Int32&gt;.</returns>
-        public int? GetMaxBitrate(bool isAudio)
+        public long? GetMaxBitrate(bool isAudio)
         {
             if (MaxBitrate.HasValue)
             {

+ 2 - 2
MediaBrowser.Model/Dlna/DeviceProfile.cs

@@ -51,8 +51,8 @@ namespace MediaBrowser.Model.Dlna
         public int? MaxIconWidth { get; set; }
         public int? MaxIconHeight { get; set; }
 
-        public int? MaxStreamingBitrate { get; set; }
-        public int? MaxStaticBitrate { get; set; }
+        public long? MaxStreamingBitrate { get; set; }
+        public long? MaxStaticBitrate { get; set; }
 
         public int? MusicStreamingTranscodingBitrate { get; set; }
         public int? MaxStaticMusicBitrate { get; set; }

+ 14 - 12
MediaBrowser.Model/Dlna/StreamBuilder.cs

@@ -93,7 +93,7 @@ namespace MediaBrowser.Model.Dlna
             return GetOptimalStream(streams, options.GetMaxBitrate(false));
         }
 
-        private StreamInfo GetOptimalStream(List<StreamInfo> streams, int? maxBitrate)
+        private StreamInfo GetOptimalStream(List<StreamInfo> streams, long? maxBitrate)
         {
             streams = StreamInfoSorter.SortMediaSources(streams, maxBitrate);
 
@@ -277,25 +277,26 @@ namespace MediaBrowser.Model.Dlna
                     playlistItem.MaxAudioChannels = Math.Min(options.MaxAudioChannels.Value, currentValue);
                 }
 
-                int transcodingBitrate = options.AudioTranscodingBitrate ??
+                long transcodingBitrate = options.AudioTranscodingBitrate ??
                     options.Profile.MusicStreamingTranscodingBitrate ??
                     128000;
 
-                int? configuredBitrate = options.GetMaxBitrate(true);
+                var configuredBitrate = options.GetMaxBitrate(true);
 
                 if (configuredBitrate.HasValue)
                 {
                     transcodingBitrate = Math.Min(configuredBitrate.Value, transcodingBitrate);
                 }
 
-                playlistItem.AudioBitrate = Math.Min(transcodingBitrate, playlistItem.AudioBitrate ?? transcodingBitrate);
+                var longBitrate = Math.Min(transcodingBitrate, playlistItem.AudioBitrate ?? transcodingBitrate);
+                playlistItem.AudioBitrate = longBitrate > int.MaxValue ? int.MaxValue : Convert.ToInt32(longBitrate);
 
             }
 
             return playlistItem;
         }
 
-        private int? GetBitrateForDirectPlayCheck(MediaSourceInfo item, AudioOptions options, bool isAudio)
+        private long? GetBitrateForDirectPlayCheck(MediaSourceInfo item, AudioOptions options, bool isAudio)
         {
             if (item.Protocol == MediaProtocol.File)
             {
@@ -583,11 +584,11 @@ namespace MediaBrowser.Model.Dlna
                 int audioBitrate = GetAudioBitrate(playlistItem.SubProtocol, options.GetMaxBitrate(false), playlistItem.TargetAudioChannels, playlistItem.TargetAudioCodec, audioStream);
                 playlistItem.AudioBitrate = Math.Min(playlistItem.AudioBitrate ?? audioBitrate, audioBitrate);
 
-                int? maxBitrateSetting = options.GetMaxBitrate(false);
+                var maxBitrateSetting = options.GetMaxBitrate(false);
                 // Honor max rate
                 if (maxBitrateSetting.HasValue)
                 {
-                    int videoBitrate = maxBitrateSetting.Value;
+                    var videoBitrate = maxBitrateSetting.Value;
 
                     if (playlistItem.AudioBitrate.HasValue)
                     {
@@ -595,15 +596,16 @@ namespace MediaBrowser.Model.Dlna
                     }
 
                     // Make sure the video bitrate is lower than bitrate settings but at least 64k
-                    int currentValue = playlistItem.VideoBitrate ?? videoBitrate;
-                    playlistItem.VideoBitrate = Math.Max(Math.Min(videoBitrate, currentValue), 64000);
+                    long currentValue = playlistItem.VideoBitrate ?? videoBitrate;
+                    var longBitrate = Math.Max(Math.Min(videoBitrate, currentValue), 64000);
+                    playlistItem.VideoBitrate = longBitrate > int.MaxValue ? int.MaxValue : Convert.ToInt32(longBitrate);
                 }
             }
 
             return playlistItem;
         }
 
-        private int GetAudioBitrate(string subProtocol, int? maxTotalBitrate, int? targetAudioChannels, string targetAudioCodec, MediaStream audioStream)
+        private int GetAudioBitrate(string subProtocol, long? maxTotalBitrate, int? targetAudioChannels, string targetAudioCodec, MediaStream audioStream)
         {
             int defaultBitrate = audioStream == null ? 192000 : audioStream.BitRate ?? 192000;
             // Reduce the bitrate if we're downmixing
@@ -865,7 +867,7 @@ namespace MediaBrowser.Model.Dlna
         }
 
         private bool IsEligibleForDirectPlay(MediaSourceInfo item,
-            int? maxBitrate,
+            long? maxBitrate,
             MediaStream subtitleStream,
             VideoOptions options,
             PlayMethod playMethod)
@@ -960,7 +962,7 @@ namespace MediaBrowser.Model.Dlna
             return null;
         }
 
-        private bool IsAudioEligibleForDirectPlay(MediaSourceInfo item, int? maxBitrate)
+        private bool IsAudioEligibleForDirectPlay(MediaSourceInfo item, long? maxBitrate)
         {
             if (!maxBitrate.HasValue)
             {

+ 1 - 1
MediaBrowser.Model/Dlna/StreamInfoSorter.cs

@@ -7,7 +7,7 @@ namespace MediaBrowser.Model.Dlna
 {
     public class StreamInfoSorter
     {
-        public static List<StreamInfo> SortMediaSources(List<StreamInfo> streams, int? maxBitrate)
+        public static List<StreamInfo> SortMediaSources(List<StreamInfo> streams, long? maxBitrate)
         {
             return streams.OrderBy(i =>
             {

+ 1 - 1
MediaBrowser.Model/MediaInfo/LiveStreamRequest.cs

@@ -7,7 +7,7 @@ namespace MediaBrowser.Model.MediaInfo
         public string OpenToken { get; set; }
         public string UserId { get; set; }
         public string PlaySessionId { get; set; }
-        public int? MaxStreamingBitrate { get; set; }
+        public long? MaxStreamingBitrate { get; set; }
         public long? StartTimeTicks { get; set; }
         public int? AudioStreamIndex { get; set; }
         public int? SubtitleStreamIndex { get; set; }

+ 1 - 1
MediaBrowser.Model/MediaInfo/PlaybackInfoRequest.cs

@@ -8,7 +8,7 @@ namespace MediaBrowser.Model.MediaInfo
 
         public string UserId { get; set; }
 
-        public int? MaxStreamingBitrate { get; set; }
+        public long? MaxStreamingBitrate { get; set; }
 
         public long? StartTimeTicks { get; set; }