mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-05-03 23:36:38 +01:00
Use strict QSV CPB size for less powerful H.264 decoder
Some checks failed
CodeQL / Analyze (csharp) (push) Has been cancelled
Tests / run-tests (macos-latest) (push) Has been cancelled
Tests / run-tests (ubuntu-latest) (push) Has been cancelled
Tests / run-tests (windows-latest) (push) Has been cancelled
OpenAPI Publish / OpenAPI - Publish Artifact (push) Has been cancelled
OpenAPI Publish / OpenAPI - Publish Unstable Spec (push) Has been cancelled
OpenAPI Publish / OpenAPI - Publish Stable Spec (push) Has been cancelled
Project Automation / Project board (push) Has been cancelled
Merge Conflict Labeler / Labeling (push) Has been cancelled
Some checks failed
CodeQL / Analyze (csharp) (push) Has been cancelled
Tests / run-tests (macos-latest) (push) Has been cancelled
Tests / run-tests (ubuntu-latest) (push) Has been cancelled
Tests / run-tests (windows-latest) (push) Has been cancelled
OpenAPI Publish / OpenAPI - Publish Artifact (push) Has been cancelled
OpenAPI Publish / OpenAPI - Publish Unstable Spec (push) Has been cancelled
OpenAPI Publish / OpenAPI - Publish Stable Spec (push) Has been cancelled
Project Automation / Project board (push) Has been cancelled
Merge Conflict Labeler / Labeling (push) Has been cancelled
Signed-off-by: nyanmisaka <nst799610810@gmail.com>
This commit is contained in:
@@ -1621,13 +1621,25 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
mbbrcOpt = " -mbbrc 1";
|
||||
}
|
||||
|
||||
// Some less powerful H.264 HW decoders require strict CPB size
|
||||
// So bufsize optimizations should not be applied to them
|
||||
int factor = 2;
|
||||
var codec = state.ActualOutputVideoCodec;
|
||||
var level = state.GetRequestedLevel(codec);
|
||||
if (string.Equals(codec, "h264", StringComparison.OrdinalIgnoreCase)
|
||||
&& double.TryParse(level, CultureInfo.InvariantCulture, out double requestedLevel)
|
||||
&& requestedLevel < 51)
|
||||
{
|
||||
factor = 1;
|
||||
}
|
||||
|
||||
// Set (maxrate == bitrate + 1) to trigger VBR for better bitrate allocation
|
||||
// Set (rc_init_occupancy == 2 * bitrate) and (bufsize == 4 * bitrate) to deal with drastic scene changes
|
||||
// Use long arithmetic and clamp to int.MaxValue to prevent int32 overflow
|
||||
// (e.g. bitrate * 4 wraps to a negative value for bitrates above ~537 million)
|
||||
int qsvMaxrate = (int)Math.Min((long)bitrate + 1, int.MaxValue);
|
||||
int qsvInitOcc = (int)Math.Min((long)bitrate * 2, int.MaxValue);
|
||||
int qsvBufsize = (int)Math.Min((long)bitrate * 4, int.MaxValue);
|
||||
int qsvInitOcc = (int)Math.Min((long)bitrate * 1 * factor, int.MaxValue);
|
||||
int qsvBufsize = (int)Math.Min((long)bitrate * 2 * factor, int.MaxValue);
|
||||
|
||||
return FormattableString.Invariant($"{mbbrcOpt} -b:v {bitrate} -maxrate {qsvMaxrate} -rc_init_occupancy {qsvInitOcc} -bufsize {qsvBufsize}");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user