diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2017-05-11 10:54:41 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2017-05-11 10:54:41 -0400 |
| commit | 92eeee0fc574b4d16fbe3dc9d11e023e0f6c56c5 (patch) | |
| tree | b824ac1fe5934309691796e7c446ac417ea41f85 | |
| parent | bdf27b81c15810c09e6db688e8d9ac446790caad (diff) | |
support additional encoding switches
4 files changed, 82 insertions, 15 deletions
diff --git a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs index 0fe1e533d4..d64c009a07 100644 --- a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs @@ -879,7 +879,7 @@ namespace MediaBrowser.Api.Playback.Hls // Add resolution params, if specified if (!hasGraphicalSubs) { - args += EncodingHelper.GetOutputSizeParam(state, codec, EnableCopyTs(state)); + args += EncodingHelper.GetOutputSizeParam(state, codec, true); } // This is for internal graphical subs @@ -891,7 +891,7 @@ namespace MediaBrowser.Api.Playback.Hls //args += " -flags -global_header"; } - if (EnableCopyTs(state) && args.IndexOf("-copyts", StringComparison.OrdinalIgnoreCase) == -1) + if (args.IndexOf("-copyts", StringComparison.OrdinalIgnoreCase) == -1) { args += " -copyts"; } @@ -901,13 +901,9 @@ namespace MediaBrowser.Api.Playback.Hls args += " -vsync " + state.OutputVideoSync; } - return args; - } + args += EncodingHelper.GetOutputFFlags(state); - private bool EnableCopyTs(StreamState state) - { - //return state.SubtitleStream != null && state.SubtitleStream.IsTextSubtitleStream && state.VideoRequest.SubtitleMethod == SubtitleDeliveryMethod.Encode; - return true; + return args; } protected override string GetCommandLineArguments(string outputPath, StreamState state, bool isEncoding) diff --git a/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs b/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs index 22c6202e4f..e32970be53 100644 --- a/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs @@ -124,6 +124,8 @@ namespace MediaBrowser.Api.Playback.Hls args += " -vsync " + state.OutputVideoSync; } + args += EncodingHelper.GetOutputFFlags(state); + return args; } diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs index ca0b97a9f6..11311905c2 100644 --- a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs +++ b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs @@ -1306,7 +1306,8 @@ namespace MediaBrowser.Controller.MediaEncoding filters.Add("format=nv12|vaapi"); filters.Add("hwupload"); } - else if (state.DeInterlace && !string.Equals(outputVideoCodec, "h264_vaapi", StringComparison.OrdinalIgnoreCase)) + + if (state.DeInterlace && !string.Equals(outputVideoCodec, "h264_vaapi", StringComparison.OrdinalIgnoreCase)) { filters.Add("yadif=0:-1:0"); } @@ -1533,14 +1534,26 @@ namespace MediaBrowser.Controller.MediaEncoding } var flags = new List<string>(); - if (state.IgnoreDts) + if (state.IgnoreInputDts) { flags.Add("+igndts"); } - if (state.IgnoreIndex) + if (state.IgnoreInputIndex) { flags.Add("+ignidx"); } + if (state.GenPtsInput) + { + flags.Add("+genpts"); + } + if (state.DiscardCorruptFramesInput) + { + flags.Add("+discardcorrupt"); + } + if (state.EnableFastSeekInput) + { + flags.Add("+fastseek"); + } if (flags.Count > 0) { @@ -1864,6 +1877,22 @@ namespace MediaBrowser.Controller.MediaEncoding ).Trim(); } + public string GetOutputFFlags(EncodingJobInfo state) + { + var flags = new List<string>(); + if (state.GenPtsOutput) + { + flags.Add("+genpts"); + } + + if (flags.Count > 0) + { + return " -fflags " + string.Join("", flags.ToArray()); + } + + return string.Empty; + } + public string GetProgressiveVideoArguments(EncodingJobInfo state, EncodingOptions encodingOptions, string videoCodec, string defaultH264Preset) { var args = "-codec:v:0 " + videoCodec; @@ -1943,6 +1972,8 @@ namespace MediaBrowser.Controller.MediaEncoding args += " -vsync " + state.OutputVideoSync; } + args += GetOutputFFlags(state); + return args; } diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingJobInfo.cs b/MediaBrowser.Controller/MediaEncoding/EncodingJobInfo.cs index 28ada9daeb..409dec482c 100644 --- a/MediaBrowser.Controller/MediaEncoding/EncodingJobInfo.cs +++ b/MediaBrowser.Controller/MediaEncoding/EncodingJobInfo.cs @@ -39,14 +39,52 @@ namespace MediaBrowser.Controller.MediaEncoding public bool ReadInputAtNativeFramerate { get; set; } - public bool IgnoreDts + public bool IgnoreInputDts { - get { return MediaSource.IgnoreDts; } + get + { + return MediaSource.IgnoreDts; + } + } + + public bool IgnoreInputIndex + { + get + { + return MediaSource.IgnoreIndex; + } + } + + public bool GenPtsInput + { + get + { + return false; + } } - public bool IgnoreIndex + public bool DiscardCorruptFramesInput { - get { return MediaSource.IgnoreIndex; } + get + { + return false; + } + } + + public bool EnableFastSeekInput + { + get + { + return false; + } + } + + public bool GenPtsOutput + { + get + { + return false; + } } public string OutputContainer { get; set; } |
