From 820b4873fb669b5a273817d68f3fbfc216b6610e Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 4 Jun 2017 16:28:27 -0400 Subject: [PATCH] move methods to base class --- .../Playback/BaseStreamingService.cs | 1 - MediaBrowser.Api/Playback/StreamState.cs | 242 ---------------- .../MediaEncoding/EncodingJobInfo.cs | 267 +++++++++++++++++- .../Encoder/EncodingJob.cs | 242 ---------------- .../Encoder/EncodingJobFactory.cs | 1 - .../Encoder/MediaEncoder.cs | 7 +- 6 files changed, 267 insertions(+), 493 deletions(-) diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index 3ffa26450..bbee36199 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -783,7 +783,6 @@ namespace MediaBrowser.Api.Playback state.OutputContainer = (container ?? string.Empty).TrimStart('.'); state.OutputAudioBitrate = EncodingHelper.GetAudioBitrateParam(state.Request, state.AudioStream); - state.OutputAudioSampleRate = request.AudioSampleRate; state.OutputAudioCodec = state.Request.AudioCodec; diff --git a/MediaBrowser.Api/Playback/StreamState.cs b/MediaBrowser.Api/Playback/StreamState.cs index 1daca9e33..2cf7d81af 100644 --- a/MediaBrowser.Api/Playback/StreamState.cs +++ b/MediaBrowser.Api/Playback/StreamState.cs @@ -250,248 +250,6 @@ namespace MediaBrowser.Api.Playback public DeviceProfile DeviceProfile { get; set; } - public int? TotalOutputBitrate - { - get - { - return (OutputAudioBitrate ?? 0) + (OutputVideoBitrate ?? 0); - } - } - - public int? OutputWidth - { - get - { - if (VideoStream != null && VideoStream.Width.HasValue && VideoStream.Height.HasValue) - { - var size = new ImageSize - { - Width = VideoStream.Width.Value, - Height = VideoStream.Height.Value - }; - - var newSize = DrawingUtils.Resize(size, - VideoRequest.Width, - VideoRequest.Height, - VideoRequest.MaxWidth, - VideoRequest.MaxHeight); - - return Convert.ToInt32(newSize.Width); - } - - if (VideoRequest == null) - { - return null; - } - - return VideoRequest.MaxWidth ?? VideoRequest.Width; - } - } - - public int? OutputHeight - { - get - { - if (VideoStream != null && VideoStream.Width.HasValue && VideoStream.Height.HasValue) - { - var size = new ImageSize - { - Width = VideoStream.Width.Value, - Height = VideoStream.Height.Value - }; - - var newSize = DrawingUtils.Resize(size, - VideoRequest.Width, - VideoRequest.Height, - VideoRequest.MaxWidth, - VideoRequest.MaxHeight); - - return Convert.ToInt32(newSize.Height); - } - - if (VideoRequest == null) - { - return null; - } - - return VideoRequest.MaxHeight ?? VideoRequest.Height; - } - } - - /// - /// Predicts the audio sample rate that will be in the output stream - /// - public int? TargetVideoBitDepth - { - get - { - var stream = VideoStream; - return stream == null || !Request.Static ? null : stream.BitDepth; - } - } - - /// - /// Gets the target reference frames. - /// - /// The target reference frames. - public int? TargetRefFrames - { - get - { - var stream = VideoStream; - return stream == null || !Request.Static ? null : stream.RefFrames; - } - } - - public int? TargetVideoStreamCount - { - get - { - if (Request.Static) - { - return GetMediaStreamCount(MediaStreamType.Video, int.MaxValue); - } - return GetMediaStreamCount(MediaStreamType.Video, 1); - } - } - - public int? TargetAudioStreamCount - { - get - { - if (Request.Static) - { - return GetMediaStreamCount(MediaStreamType.Audio, int.MaxValue); - } - return GetMediaStreamCount(MediaStreamType.Audio, 1); - } - } - - public bool? IsTargetAnamorphic - { - get - { - if (Request.Static) - { - return VideoStream == null ? null : VideoStream.IsAnamorphic; - } - - return false; - } - } - - public bool? IsTargetInterlaced - { - get - { - if (Request.Static) - { - return VideoStream == null ? (bool?)null : VideoStream.IsInterlaced; - } - - if (DeInterlace) - { - return false; - } - - return VideoStream == null ? (bool?)null : VideoStream.IsInterlaced; - } - } - - private int? GetMediaStreamCount(MediaStreamType type, int limit) - { - var count = MediaSource.GetStreamCount(type); - - if (count.HasValue) - { - count = Math.Min(count.Value, limit); - } - - return count; - } - - /// - /// Predicts the audio sample rate that will be in the output stream - /// - public float? TargetFramerate - { - get - { - var stream = VideoStream; - var requestedFramerate = VideoRequest.MaxFramerate ?? VideoRequest.Framerate; - - return requestedFramerate.HasValue && !Request.Static - ? requestedFramerate - : stream == null ? null : stream.AverageFrameRate ?? stream.RealFrameRate; - } - } - - public TransportStreamTimestamp TargetTimestamp - { - get - { - var defaultValue = string.Equals(OutputContainer, "m2ts", StringComparison.OrdinalIgnoreCase) ? - TransportStreamTimestamp.Valid : - TransportStreamTimestamp.None; - - return !Request.Static - ? defaultValue - : InputTimestamp; - } - } - - /// - /// Predicts the audio sample rate that will be in the output stream - /// - public int? TargetPacketLength - { - get - { - var stream = VideoStream; - return !Request.Static - ? null - : stream == null ? null : stream.PacketLength; - } - } - - /// - /// Predicts the audio sample rate that will be in the output stream - /// - public string TargetVideoProfile - { - get - { - var stream = VideoStream; - return !string.IsNullOrEmpty(VideoRequest.Profile) && !Request.Static - ? VideoRequest.Profile - : stream == null ? null : stream.Profile; - } - } - - public string TargetVideoCodecTag - { - get - { - var stream = VideoStream; - return !Request.Static - ? null - : stream == null ? null : stream.CodecTag; - } - } - - public bool? IsTargetAVC - { - get - { - if (Request.Static) - { - return VideoStream == null ? null : VideoStream.IsAVC; - } - - return true; - } - } - public TranscodingJob TranscodingJob; public override void ReportTranscodingProgress(TimeSpan? transcodingPosition, float? framerate, double? percentComplete, long? bytesTranscoded, int? bitRate) { diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingJobInfo.cs b/MediaBrowser.Controller/MediaEncoding/EncodingJobInfo.cs index 9b89e8f5a..57c81ddf7 100644 --- a/MediaBrowser.Controller/MediaEncoding/EncodingJobInfo.cs +++ b/MediaBrowser.Controller/MediaEncoding/EncodingJobInfo.cs @@ -8,6 +8,7 @@ using MediaBrowser.Model.Entities; using MediaBrowser.Model.IO; using MediaBrowser.Model.Logging; using MediaBrowser.Model.MediaInfo; +using MediaBrowser.Model.Drawing; namespace MediaBrowser.Controller.MediaEncoding { @@ -134,7 +135,6 @@ namespace MediaBrowser.Controller.MediaEncoding public int? OutputAudioBitrate; public int? OutputAudioChannels; - public int? OutputAudioSampleRate; public bool DeInterlace { get; set; } public bool IsVideoRequest { get; set; } public TranscodingJobType TranscodingType { get; set; } @@ -173,6 +173,97 @@ namespace MediaBrowser.Controller.MediaEncoding return false; } + public int? TotalOutputBitrate + { + get + { + return (OutputAudioBitrate ?? 0) + (OutputVideoBitrate ?? 0); + } + } + + public int? OutputWidth + { + get + { + if (VideoStream != null && VideoStream.Width.HasValue && VideoStream.Height.HasValue) + { + var size = new ImageSize + { + Width = VideoStream.Width.Value, + Height = VideoStream.Height.Value + }; + + var newSize = DrawingUtils.Resize(size, + BaseRequest.Width, + BaseRequest.Height, + BaseRequest.MaxWidth, + BaseRequest.MaxHeight); + + return Convert.ToInt32(newSize.Width); + } + + if (!IsVideoRequest) + { + return null; + } + + return BaseRequest.MaxWidth ?? BaseRequest.Width; + } + } + + public int? OutputHeight + { + get + { + if (VideoStream != null && VideoStream.Width.HasValue && VideoStream.Height.HasValue) + { + var size = new ImageSize + { + Width = VideoStream.Width.Value, + Height = VideoStream.Height.Value + }; + + var newSize = DrawingUtils.Resize(size, + BaseRequest.Width, + BaseRequest.Height, + BaseRequest.MaxWidth, + BaseRequest.MaxHeight); + + return Convert.ToInt32(newSize.Height); + } + + if (!IsVideoRequest) + { + return null; + } + + return BaseRequest.MaxHeight ?? BaseRequest.Height; + } + } + + public int? OutputAudioSampleRate + { + get + { + if (BaseRequest.Static || string.Equals(OutputAudioCodec, "copy", StringComparison.OrdinalIgnoreCase)) + { + if (AudioStream != null) + { + return AudioStream.SampleRate; + } + } + + else if (BaseRequest.AudioSampleRate.HasValue) + { + // Don't exceed what the encoder supports + // Seeing issues of attempting to encode to 88200 + return Math.Min(44100, BaseRequest.AudioSampleRate.Value); + } + + return null; + } + } + /// /// Predicts the audio sample rate that will be in the output stream /// @@ -189,6 +280,180 @@ namespace MediaBrowser.Controller.MediaEncoding } } + /// + /// Predicts the audio sample rate that will be in the output stream + /// + public int? TargetVideoBitDepth + { + get + { + var stream = VideoStream; + return stream == null || !BaseRequest.Static ? null : stream.BitDepth; + } + } + + /// + /// Gets the target reference frames. + /// + /// The target reference frames. + public int? TargetRefFrames + { + get + { + var stream = VideoStream; + return stream == null || !BaseRequest.Static ? null : stream.RefFrames; + } + } + + /// + /// Predicts the audio sample rate that will be in the output stream + /// + public float? TargetFramerate + { + get + { + var stream = VideoStream; + var requestedFramerate = BaseRequest.MaxFramerate ?? BaseRequest.Framerate; + + return requestedFramerate.HasValue && !BaseRequest.Static + ? requestedFramerate + : stream == null ? null : stream.AverageFrameRate ?? stream.RealFrameRate; + } + } + + public TransportStreamTimestamp TargetTimestamp + { + get + { + var defaultValue = string.Equals(OutputContainer, "m2ts", StringComparison.OrdinalIgnoreCase) ? + TransportStreamTimestamp.Valid : + TransportStreamTimestamp.None; + + return !BaseRequest.Static + ? defaultValue + : InputTimestamp; + } + } + + /// + /// Predicts the audio sample rate that will be in the output stream + /// + public int? TargetPacketLength + { + get + { + var stream = VideoStream; + return !BaseRequest.Static + ? null + : stream == null ? null : stream.PacketLength; + } + } + + /// + /// Predicts the audio sample rate that will be in the output stream + /// + public string TargetVideoProfile + { + get + { + var stream = VideoStream; + return !string.IsNullOrEmpty(BaseRequest.Profile) && !BaseRequest.Static + ? BaseRequest.Profile + : stream == null ? null : stream.Profile; + } + } + + public string TargetVideoCodecTag + { + get + { + var stream = VideoStream; + return !BaseRequest.Static + ? null + : stream == null ? null : stream.CodecTag; + } + } + + public bool? IsTargetAnamorphic + { + get + { + if (BaseRequest.Static) + { + return VideoStream == null ? null : VideoStream.IsAnamorphic; + } + + return false; + } + } + + public bool? IsTargetInterlaced + { + get + { + if (BaseRequest.Static) + { + return VideoStream == null ? (bool?)null : VideoStream.IsInterlaced; + } + + if (DeInterlace) + { + return false; + } + + return VideoStream == null ? (bool?)null : VideoStream.IsInterlaced; + } + } + + public bool? IsTargetAVC + { + get + { + if (BaseRequest.Static) + { + return VideoStream == null ? null : VideoStream.IsAVC; + } + + return false; + } + } + + public int? TargetVideoStreamCount + { + get + { + if (BaseRequest.Static) + { + return GetMediaStreamCount(MediaStreamType.Video, int.MaxValue); + } + return GetMediaStreamCount(MediaStreamType.Video, 1); + } + } + + public int? TargetAudioStreamCount + { + get + { + if (BaseRequest.Static) + { + return GetMediaStreamCount(MediaStreamType.Audio, int.MaxValue); + } + return GetMediaStreamCount(MediaStreamType.Audio, 1); + } + } + + private int? GetMediaStreamCount(MediaStreamType type, int limit) + { + var count = MediaSource.GetStreamCount(type); + + if (count.HasValue) + { + count = Math.Min(count.Value, limit); + } + + return count; + } + protected void DisposeIsoMount() { if (IsoMount != null) diff --git a/MediaBrowser.MediaEncoding/Encoder/EncodingJob.cs b/MediaBrowser.MediaEncoding/Encoder/EncodingJob.cs index 97623c44b..d53701feb 100644 --- a/MediaBrowser.MediaEncoding/Encoder/EncodingJob.cs +++ b/MediaBrowser.MediaEncoding/Encoder/EncodingJob.cs @@ -150,248 +150,6 @@ namespace MediaBrowser.MediaEncoding.Encoder } } - public int? TotalOutputBitrate - { - get - { - return (OutputAudioBitrate ?? 0) + (OutputVideoBitrate ?? 0); - } - } - - public int? OutputWidth - { - get - { - if (VideoStream != null && VideoStream.Width.HasValue && VideoStream.Height.HasValue) - { - var size = new ImageSize - { - Width = VideoStream.Width.Value, - Height = VideoStream.Height.Value - }; - - var newSize = DrawingUtils.Resize(size, - Options.Width, - Options.Height, - Options.MaxWidth, - Options.MaxHeight); - - return Convert.ToInt32(newSize.Width); - } - - if (!IsVideoRequest) - { - return null; - } - - return Options.MaxWidth ?? Options.Width; - } - } - - public int? OutputHeight - { - get - { - if (VideoStream != null && VideoStream.Width.HasValue && VideoStream.Height.HasValue) - { - var size = new ImageSize - { - Width = VideoStream.Width.Value, - Height = VideoStream.Height.Value - }; - - var newSize = DrawingUtils.Resize(size, - Options.Width, - Options.Height, - Options.MaxWidth, - Options.MaxHeight); - - return Convert.ToInt32(newSize.Height); - } - - if (!IsVideoRequest) - { - return null; - } - - return Options.MaxHeight ?? Options.Height; - } - } - - /// - /// Predicts the audio sample rate that will be in the output stream - /// - public int? TargetVideoBitDepth - { - get - { - var stream = VideoStream; - return stream == null || !Options.Static ? null : stream.BitDepth; - } - } - - /// - /// Gets the target reference frames. - /// - /// The target reference frames. - public int? TargetRefFrames - { - get - { - var stream = VideoStream; - return stream == null || !Options.Static ? null : stream.RefFrames; - } - } - - /// - /// Predicts the audio sample rate that will be in the output stream - /// - public float? TargetFramerate - { - get - { - var stream = VideoStream; - var requestedFramerate = Options.MaxFramerate ?? Options.Framerate; - - return requestedFramerate.HasValue && !Options.Static - ? requestedFramerate - : stream == null ? null : stream.AverageFrameRate ?? stream.RealFrameRate; - } - } - - public TransportStreamTimestamp TargetTimestamp - { - get - { - var defaultValue = string.Equals(OutputContainer, "m2ts", StringComparison.OrdinalIgnoreCase) ? - TransportStreamTimestamp.Valid : - TransportStreamTimestamp.None; - - return !Options.Static - ? defaultValue - : InputTimestamp; - } - } - - /// - /// Predicts the audio sample rate that will be in the output stream - /// - public int? TargetPacketLength - { - get - { - var stream = VideoStream; - return !Options.Static - ? null - : stream == null ? null : stream.PacketLength; - } - } - - /// - /// Predicts the audio sample rate that will be in the output stream - /// - public string TargetVideoProfile - { - get - { - var stream = VideoStream; - return !string.IsNullOrEmpty(Options.Profile) && !Options.Static - ? Options.Profile - : stream == null ? null : stream.Profile; - } - } - - public string TargetVideoCodecTag - { - get - { - var stream = VideoStream; - return !Options.Static - ? null - : stream == null ? null : stream.CodecTag; - } - } - - public bool? IsTargetAnamorphic - { - get - { - if (Options.Static) - { - return VideoStream == null ? null : VideoStream.IsAnamorphic; - } - - return false; - } - } - - public bool? IsTargetInterlaced - { - get - { - if (Options.Static) - { - return VideoStream == null ? (bool?)null : VideoStream.IsInterlaced; - } - - if (DeInterlace) - { - return false; - } - - return VideoStream == null ? (bool?)null : VideoStream.IsInterlaced; - } - } - - public bool? IsTargetAVC - { - get - { - if (Options.Static) - { - return VideoStream == null ? null : VideoStream.IsAVC; - } - - return false; - } - } - - public int? TargetVideoStreamCount - { - get - { - if (Options.Static) - { - return GetMediaStreamCount(MediaStreamType.Video, int.MaxValue); - } - return GetMediaStreamCount(MediaStreamType.Video, 1); - } - } - - public int? TargetAudioStreamCount - { - get - { - if (Options.Static) - { - return GetMediaStreamCount(MediaStreamType.Audio, int.MaxValue); - } - return GetMediaStreamCount(MediaStreamType.Audio, 1); - } - } - - private int? GetMediaStreamCount(MediaStreamType type, int limit) - { - var count = MediaSource.GetStreamCount(type); - - if (count.HasValue) - { - count = Math.Min(count.Value, limit); - } - - return count; - } - public override void ReportTranscodingProgress(TimeSpan? transcodingPosition, float? framerate, double? percentComplete, long? bytesTranscoded, int? bitRate) { var ticks = transcodingPosition.HasValue ? transcodingPosition.Value.Ticks : (long?)null; diff --git a/MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs b/MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs index c74a8ce37..ba5f625f5 100644 --- a/MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs +++ b/MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs @@ -105,7 +105,6 @@ namespace MediaBrowser.MediaEncoding.Encoder //state.OutputContainer = (container ?? string.Empty).TrimStart('.'); state.OutputAudioBitrate = encodingHelper.GetAudioBitrateParam(state.Options, state.AudioStream); - state.OutputAudioSampleRate = request.AudioSampleRate; state.OutputAudioCodec = state.Options.AudioCodec; diff --git a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs index 280b01ee2..faf5b0667 100644 --- a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs +++ b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs @@ -80,11 +80,6 @@ namespace MediaBrowser.MediaEncoding.Encoder int defaultImageExtractionTimeoutMs, bool enableEncoderFontFile, IEnvironmentInfo environmentInfo) { - if (jsonSerializer == null) - { - throw new ArgumentNullException("jsonSerializer"); - } - _logger = logger; _jsonSerializer = jsonSerializer; ConfigurationManager = configurationManager; @@ -330,7 +325,7 @@ namespace MediaBrowser.MediaEncoding.Encoder } var newPaths = GetEncoderPaths(appPath); - if (string.IsNullOrWhiteSpace(newPaths.Item1) || string.IsNullOrWhiteSpace(newPaths.Item2)) + if (string.IsNullOrWhiteSpace(newPaths.Item1) || string.IsNullOrWhiteSpace(newPaths.Item2) || IsSystemInstalledPath(appPath)) { newPaths = TestForInstalledVersions(); }