mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-05-31 04:48:27 +01:00
Merge remote-tracking branch 'jellyfinorigin/master' into feature/pgsql_provider
This commit is contained in:
@@ -58,7 +58,7 @@ public interface IDeviceManager
|
||||
QueryResult<Device> GetDevices(DeviceQuery query);
|
||||
|
||||
/// <summary>
|
||||
/// Gets device infromation based on the provided query.
|
||||
/// Gets device information based on the provided query.
|
||||
/// </summary>
|
||||
/// <param name="query">The device query.</param>
|
||||
/// <returns>A <see cref="Task{QueryResult}"/> representing the retrieval of the device information.</returns>
|
||||
@@ -109,7 +109,7 @@ public interface IDeviceManager
|
||||
DeviceOptionsDto? GetDeviceOptions(string deviceId);
|
||||
|
||||
/// <summary>
|
||||
/// Gets the dto for client capabilites.
|
||||
/// Gets the dto for client capabilities.
|
||||
/// </summary>
|
||||
/// <param name="capabilities">The client capabilities.</param>
|
||||
/// <returns><see cref="ClientCapabilitiesDto"/> of the device.</returns>
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace MediaBrowser.Controller.Entities.Audio
|
||||
IReadOnlyList<string> Artists { get; set; }
|
||||
}
|
||||
|
||||
public static class Extentions
|
||||
public static class Extensions
|
||||
{
|
||||
public static IEnumerable<string> GetAllArtists<T>(this T item)
|
||||
where T : IHasArtist, IHasAlbumArtist
|
||||
|
||||
@@ -112,15 +112,15 @@ namespace MediaBrowser.Controller.Entities.Audio
|
||||
return base.IsSaveLocalMetadataEnabled();
|
||||
}
|
||||
|
||||
protected override Task ValidateChildrenInternal(IProgress<double> progress, bool recursive, bool refreshChildMetadata, bool allowRemoveRoot, MetadataRefreshOptions refreshOptions, IDirectoryService directoryService, CancellationToken cancellationToken)
|
||||
protected override async Task ValidateChildrenInternal(IProgress<double> progress, bool recursive, bool refreshChildMetadata, bool allowRemoveRoot, MetadataRefreshOptions refreshOptions, IDirectoryService directoryService, CancellationToken cancellationToken)
|
||||
{
|
||||
if (IsAccessedByName)
|
||||
{
|
||||
// Should never get in here anyway
|
||||
return Task.CompletedTask;
|
||||
return;
|
||||
}
|
||||
|
||||
return base.ValidateChildrenInternal(progress, recursive, refreshChildMetadata, false, refreshOptions, directoryService, cancellationToken);
|
||||
await base.ValidateChildrenInternal(progress, recursive, refreshChildMetadata, false, refreshOptions, directoryService, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
public override List<string> GetUserDataKeys()
|
||||
|
||||
@@ -1800,7 +1800,7 @@ namespace MediaBrowser.Controller.Entities
|
||||
/// Adds a genre to the item.
|
||||
/// </summary>
|
||||
/// <param name="name">The name.</param>
|
||||
/// <exception cref="ArgumentNullException">Throwns if name is null.</exception>
|
||||
/// <exception cref="ArgumentNullException">Throws if name is null.</exception>
|
||||
public void AddGenre(string name)
|
||||
{
|
||||
ArgumentException.ThrowIfNullOrEmpty(name);
|
||||
@@ -1985,8 +1985,8 @@ namespace MediaBrowser.Controller.Entities
|
||||
ImageInfos = [.. ImageInfos, image];
|
||||
}
|
||||
|
||||
public virtual Task UpdateToRepositoryAsync(ItemUpdateType updateReason, CancellationToken cancellationToken)
|
||||
=> LibraryManager.UpdateItemAsync(this, GetParent(), updateReason, cancellationToken);
|
||||
public virtual async Task UpdateToRepositoryAsync(ItemUpdateType updateReason, CancellationToken cancellationToken)
|
||||
=> await LibraryManager.UpdateItemAsync(this, GetParent(), updateReason, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
/// <summary>
|
||||
/// Validates that images within the item are still on the filesystem.
|
||||
@@ -2375,7 +2375,7 @@ namespace MediaBrowser.Controller.Entities
|
||||
}
|
||||
}
|
||||
|
||||
protected Task RefreshMetadataForOwnedItem(BaseItem ownedItem, bool copyTitleMetadata, MetadataRefreshOptions options, CancellationToken cancellationToken)
|
||||
protected async Task RefreshMetadataForOwnedItem(BaseItem ownedItem, bool copyTitleMetadata, MetadataRefreshOptions options, CancellationToken cancellationToken)
|
||||
{
|
||||
var newOptions = new MetadataRefreshOptions(options)
|
||||
{
|
||||
@@ -2436,10 +2436,10 @@ namespace MediaBrowser.Controller.Entities
|
||||
}
|
||||
}
|
||||
|
||||
return ownedItem.RefreshMetadata(newOptions, cancellationToken);
|
||||
await ownedItem.RefreshMetadata(newOptions, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
protected Task RefreshMetadataForOwnedVideo(MetadataRefreshOptions options, bool copyTitleMetadata, string path, CancellationToken cancellationToken)
|
||||
protected async Task RefreshMetadataForOwnedVideo(MetadataRefreshOptions options, bool copyTitleMetadata, string path, CancellationToken cancellationToken)
|
||||
{
|
||||
var newOptions = new MetadataRefreshOptions(options)
|
||||
{
|
||||
@@ -2449,9 +2449,7 @@ namespace MediaBrowser.Controller.Entities
|
||||
var id = LibraryManager.GetNewItemId(path, typeof(Video));
|
||||
|
||||
// Try to retrieve it from the db. If we don't find it, use the resolved version
|
||||
var video = LibraryManager.GetItemById(id) as Video;
|
||||
|
||||
if (video is null)
|
||||
if (LibraryManager.GetItemById(id) is not Video video)
|
||||
{
|
||||
video = LibraryManager.ResolvePath(FileSystem.GetFileSystemInfo(path)) as Video;
|
||||
|
||||
@@ -2460,15 +2458,15 @@ namespace MediaBrowser.Controller.Entities
|
||||
|
||||
if (video is null)
|
||||
{
|
||||
return Task.FromResult(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (video.OwnerId.IsEmpty())
|
||||
{
|
||||
video.OwnerId = this.Id;
|
||||
video.OwnerId = Id;
|
||||
}
|
||||
|
||||
return RefreshMetadataForOwnedItem(video, copyTitleMetadata, newOptions, cancellationToken);
|
||||
await RefreshMetadataForOwnedItem(video, copyTitleMetadata, newOptions, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
public string GetEtag(User user)
|
||||
|
||||
@@ -531,13 +531,13 @@ namespace MediaBrowser.Controller.Entities
|
||||
}
|
||||
}
|
||||
|
||||
private Task RefreshMetadataRecursive(IList<BaseItem> children, MetadataRefreshOptions refreshOptions, bool recursive, IProgress<double> progress, CancellationToken cancellationToken)
|
||||
private async Task RefreshMetadataRecursive(IList<BaseItem> children, MetadataRefreshOptions refreshOptions, bool recursive, IProgress<double> progress, CancellationToken cancellationToken)
|
||||
{
|
||||
return RunTasks(
|
||||
await RunTasks(
|
||||
(baseItem, innerProgress) => RefreshChildMetadata(baseItem, refreshOptions, recursive && baseItem.IsFolder, innerProgress, cancellationToken),
|
||||
children,
|
||||
progress,
|
||||
cancellationToken);
|
||||
cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
private async Task RefreshAllMetadataForContainer(IMetadataContainer container, MetadataRefreshOptions refreshOptions, IProgress<double> progress, CancellationToken cancellationToken)
|
||||
@@ -578,13 +578,13 @@ namespace MediaBrowser.Controller.Entities
|
||||
/// <param name="progress">The progress.</param>
|
||||
/// <param name="cancellationToken">The cancellation token.</param>
|
||||
/// <returns>Task.</returns>
|
||||
private Task ValidateSubFolders(IList<Folder> children, IDirectoryService directoryService, IProgress<double> progress, CancellationToken cancellationToken)
|
||||
private async Task ValidateSubFolders(IList<Folder> children, IDirectoryService directoryService, IProgress<double> progress, CancellationToken cancellationToken)
|
||||
{
|
||||
return RunTasks(
|
||||
await RunTasks(
|
||||
(folder, innerProgress) => folder.ValidateChildrenInternal(innerProgress, true, false, false, null, directoryService, cancellationToken),
|
||||
children,
|
||||
progress,
|
||||
cancellationToken);
|
||||
cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -1243,11 +1243,6 @@ namespace MediaBrowser.Controller.Entities
|
||||
return false;
|
||||
}
|
||||
|
||||
if (request.GenreIds.Count > 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (request.VideoTypes.Length > 0)
|
||||
{
|
||||
return false;
|
||||
|
||||
@@ -134,7 +134,7 @@ namespace MediaBrowser.Controller.Entities.TV
|
||||
var series = Series;
|
||||
if (series is not null)
|
||||
{
|
||||
return series.PresentationUniqueKey + "-" + (IndexNumber ?? 0).ToString("000", CultureInfo.InvariantCulture);
|
||||
return series.PresentationUniqueKey + "-" + IndexNumber.Value.ToString("000", CultureInfo.InvariantCulture);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ namespace MediaBrowser.Controller.Library
|
||||
IReadOnlyList<MediaAttachment> GetMediaAttachments(MediaAttachmentQuery query);
|
||||
|
||||
/// <summary>
|
||||
/// Gets the playack media sources.
|
||||
/// Gets the playback media sources.
|
||||
/// </summary>
|
||||
/// <param name="item">Item to use.</param>
|
||||
/// <param name="user">User to use for operation.</param>
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -46,20 +46,20 @@ public interface IMediaSegmentManager
|
||||
Task DeleteSegmentAsync(Guid segmentId);
|
||||
|
||||
/// <summary>
|
||||
/// Obtains all segments accociated with the itemId.
|
||||
/// Obtains all segments associated with the itemId.
|
||||
/// </summary>
|
||||
/// <param name="itemId">The id of the <see cref="BaseItem"/>.</param>
|
||||
/// <param name="typeFilter">filteres all media segments of the given type to be included. If null all types are included.</param>
|
||||
/// <param name="filterByProvider">When set filteres the segments to only return those that which providers are currently enabled on their library.</param>
|
||||
/// <param name="typeFilter">filters all media segments of the given type to be included. If null all types are included.</param>
|
||||
/// <param name="filterByProvider">When set filters the segments to only return those that which providers are currently enabled on their library.</param>
|
||||
/// <returns>An enumerator of <see cref="MediaSegmentDto"/>'s.</returns>
|
||||
Task<IEnumerable<MediaSegmentDto>> GetSegmentsAsync(Guid itemId, IEnumerable<MediaSegmentType>? typeFilter, bool filterByProvider = true);
|
||||
|
||||
/// <summary>
|
||||
/// Obtains all segments accociated with the itemId.
|
||||
/// Obtains all segments associated with the itemId.
|
||||
/// </summary>
|
||||
/// <param name="item">The <see cref="BaseItem"/>.</param>
|
||||
/// <param name="typeFilter">filteres all media segments of the given type to be included. If null all types are included.</param>
|
||||
/// <param name="filterByProvider">When set filteres the segments to only return those that which providers are currently enabled on their library.</param>
|
||||
/// <param name="typeFilter">filters all media segments of the given type to be included. If null all types are included.</param>
|
||||
/// <param name="filterByProvider">When set filters the segments to only return those that which providers are currently enabled on their library.</param>
|
||||
/// <returns>An enumerator of <see cref="MediaSegmentDto"/>'s.</returns>
|
||||
Task<IEnumerable<MediaSegmentDto>> GetSegmentsAsync(BaseItem item, IEnumerable<MediaSegmentType>? typeFilter, bool filterByProvider = true);
|
||||
|
||||
@@ -24,9 +24,9 @@ namespace MediaBrowser.Controller.Net
|
||||
DateTime LastActivityDate { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the date of last Keeplive received.
|
||||
/// Gets or sets the date of last Keepalive received.
|
||||
/// </summary>
|
||||
/// <value>The date of last Keeplive received.</value>
|
||||
/// <value>The date of last Keepalive received.</value>
|
||||
DateTime LastKeepAliveDate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -324,7 +324,7 @@ namespace MediaBrowser.Controller.Session
|
||||
Task<SessionInfo> GetSessionByAuthenticationToken(Device info, string deviceId, string remoteEndpoint, string appVersion);
|
||||
|
||||
/// <summary>
|
||||
/// Logouts the specified access token.
|
||||
/// Logs out the specified access token.
|
||||
/// </summary>
|
||||
/// <param name="accessToken">The access token.</param>
|
||||
/// <returns>A <see cref="Task"/> representing the log out process.</returns>
|
||||
|
||||
@@ -286,7 +286,7 @@ namespace MediaBrowser.Controller.Session
|
||||
/// <summary>
|
||||
/// Gets or sets the playlist item id.
|
||||
/// </summary>
|
||||
/// <value>The splaylist item id.</value>
|
||||
/// <value>The playlist item id.</value>
|
||||
public string PlaylistItemId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -5,7 +5,7 @@ using MediaBrowser.Controller.Library;
|
||||
namespace MediaBrowser.Controller.Sorting
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a BaseItem comparer that requires a User to perform it's comparison.
|
||||
/// Represents a BaseItem comparer that requires a User to perform its comparison.
|
||||
/// </summary>
|
||||
public interface IUserBaseItemComparer : IBaseItemComparer
|
||||
{
|
||||
|
||||
@@ -51,7 +51,7 @@ public class StreamState : EncodingJobInfo, IDisposable
|
||||
public VideoRequestDto? VideoRequest => Request as VideoRequestDto;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the direct stream provicer.
|
||||
/// Gets or sets the direct stream provider.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Deprecated.
|
||||
|
||||
Reference in New Issue
Block a user