aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/MediaEncoding/EncodingJobInfo.cs
diff options
context:
space:
mode:
authorstefan <stefan@hegedues.at>2018-09-12 19:26:21 +0200
committerstefan <stefan@hegedues.at>2018-09-12 19:26:21 +0200
commit48facb797ed912e4ea6b04b17d1ff190ac2daac4 (patch)
tree8dae77a31670a888d733484cb17dd4077d5444e8 /MediaBrowser.Controller/MediaEncoding/EncodingJobInfo.cs
parentc32d8656382a0eacb301692e0084377fc433ae9b (diff)
Update to 3.5.2 and .net core 2.1
Diffstat (limited to 'MediaBrowser.Controller/MediaEncoding/EncodingJobInfo.cs')
-rw-r--r--MediaBrowser.Controller/MediaEncoding/EncodingJobInfo.cs669
1 files changed, 0 insertions, 669 deletions
diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingJobInfo.cs b/MediaBrowser.Controller/MediaEncoding/EncodingJobInfo.cs
deleted file mode 100644
index ad131064c..000000000
--- a/MediaBrowser.Controller/MediaEncoding/EncodingJobInfo.cs
+++ /dev/null
@@ -1,669 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Globalization;
-using System.Linq;
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Model.Dlna;
-using MediaBrowser.Model.Dto;
-using MediaBrowser.Model.Entities;
-using MediaBrowser.Model.IO;
-using MediaBrowser.Model.Logging;
-using MediaBrowser.Model.MediaInfo;
-using MediaBrowser.Model.Drawing;
-using MediaBrowser.Model.Session;
-
-namespace MediaBrowser.Controller.MediaEncoding
-{
- // For now, a common base class until the API and MediaEncoding classes are unified
- public abstract class EncodingJobInfo
- {
- private readonly ILogger _logger;
-
- public MediaStream VideoStream { get; set; }
- public VideoType VideoType { get; set; }
- public Dictionary<string, string> RemoteHttpHeaders { get; set; }
- public string OutputVideoCodec { get; set; }
- public MediaProtocol InputProtocol { get; set; }
- public string MediaPath { get; set; }
- public bool IsInputVideo { get; set; }
- public IIsoMount IsoMount { get; set; }
- public string[] PlayableStreamFileNames { get; set; }
- public string OutputAudioCodec { get; set; }
- public int? OutputVideoBitrate { get; set; }
- public MediaStream SubtitleStream { get; set; }
- public SubtitleDeliveryMethod SubtitleDeliveryMethod { get; set; }
- public List<string> SupportedSubtitleCodecs { get; set; }
-
- public int InternalSubtitleStreamOffset { get; set; }
- public MediaSourceInfo MediaSource { get; set; }
- public User User { get; set; }
-
- public long? RunTimeTicks { get; set; }
-
- public bool ReadInputAtNativeFramerate { get; set; }
-
- private TranscodeReason[] _transcodeReasons = null;
- public TranscodeReason[] TranscodeReasons
- {
- get
- {
- if (_transcodeReasons == null)
- {
- _transcodeReasons = (BaseRequest.TranscodeReasons ?? string.Empty)
- .Split(',')
- .Where(i => !string.IsNullOrWhiteSpace(i))
- .Select(v => (TranscodeReason)Enum.Parse(typeof(TranscodeReason), v, true))
- .ToArray();
- }
-
- return _transcodeReasons;
- }
- }
-
- public bool IgnoreInputDts
- {
- get
- {
- return MediaSource.IgnoreDts;
- }
- }
-
- public bool IgnoreInputIndex
- {
- get
- {
- return MediaSource.IgnoreIndex;
- }
- }
-
- public bool GenPtsInput
- {
- get
- {
- return MediaSource.GenPtsInput;
- }
- }
-
- public bool DiscardCorruptFramesInput
- {
- get
- {
- return false;
- }
- }
-
- public bool EnableFastSeekInput
- {
- get
- {
- return false;
- }
- }
-
- public bool GenPtsOutput
- {
- get
- {
- return false;
- }
- }
-
- public string OutputContainer { get; set; }
-
- public string OutputVideoSync
- {
- get
- {
- // For live tv + in progress recordings
- if (string.Equals(InputContainer, "mpegts", StringComparison.OrdinalIgnoreCase) || string.Equals(InputContainer, "ts", StringComparison.OrdinalIgnoreCase))
- {
- if (!MediaSource.RunTimeTicks.HasValue)
- {
- return "cfr";
- }
- }
-
- return "-1";
- }
- }
-
- public string AlbumCoverPath { get; set; }
-
- public string InputAudioSync { get; set; }
- public string InputVideoSync { get; set; }
- public TransportStreamTimestamp InputTimestamp { get; set; }
-
- public MediaStream AudioStream { get; set; }
- public List<string> SupportedAudioCodecs { get; set; }
- public List<string> SupportedVideoCodecs { get; set; }
- public string InputContainer { get; set; }
- public IsoType? IsoType { get; set; }
-
- public bool EnableMpegtsM2TsMode { get; set; }
-
- public BaseEncodingJobOptions BaseRequest { get; set; }
-
- public long? StartTimeTicks
- {
- get { return BaseRequest.StartTimeTicks; }
- }
-
- public bool CopyTimestamps
- {
- get { return BaseRequest.CopyTimestamps; }
- }
-
- public int? OutputAudioBitrate;
- public int? OutputAudioChannels;
-
- public bool DeInterlace(string videoCodec, bool forceDeinterlaceIfSourceIsInterlaced)
- {
- var videoStream = VideoStream;
- var isInputInterlaced = videoStream != null && videoStream.IsInterlaced;
-
- if (!isInputInterlaced)
- {
- return false;
- }
-
- // Support general param
- if (BaseRequest.DeInterlace)
- {
- return true;
- }
-
- if (!string.IsNullOrWhiteSpace(videoCodec))
- {
- if (string.Equals(BaseRequest.GetOption(videoCodec, "deinterlace"), "true", StringComparison.OrdinalIgnoreCase))
- {
- return true;
- }
- }
-
- if (forceDeinterlaceIfSourceIsInterlaced)
- {
- if (isInputInterlaced)
- {
- return true;
- }
- }
-
- return false;
- }
-
- public string[] GetRequestedProfiles(string codec)
- {
- if (!string.IsNullOrWhiteSpace(BaseRequest.Profile))
- {
- return BaseRequest.Profile.Split(new[] { '|', ',' }, StringSplitOptions.RemoveEmptyEntries);
- }
-
- if (!string.IsNullOrWhiteSpace(codec))
- {
- var profile = BaseRequest.GetOption(codec, "profile");
-
- if (!string.IsNullOrWhiteSpace(profile))
- {
- return profile.Split(new[] { '|', ',' }, StringSplitOptions.RemoveEmptyEntries);
- }
- }
-
- return new string[] { };
- }
-
- public string GetRequestedLevel(string codec)
- {
- if (!string.IsNullOrWhiteSpace(BaseRequest.Level))
- {
- return BaseRequest.Level;
- }
-
- if (!string.IsNullOrWhiteSpace(codec))
- {
- return BaseRequest.GetOption(codec, "level");
- }
-
- return null;
- }
-
- public int? GetRequestedMaxRefFrames(string codec)
- {
- if (!string.IsNullOrWhiteSpace(BaseRequest.Level))
- {
- return BaseRequest.MaxRefFrames;
- }
-
- if (!string.IsNullOrWhiteSpace(codec))
- {
- var value = BaseRequest.GetOption(codec, "maxrefframes");
- int result;
- if (!string.IsNullOrWhiteSpace(value) && int.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out result))
- {
- return result;
- }
- }
-
- return null;
- }
-
- public bool IsVideoRequest { get; set; }
- public TranscodingJobType TranscodingType { get; set; }
-
- public EncodingJobInfo(ILogger logger, TranscodingJobType jobType)
- {
- _logger = logger;
- TranscodingType = jobType;
- RemoteHttpHeaders = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
- PlayableStreamFileNames = new string[] { };
- SupportedAudioCodecs = new List<string>();
- SupportedVideoCodecs = new List<string>();
- SupportedSubtitleCodecs = new List<string>();
- }
-
- public bool IsSegmentedLiveStream
- {
- get
- {
- return TranscodingType != TranscodingJobType.Progressive && !RunTimeTicks.HasValue;
- }
- }
-
- public bool EnableBreakOnNonKeyFrames(string videoCodec)
- {
- if (TranscodingType != TranscodingJobType.Progressive)
- {
- if (IsSegmentedLiveStream)
- {
- return false;
- }
-
- return BaseRequest.BreakOnNonKeyFrames && string.Equals(videoCodec, "copy", StringComparison.OrdinalIgnoreCase);
- }
-
- 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;
- }
- }
-
- public int? OutputAudioBitDepth
- {
- get
- {
- if (BaseRequest.Static || string.Equals(OutputAudioCodec, "copy", StringComparison.OrdinalIgnoreCase))
- {
- if (AudioStream != null)
- {
- return AudioStream.BitDepth;
- }
- }
-
- //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;
- }
- }
-
- /// <summary>
- /// Predicts the audio sample rate that will be in the output stream
- /// </summary>
- public double? TargetVideoLevel
- {
- get
- {
- if (BaseRequest.Static)
- {
- return VideoStream == null ? null : VideoStream.Level;
- }
-
- var level = GetRequestedLevel(ActualOutputVideoCodec);
- double result;
- if (!string.IsNullOrWhiteSpace(level) && double.TryParse(level, NumberStyles.Any, CultureInfo.InvariantCulture, out result))
- {
- return result;
- }
-
- return null;
- }
- }
-
- /// <summary>
- /// Predicts the audio sample rate that will be in the output stream
- /// </summary>
- public int? TargetVideoBitDepth
- {
- get
- {
- var stream = VideoStream;
- return stream == null || !BaseRequest.Static ? null : stream.BitDepth;
- }
- }
-
- /// <summary>
- /// Gets the target reference frames.
- /// </summary>
- /// <value>The target reference frames.</value>
- public int? TargetRefFrames
- {
- get
- {
- if (BaseRequest.Static)
- {
- return VideoStream == null ? null : VideoStream.RefFrames;
- }
-
- return null;
- }
- }
-
- /// <summary>
- /// Predicts the audio sample rate that will be in the output stream
- /// </summary>
- 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;
- }
- }
-
- /// <summary>
- /// Predicts the audio sample rate that will be in the output stream
- /// </summary>
- public int? TargetPacketLength
- {
- get
- {
- var stream = VideoStream;
- return !BaseRequest.Static
- ? null
- : stream == null ? null : stream.PacketLength;
- }
- }
-
- /// <summary>
- /// Predicts the audio sample rate that will be in the output stream
- /// </summary>
- public string TargetVideoProfile
- {
- get
- {
- if (BaseRequest.Static)
- {
- return VideoStream == null ? null : VideoStream.Profile;
- }
-
- var requestedProfile = GetRequestedProfiles(ActualOutputVideoCodec).FirstOrDefault();
- if (!string.IsNullOrWhiteSpace(requestedProfile))
- {
- return requestedProfile;
- }
-
- return null;
- }
- }
-
- 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 string ActualOutputVideoCodec
- {
- get
- {
- var codec = OutputVideoCodec;
-
- if (string.Equals(codec, "copy", StringComparison.OrdinalIgnoreCase))
- {
- var stream = VideoStream;
-
- if (stream != null)
- {
- return stream.Codec;
- }
-
- return null;
- }
-
- return codec;
- }
- }
-
- public bool? IsTargetInterlaced
- {
- get
- {
- if (BaseRequest.Static)
- {
- return VideoStream == null ? (bool?)null : VideoStream.IsInterlaced;
- }
-
- if (DeInterlace(ActualOutputVideoCodec, true))
- {
- 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)
- {
- try
- {
- IsoMount.Dispose();
- }
- catch (Exception ex)
- {
- _logger.ErrorException("Error disposing iso mount", ex);
- }
-
- IsoMount = null;
- }
- }
-
- public abstract void ReportTranscodingProgress(TimeSpan? transcodingPosition, float? framerate, double? percentComplete, long? bytesTranscoded, int? bitRate);
- }
-
- /// <summary>
- /// Enum TranscodingJobType
- /// </summary>
- public enum TranscodingJobType
- {
- /// <summary>
- /// The progressive
- /// </summary>
- Progressive,
- /// <summary>
- /// The HLS
- /// </summary>
- Hls,
- /// <summary>
- /// The dash
- /// </summary>
- Dash
- }
-}