From e0161d62db3b5f6b29100015e39b63f26074c6f9 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 17 Sep 2017 01:24:39 -0400 Subject: update hw filters --- .../MediaEncoding/EncodingHelper.cs | 51 +++++++++++++++++++--- 1 file changed, 44 insertions(+), 7 deletions(-) (limited to 'MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs') diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs index 1060dc8de..6b7b40853 100644 --- a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs +++ b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs @@ -1400,13 +1400,22 @@ namespace MediaBrowser.Controller.MediaEncoding } else { + var isExynosV4L2 = string.Equals(outputVideoCodec, "h264_v4l2m2m", StringComparison.OrdinalIgnoreCase); + // If fixed dimensions were supplied if (request.Width.HasValue && request.Height.HasValue) { var widthParam = request.Width.Value.ToString(_usCulture); var heightParam = request.Height.Value.ToString(_usCulture); - filters.Add(string.Format("scale=trunc({0}/2)*2:trunc({1}/2)*2", widthParam, heightParam)); + if (isExynosV4L2) + { + filters.Add(string.Format("scale=trunc({0}/64)*64:trunc({1}/2)*2", widthParam, heightParam)); + } + else + { + filters.Add(string.Format("scale=trunc({0}/2)*2:trunc({1}/2)*2", widthParam, heightParam)); + } } // If Max dimensions were supplied, for width selects lowest even number between input width and width req size and selects lowest even number from in width*display aspect and requested size @@ -1415,7 +1424,14 @@ namespace MediaBrowser.Controller.MediaEncoding var maxWidthParam = request.MaxWidth.Value.ToString(_usCulture); var maxHeightParam = request.MaxHeight.Value.ToString(_usCulture); - filters.Add(string.Format("scale=trunc(min(max(iw\\,ih*dar)\\,min({0}\\,{1}*dar))/2)*2:trunc(min(max(iw/dar\\,ih)\\,min({0}/dar\\,{1}))/2)*2", maxWidthParam, maxHeightParam)); + if (isExynosV4L2) + { + filters.Add(string.Format("scale=trunc(min(max(iw\\,ih*dar)\\,min({0}\\,{1}*dar))/64)*64:trunc(min(max(iw/dar\\,ih)\\,min({0}/dar\\,{1}))/2)*2", maxWidthParam, maxHeightParam)); + } + else + { + filters.Add(string.Format("scale=trunc(min(max(iw\\,ih*dar)\\,min({0}\\,{1}*dar))/2)*2:trunc(min(max(iw/dar\\,ih)\\,min({0}/dar\\,{1}))/2)*2", maxWidthParam, maxHeightParam)); + } } // If a fixed width was requested @@ -1431,7 +1447,14 @@ namespace MediaBrowser.Controller.MediaEncoding { var heightParam = request.Height.Value.ToString(_usCulture); - filters.Add(string.Format("scale=trunc(oh*a/2)*2:{0}", heightParam)); + if (isExynosV4L2) + { + filters.Add(string.Format("scale=trunc(oh*a/64)*64:{0}", heightParam)); + } + else + { + filters.Add(string.Format("scale=trunc(oh*a/2)*2:{0}", heightParam)); + } } // If a max width was requested @@ -1439,7 +1462,14 @@ namespace MediaBrowser.Controller.MediaEncoding { var maxWidthParam = request.MaxWidth.Value.ToString(_usCulture); - filters.Add(string.Format("scale=trunc(min(max(iw\\,ih*dar)\\,{0})/2)*2:trunc(ow/dar/2)*2", maxWidthParam)); + if (isExynosV4L2) + { + filters.Add(string.Format("scale=trunc(min(max(iw\\,ih*dar)\\,{0})/64)*64:trunc(ow/dar/2)*2", maxWidthParam)); + } + else + { + filters.Add(string.Format("scale=trunc(min(max(iw\\,ih*dar)\\,{0})/2)*2:trunc(ow/dar/2)*2", maxWidthParam)); + } } // If a max height was requested @@ -1447,7 +1477,14 @@ namespace MediaBrowser.Controller.MediaEncoding { var maxHeightParam = request.MaxHeight.Value.ToString(_usCulture); - filters.Add(string.Format("scale=trunc(oh*a/2)*2:min(max(iw/dar\\,ih)\\,{0})", maxHeightParam)); + if (isExynosV4L2) + { + filters.Add(string.Format("scale=trunc(oh*a/64)*64:min(max(iw/dar\\,ih)\\,{0})", maxHeightParam)); + } + else + { + filters.Add(string.Format("scale=trunc(oh*a/2)*2:min(max(iw/dar\\,ih)\\,{0})", maxHeightParam)); + } } } @@ -1903,9 +1940,9 @@ namespace MediaBrowser.Controller.MediaEncoding { case "avc": case "h264": - if (_mediaEncoder.SupportsDecoder("h264_omx") && encodingOptions.HardwareDecodingCodecs.Contains("h264", StringComparer.OrdinalIgnoreCase)) + if (_mediaEncoder.SupportsDecoder("h264_mmal") && encodingOptions.HardwareDecodingCodecs.Contains("h264", StringComparer.OrdinalIgnoreCase)) { - return "-c:v h264_omx "; + return "-c:v h264_mmal"; } break; } -- cgit v1.2.3 From 1f12ab66580a8cda5a4a5e1f44f469baeed07f16 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 17 Sep 2017 02:42:23 -0400 Subject: add yadif setting --- .../LiveTv/EmbyTV/EncodedRecorder.cs | 11 ++++++++-- .../MediaEncoding/EncodingHelper.cs | 25 +++++++++++----------- .../Configuration/EncodingOptions.cs | 1 + 3 files changed, 23 insertions(+), 14 deletions(-) (limited to 'MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs') diff --git a/Emby.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs b/Emby.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs index 48eba4117..149f69e5b 100644 --- a/Emby.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs +++ b/Emby.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs @@ -284,8 +284,15 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV protected string GetOutputSizeParam() { var filters = new List(); - - filters.Add("yadif=0:-1:0"); + + if (string.Equals(GetEncodingOptions().DeinterlaceMethod, "bobandweave", StringComparison.OrdinalIgnoreCase)) + { + filters.Add("yadif=1:-1:0"); + } + else + { + filters.Add("yadif=0:-1:0"); + } var output = string.Empty; diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs index 6b7b40853..a10a0bec8 100644 --- a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs +++ b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs @@ -1288,10 +1288,7 @@ namespace MediaBrowser.Controller.MediaEncoding /// /// Gets the internal graphical subtitle param. /// - /// The state. - /// The output video codec. - /// System.String. - public string GetGraphicalSubtitleParam(EncodingJobInfo state, string outputVideoCodec) + public string GetGraphicalSubtitleParam(EncodingJobInfo state, EncodingOptions options, string outputVideoCodec) { var outputSizeParam = string.Empty; @@ -1300,7 +1297,7 @@ namespace MediaBrowser.Controller.MediaEncoding // Add resolution params, if specified if (request.Width.HasValue || request.Height.HasValue || request.MaxHeight.HasValue || request.MaxWidth.HasValue) { - outputSizeParam = GetOutputSizeParam(state, outputVideoCodec).TrimEnd('"'); + outputSizeParam = GetOutputSizeParam(state, options, outputVideoCodec).TrimEnd('"'); if (string.Equals(outputVideoCodec, "h264_vaapi", StringComparison.OrdinalIgnoreCase)) { @@ -1343,11 +1340,8 @@ namespace MediaBrowser.Controller.MediaEncoding /// /// If we're going to put a fixed size on the command line, this will calculate it /// - /// The state. - /// The output video codec. - /// if set to true [allow time stamp copy]. - /// System.String. public string GetOutputSizeParam(EncodingJobInfo state, + EncodingOptions options, string outputVideoCodec, bool allowTimeStampCopy = true) { @@ -1365,7 +1359,14 @@ namespace MediaBrowser.Controller.MediaEncoding if (state.DeInterlace && !string.Equals(outputVideoCodec, "h264_vaapi", StringComparison.OrdinalIgnoreCase)) { - filters.Add("yadif=0:-1:0"); + if (string.Equals(options.DeinterlaceMethod, "bobandweave", StringComparison.OrdinalIgnoreCase)) + { + filters.Add("yadif=1:-1:0"); + } + else + { + filters.Add("yadif=0:-1:0"); + } } if (string.Equals(outputVideoCodec, "h264_vaapi", StringComparison.OrdinalIgnoreCase)) @@ -2092,7 +2093,7 @@ namespace MediaBrowser.Controller.MediaEncoding // Add resolution params, if specified if (!hasGraphicalSubs) { - var outputSizeParam = GetOutputSizeParam(state, videoCodec); + var outputSizeParam = GetOutputSizeParam(state, encodingOptions, videoCodec); args += outputSizeParam; hasCopyTs = outputSizeParam.IndexOf("copyts", StringComparison.OrdinalIgnoreCase) != -1; } @@ -2116,7 +2117,7 @@ namespace MediaBrowser.Controller.MediaEncoding // This is for internal graphical subs if (hasGraphicalSubs) { - args += GetGraphicalSubtitleParam(state, videoCodec); + args += GetGraphicalSubtitleParam(state, encodingOptions, videoCodec); } if (!state.RunTimeTicks.HasValue) diff --git a/MediaBrowser.Model/Configuration/EncodingOptions.cs b/MediaBrowser.Model/Configuration/EncodingOptions.cs index b093d82e3..a143bb9e3 100644 --- a/MediaBrowser.Model/Configuration/EncodingOptions.cs +++ b/MediaBrowser.Model/Configuration/EncodingOptions.cs @@ -13,6 +13,7 @@ namespace MediaBrowser.Model.Configuration public string VaapiDevice { get; set; } public int H264Crf { get; set; } public string H264Preset { get; set; } + public string DeinterlaceMethod { get; set; } public bool EnableHardwareEncoding { get; set; } public bool EnableSubtitleExtraction { get; set; } -- cgit v1.2.3