mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-12-17 22:43:07 +03:00
Merge remote-tracking branch 'jellyfinorigin/master' into feature/pgsql_provider
This commit is contained in:
@@ -61,7 +61,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
private readonly Version _minFixedKernel60i915Hang = new Version(6, 0, 18);
|
||||
private readonly Version _minKernelVersionAmdVkFmtModifier = new Version(5, 15);
|
||||
|
||||
private readonly Version _minFFmpegImplictHwaccel = new Version(6, 0);
|
||||
private readonly Version _minFFmpegImplicitHwaccel = new Version(6, 0);
|
||||
private readonly Version _minFFmpegHwaUnsafeOutput = new Version(6, 0);
|
||||
private readonly Version _minFFmpegOclCuTonemapMode = new Version(5, 1, 3);
|
||||
private readonly Version _minFFmpegSvtAv1Params = new Version(5, 1);
|
||||
@@ -632,7 +632,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(container))
|
||||
{
|
||||
// this may not work, but if the client is that broken we can not do anything better
|
||||
// this may not work, but if the client is that broken we cannot do anything better
|
||||
return "aac";
|
||||
}
|
||||
|
||||
@@ -2198,7 +2198,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
var videoFrameRate = videoStream.ReferenceFrameRate;
|
||||
|
||||
// Add a little tolerance to the framerate check because some videos might record a framerate
|
||||
// that is slightly higher than the intended framerate, but the device can still play it correctly.
|
||||
// that is slightly greater than the intended framerate, but the device can still play it correctly.
|
||||
// 0.05 fps tolerance should be safe enough.
|
||||
if (!videoFrameRate.HasValue || videoFrameRate.Value > requestedFramerate.Value + 0.05f)
|
||||
{
|
||||
@@ -3609,7 +3609,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
return GetSwVidFilterChain(state, options, vidEncoder);
|
||||
}
|
||||
|
||||
// prefered nvdec/cuvid + cuda filters + nvenc pipeline
|
||||
// preferred nvdec/cuvid + cuda filters + nvenc pipeline
|
||||
return GetNvidiaVidFiltersPrefered(state, options, vidDecoder, vidEncoder);
|
||||
}
|
||||
|
||||
@@ -3650,8 +3650,8 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
var subH = state.SubtitleStream?.Height;
|
||||
|
||||
var rotation = state.VideoStream?.Rotation ?? 0;
|
||||
var tranposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state);
|
||||
var doCuTranspose = !string.IsNullOrEmpty(tranposeDir) && _mediaEncoder.SupportsFilter("transpose_cuda");
|
||||
var transposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state);
|
||||
var doCuTranspose = !string.IsNullOrEmpty(transposeDir) && _mediaEncoder.SupportsFilter("transpose_cuda");
|
||||
var swapWAndH = Math.Abs(rotation) == 90 && (isSwDecoder || (isNvDecoder && doCuTranspose));
|
||||
var swpInW = swapWAndH ? inH : inW;
|
||||
var swpInH = swapWAndH ? inW : inH;
|
||||
@@ -3697,7 +3697,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
// hw transpose
|
||||
if (doCuTranspose)
|
||||
{
|
||||
mainFilters.Add($"transpose_cuda=dir={tranposeDir}");
|
||||
mainFilters.Add($"transpose_cuda=dir={transposeDir}");
|
||||
}
|
||||
|
||||
var isRext = IsVideoStreamHevcRext(state);
|
||||
@@ -3817,7 +3817,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
return GetSwVidFilterChain(state, options, vidEncoder);
|
||||
}
|
||||
|
||||
// prefered d3d11va + opencl filters + amf pipeline
|
||||
// preferred d3d11va + opencl filters + amf pipeline
|
||||
return GetAmdDx11VidFiltersPrefered(state, options, vidDecoder, vidEncoder);
|
||||
}
|
||||
|
||||
@@ -3857,8 +3857,8 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
var subH = state.SubtitleStream?.Height;
|
||||
|
||||
var rotation = state.VideoStream?.Rotation ?? 0;
|
||||
var tranposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state);
|
||||
var doOclTranspose = !string.IsNullOrEmpty(tranposeDir)
|
||||
var transposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state);
|
||||
var doOclTranspose = !string.IsNullOrEmpty(transposeDir)
|
||||
&& _mediaEncoder.SupportsFilterWithOption(FilterOptionType.TransposeOpenclReversal);
|
||||
var swapWAndH = Math.Abs(rotation) == 90 && (isSwDecoder || (isD3d11vaDecoder && doOclTranspose));
|
||||
var swpInW = swapWAndH ? inH : inW;
|
||||
@@ -3902,12 +3902,12 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
// map from d3d11va to opencl via d3d11-opencl interop.
|
||||
mainFilters.Add("hwmap=derive_device=opencl:mode=read");
|
||||
|
||||
// hw deint <= TODO: finsh the 'yadif_opencl' filter
|
||||
// hw deint <= TODO: finish the 'yadif_opencl' filter
|
||||
|
||||
// hw transpose
|
||||
if (doOclTranspose)
|
||||
{
|
||||
mainFilters.Add($"transpose_opencl=dir={tranposeDir}");
|
||||
mainFilters.Add($"transpose_opencl=dir={transposeDir}");
|
||||
}
|
||||
|
||||
var outFormat = doOclTonemap ? string.Empty : "nv12";
|
||||
@@ -4043,13 +4043,13 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
return GetSwVidFilterChain(state, options, vidEncoder);
|
||||
}
|
||||
|
||||
// prefered qsv(vaapi) + opencl filters pipeline
|
||||
// preferred qsv(vaapi) + opencl filters pipeline
|
||||
if (isIntelVaapiOclSupported)
|
||||
{
|
||||
return GetIntelQsvVaapiVidFiltersPrefered(state, options, vidDecoder, vidEncoder);
|
||||
}
|
||||
|
||||
// prefered qsv(d3d11) + opencl filters pipeline
|
||||
// preferred qsv(d3d11) + opencl filters pipeline
|
||||
if (isIntelDx11OclSupported)
|
||||
{
|
||||
return GetIntelQsvDx11VidFiltersPrefered(state, options, vidDecoder, vidEncoder);
|
||||
@@ -4098,8 +4098,8 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
var subH = state.SubtitleStream?.Height;
|
||||
|
||||
var rotation = state.VideoStream?.Rotation ?? 0;
|
||||
var tranposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state);
|
||||
var doVppTranspose = !string.IsNullOrEmpty(tranposeDir);
|
||||
var transposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state);
|
||||
var doVppTranspose = !string.IsNullOrEmpty(transposeDir);
|
||||
var swapWAndH = Math.Abs(rotation) == 90 && (isSwDecoder || ((isD3d11vaDecoder || isQsvDecoder) && doVppTranspose));
|
||||
var swpInW = swapWAndH ? inH : inW;
|
||||
var swpInH = swapWAndH ? inW : inH;
|
||||
@@ -4192,7 +4192,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
|
||||
if (!string.IsNullOrEmpty(hwScaleFilter) && doVppTranspose)
|
||||
{
|
||||
hwScaleFilter += $":transpose={tranposeDir}";
|
||||
hwScaleFilter += $":transpose={transposeDir}";
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(hwScaleFilter) && isMjpegEncoder)
|
||||
@@ -4385,8 +4385,8 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
var subH = state.SubtitleStream?.Height;
|
||||
|
||||
var rotation = state.VideoStream?.Rotation ?? 0;
|
||||
var tranposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state);
|
||||
var doVppTranspose = !string.IsNullOrEmpty(tranposeDir);
|
||||
var transposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state);
|
||||
var doVppTranspose = !string.IsNullOrEmpty(transposeDir);
|
||||
var swapWAndH = Math.Abs(rotation) == 90 && (isSwDecoder || ((isVaapiDecoder || isQsvDecoder) && doVppTranspose));
|
||||
var swpInW = swapWAndH ? inH : inW;
|
||||
var swpInH = swapWAndH ? inW : inH;
|
||||
@@ -4446,7 +4446,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
// hw transpose(vaapi vpp)
|
||||
if (isVaapiDecoder && doVppTranspose)
|
||||
{
|
||||
mainFilters.Add($"transpose_vaapi=dir={tranposeDir}");
|
||||
mainFilters.Add($"transpose_vaapi=dir={transposeDir}");
|
||||
}
|
||||
|
||||
var outFormat = doTonemap ? (((isQsvDecoder && doVppTranspose) || isRext) ? "p010" : string.Empty) : "nv12";
|
||||
@@ -4456,7 +4456,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
|
||||
if (!string.IsNullOrEmpty(hwScaleFilter) && isQsvDecoder && doVppTranspose)
|
||||
{
|
||||
hwScaleFilter += $":transpose={tranposeDir}";
|
||||
hwScaleFilter += $":transpose={transposeDir}";
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(hwScaleFilter) && isMjpegEncoder)
|
||||
@@ -4657,14 +4657,14 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
return swFilterChain;
|
||||
}
|
||||
|
||||
// prefered vaapi + opencl filters pipeline
|
||||
// preferred vaapi + opencl filters pipeline
|
||||
if (_mediaEncoder.IsVaapiDeviceInteliHD)
|
||||
{
|
||||
// Intel iHD path, with extra vpp tonemap and overlay support.
|
||||
return GetIntelVaapiFullVidFiltersPrefered(state, options, vidDecoder, vidEncoder);
|
||||
}
|
||||
|
||||
// prefered vaapi + vulkan filters pipeline
|
||||
// preferred vaapi + vulkan filters pipeline
|
||||
if (_mediaEncoder.IsVaapiDeviceAmd
|
||||
&& isVaapiVkSupported
|
||||
&& _mediaEncoder.IsVaapiDeviceSupportVulkanDrmInterop
|
||||
@@ -4716,8 +4716,8 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
var subH = state.SubtitleStream?.Height;
|
||||
|
||||
var rotation = state.VideoStream?.Rotation ?? 0;
|
||||
var tranposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state);
|
||||
var doVaVppTranspose = !string.IsNullOrEmpty(tranposeDir);
|
||||
var transposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state);
|
||||
var doVaVppTranspose = !string.IsNullOrEmpty(transposeDir);
|
||||
var swapWAndH = Math.Abs(rotation) == 90 && (isSwDecoder || (isVaapiDecoder && doVaVppTranspose));
|
||||
var swpInW = swapWAndH ? inH : inW;
|
||||
var swpInH = swapWAndH ? inW : inH;
|
||||
@@ -4772,7 +4772,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
// hw transpose
|
||||
if (doVaVppTranspose)
|
||||
{
|
||||
mainFilters.Add($"transpose_vaapi=dir={tranposeDir}");
|
||||
mainFilters.Add($"transpose_vaapi=dir={transposeDir}");
|
||||
}
|
||||
|
||||
var outFormat = doTonemap ? (isRext ? "p010" : string.Empty) : "nv12";
|
||||
@@ -4949,8 +4949,8 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
|| string.Equals(state.SubtitleStream.Codec, "ssa", StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
var rotation = state.VideoStream?.Rotation ?? 0;
|
||||
var tranposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state);
|
||||
var doVkTranspose = isVaapiDecoder && !string.IsNullOrEmpty(tranposeDir);
|
||||
var transposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state);
|
||||
var doVkTranspose = isVaapiDecoder && !string.IsNullOrEmpty(transposeDir);
|
||||
var swapWAndH = Math.Abs(rotation) == 90 && (isSwDecoder || (isVaapiDecoder && doVkTranspose));
|
||||
var swpInW = swapWAndH ? inH : inW;
|
||||
var swpInH = swapWAndH ? inW : inH;
|
||||
@@ -5043,13 +5043,13 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
// vk transpose
|
||||
if (doVkTranspose)
|
||||
{
|
||||
if (string.Equals(tranposeDir, "reversal", StringComparison.OrdinalIgnoreCase))
|
||||
if (string.Equals(transposeDir, "reversal", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
mainFilters.Add("flip_vulkan");
|
||||
}
|
||||
else
|
||||
{
|
||||
mainFilters.Add($"transpose_vulkan=dir={tranposeDir}");
|
||||
mainFilters.Add($"transpose_vulkan=dir={transposeDir}");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5417,8 +5417,8 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
var usingHwSurface = isVtDecoder && (_mediaEncoder.EncoderVersion >= _minFFmpegWorkingVtHwSurface);
|
||||
|
||||
var rotation = state.VideoStream?.Rotation ?? 0;
|
||||
var tranposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state);
|
||||
var doVtTranspose = !string.IsNullOrEmpty(tranposeDir) && _mediaEncoder.SupportsFilter("transpose_vt");
|
||||
var transposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state);
|
||||
var doVtTranspose = !string.IsNullOrEmpty(transposeDir) && _mediaEncoder.SupportsFilter("transpose_vt");
|
||||
var swapWAndH = Math.Abs(rotation) == 90 && doVtTranspose;
|
||||
var swpInW = swapWAndH ? inH : inW;
|
||||
var swpInH = swapWAndH ? inW : inH;
|
||||
@@ -5462,7 +5462,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
// hw transpose
|
||||
if (doVtTranspose)
|
||||
{
|
||||
mainFilters.Add($"transpose_vt=dir={tranposeDir}");
|
||||
mainFilters.Add($"transpose_vt=dir={transposeDir}");
|
||||
}
|
||||
|
||||
if (doVtTonemap)
|
||||
@@ -5577,7 +5577,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
return GetSwVidFilterChain(state, options, vidEncoder);
|
||||
}
|
||||
|
||||
// prefered rkmpp + rkrga + opencl filters pipeline
|
||||
// preferred rkmpp + rkrga + opencl filters pipeline
|
||||
if (isRkmppOclSupported)
|
||||
{
|
||||
return GetRkmppVidFiltersPrefered(state, options, vidDecoder, vidEncoder);
|
||||
@@ -5625,8 +5625,8 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
var subH = state.SubtitleStream?.Height;
|
||||
|
||||
var rotation = state.VideoStream?.Rotation ?? 0;
|
||||
var tranposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state);
|
||||
var doRkVppTranspose = !string.IsNullOrEmpty(tranposeDir);
|
||||
var transposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state);
|
||||
var doRkVppTranspose = !string.IsNullOrEmpty(transposeDir);
|
||||
var swapWAndH = Math.Abs(rotation) == 90 && (isSwDecoder || (isRkmppDecoder && doRkVppTranspose));
|
||||
var swpInW = swapWAndH ? inH : inW;
|
||||
var swpInH = swapWAndH ? inW : inH;
|
||||
@@ -5697,7 +5697,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
|
||||
if (!string.IsNullOrEmpty(hwScaleFilter) && doRkVppTranspose)
|
||||
{
|
||||
hwScaleFilter += $":transpose={tranposeDir}";
|
||||
hwScaleFilter += $":transpose={transposeDir}";
|
||||
}
|
||||
|
||||
// try enabling AFBC to save DDR bandwidth
|
||||
@@ -6171,7 +6171,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
var ffmpegVersion = _mediaEncoder.EncoderVersion;
|
||||
|
||||
// Set the av1 codec explicitly to trigger hw accelerator, otherwise libdav1d will be used.
|
||||
var isAv1 = ffmpegVersion < _minFFmpegImplictHwaccel
|
||||
var isAv1 = ffmpegVersion < _minFFmpegImplicitHwaccel
|
||||
&& string.Equals(videoCodec, "av1", StringComparison.OrdinalIgnoreCase);
|
||||
|
||||
// Allow profile mismatch if decoding H.264 baseline with d3d11va and vaapi hwaccels.
|
||||
|
||||
Reference in New Issue
Block a user