aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs
diff options
context:
space:
mode:
authorgnattu <gnattu@users.noreply.github.com>2024-05-17 13:51:51 -0400
committerJoshua M. Boniface <joshua@boniface.me>2024-05-17 13:51:51 -0400
commit7336427ce661fd9c8bd78eeb23b750321d7387f6 (patch)
tree37cbd7ef8de11175bdd72b02abb3f03028655a7f /MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs
parent8b938e26962dec132ff43ad6741effc71c1d162d (diff)
Backport pull request #11675 from jellyfin/release-10.9.z
Fix quality parameter for vaapi_mjpeg Original-merge: ddd5c302b4fb7b07a5a46aa6d0026d9b37aa9b2c Merged-by: nielsvanvelzen <nielsvanvelzen@users.noreply.github.com> Backported-by: Joshua M. Boniface <joshua@boniface.me>
Diffstat (limited to 'MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs')
-rw-r--r--MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs11
1 files changed, 10 insertions, 1 deletions
diff --git a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs
index 39431a9fc..8ea0f58ea 100644
--- a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs
+++ b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs
@@ -871,6 +871,15 @@ namespace MediaBrowser.MediaEncoding.Encoder
throw new InvalidOperationException("Empty or invalid input argument.");
}
+ float? encoderQuality = qualityScale;
+ if (vidEncoder.Contains("vaapi", StringComparison.OrdinalIgnoreCase))
+ {
+ // vaapi's mjpeg encoder uses jpeg quality divided by QP2LAMBDA (118) as input, instead of ffmpeg defined qscale
+ // ffmpeg qscale is a value from 1-31, with 1 being best quality and 31 being worst
+ // jpeg quality is a value from 0-100, with 0 being worst quality and 100 being best
+ encoderQuality = (100 - ((qualityScale - 1) * (100 / 30))) / 118;
+ }
+
// Output arguments
var targetDirectory = Path.Combine(_configurationManager.ApplicationPaths.TempDirectory, Guid.NewGuid().ToString("N"));
Directory.CreateDirectory(targetDirectory);
@@ -884,7 +893,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
filterParam,
outputThreads.GetValueOrDefault(_threads),
vidEncoder,
- qualityScale.HasValue ? "-qscale:v " + qualityScale.Value.ToString(CultureInfo.InvariantCulture) + " " : string.Empty,
+ qualityScale.HasValue ? "-qscale:v " + encoderQuality.Value.ToString(CultureInfo.InvariantCulture) + " " : string.Empty,
"image2",
outputPath);