From b36aab9399973274e5d539093e0cd8bdd2bd9b25 Mon Sep 17 00:00:00 2001 From: Cody Robibero Date: Mon, 13 Oct 2025 14:16:05 -0600 Subject: Validate encoder path (#14996) --- .../Configuration/EncodingConfigurationStore.cs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'MediaBrowser.MediaEncoding') diff --git a/MediaBrowser.MediaEncoding/Configuration/EncodingConfigurationStore.cs b/MediaBrowser.MediaEncoding/Configuration/EncodingConfigurationStore.cs index 2f158157e8..19c1de9f74 100644 --- a/MediaBrowser.MediaEncoding/Configuration/EncodingConfigurationStore.cs +++ b/MediaBrowser.MediaEncoding/Configuration/EncodingConfigurationStore.cs @@ -18,10 +18,16 @@ namespace MediaBrowser.MediaEncoding.Configuration public void Validate(object oldConfig, object newConfig) { - var newPath = ((EncodingOptions)newConfig).TranscodingTempPath; + var oldEncodingOptions = (EncodingOptions)oldConfig; + var newEncodingOptions = (EncodingOptions)newConfig; + + ArgumentNullException.ThrowIfNull(oldEncodingOptions, nameof(oldConfig)); + ArgumentNullException.ThrowIfNull(newEncodingOptions, nameof(newConfig)); + + var newPath = newEncodingOptions.TranscodingTempPath; if (!string.IsNullOrWhiteSpace(newPath) - && !string.Equals(((EncodingOptions)oldConfig).TranscodingTempPath, newPath, StringComparison.Ordinal)) + && !string.Equals(oldEncodingOptions.TranscodingTempPath, newPath, StringComparison.Ordinal)) { // Validate if (!Directory.Exists(newPath)) @@ -33,6 +39,12 @@ namespace MediaBrowser.MediaEncoding.Configuration newPath)); } } + + if (!string.IsNullOrWhiteSpace(newEncodingOptions.EncoderAppPath) + && !string.Equals(oldEncodingOptions.EncoderAppPath, newEncodingOptions.EncoderAppPath, StringComparison.Ordinal)) + { + throw new InvalidOperationException("Unable to update encoder app path."); + } } } } -- cgit v1.2.3 From dbb015441fdbdeb0d29714ffd3f5b168e7081021 Mon Sep 17 00:00:00 2001 From: nyanmisaka Date: Mon, 27 Oct 2025 15:43:18 -0400 Subject: Backport pull request #15144 from jellyfin/release-10.11.z Fix videos with cropping metadata are probed as anamorphic Original-merge: 175ee12bbcad1394d9cf9696d8408a9dd5190b8e Merged-by: crobibero Backported-by: Bond_009 --- MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'MediaBrowser.MediaEncoding') diff --git a/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs b/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs index 00a9ae797d..eb312029a1 100644 --- a/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs +++ b/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs @@ -930,6 +930,15 @@ namespace MediaBrowser.MediaEncoding.Probing { stream.Rotation = data.Rotation; } + + // Parse video frame cropping metadata from side_data + // TODO: save them and make HW filters to apply them in HWA pipelines + else if (string.Equals(data.SideDataType, "Frame Cropping", StringComparison.OrdinalIgnoreCase)) + { + // Streams containing artificially added frame cropping + // metadata should not be marked as anamorphic. + stream.IsAnamorphic = false; + } } } -- cgit v1.2.3 From 511b5d9c537e45dcbcb4bc464ed5910ea5546399 Mon Sep 17 00:00:00 2001 From: gnattu Date: Mon, 27 Oct 2025 15:43:22 -0400 Subject: Backport pull request #15177 from jellyfin/release-10.11.z Make priority class setting more robust Original-merge: 70c32a26fa9f16db513a92cdd2dcafa7ee15a80d Merged-by: crobibero Backported-by: Bond_009 --- MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs | 10 +++++++++- .../FfProbe/FfProbeKeyframeExtractor.cs | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) (limited to 'MediaBrowser.MediaEncoding') diff --git a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs index 8350d1613b..b7fef842b3 100644 --- a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs +++ b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs @@ -1122,7 +1122,15 @@ namespace MediaBrowser.MediaEncoding.Encoder private void StartProcess(ProcessWrapper process) { process.Process.Start(); - process.Process.PriorityClass = ProcessPriorityClass.BelowNormal; + + try + { + process.Process.PriorityClass = ProcessPriorityClass.BelowNormal; + } + catch (Exception ex) + { + _logger.LogWarning(ex, "Unable to set process priority to BelowNormal for {ProcessFileName}", process.Process.StartInfo.FileName); + } lock (_runningProcessesLock) { diff --git a/src/Jellyfin.MediaEncoding.Keyframes/FfProbe/FfProbeKeyframeExtractor.cs b/src/Jellyfin.MediaEncoding.Keyframes/FfProbe/FfProbeKeyframeExtractor.cs index a0dafb8f19..cbe97a8210 100644 --- a/src/Jellyfin.MediaEncoding.Keyframes/FfProbe/FfProbeKeyframeExtractor.cs +++ b/src/Jellyfin.MediaEncoding.Keyframes/FfProbe/FfProbeKeyframeExtractor.cs @@ -42,7 +42,15 @@ public static class FfProbeKeyframeExtractor try { process.Start(); - process.PriorityClass = ProcessPriorityClass.BelowNormal; + try + { + process.PriorityClass = ProcessPriorityClass.BelowNormal; + } + catch + { + // We do not care if process priority setting fails + // Ideally log a warning but this does not have a logger available + } return ParseStream(process.StandardOutput); } -- cgit v1.2.3