aboutsummaryrefslogtreecommitdiff
path: root/Jellyfin.Api/Helpers/HlsCodecStringHelpers.cs
diff options
context:
space:
mode:
authornyanmisaka <nst799610810@gmail.com>2023-06-19 22:50:09 +0800
committernyanmisaka <nst799610810@gmail.com>2023-06-20 03:50:02 +0800
commit0df6fd9cf28ddec98e0418ca08e8b42046ff677f (patch)
treea37a7a4fdce9c72171e7681ec7454fa10b9350a3 /Jellyfin.Api/Helpers/HlsCodecStringHelpers.cs
parent4972fbf2a318cdc6eadfa259a7dbb5dfe1ce92a1 (diff)
Add AV1 support in HLS streaming
Signed-off-by: nyanmisaka <nst799610810@gmail.com>
Diffstat (limited to 'Jellyfin.Api/Helpers/HlsCodecStringHelpers.cs')
-rw-r--r--Jellyfin.Api/Helpers/HlsCodecStringHelpers.cs56
1 files changed, 56 insertions, 0 deletions
diff --git a/Jellyfin.Api/Helpers/HlsCodecStringHelpers.cs b/Jellyfin.Api/Helpers/HlsCodecStringHelpers.cs
index 995488397..ad1fce0f1 100644
--- a/Jellyfin.Api/Helpers/HlsCodecStringHelpers.cs
+++ b/Jellyfin.Api/Helpers/HlsCodecStringHelpers.cs
@@ -179,4 +179,60 @@ public static class HlsCodecStringHelpers
return result.ToString();
}
+
+ /// <summary>
+ /// Gets a AV1 codec string.
+ /// </summary>
+ /// <param name="profile">AV1 profile.</param>
+ /// <param name="level">AV1 level.</param>
+ /// <param name="tierFlag">AV1 tier flag.</param>
+ /// <param name="bitDepth">AV1 bit depth.</param>
+ /// <returns>AV1 string.</returns>
+ public static string GetAv1String(string? profile, int level, bool tierFlag, int bitDepth)
+ {
+ // https://aomedia.org/av1/specification/annex-a/
+ // FORMAT: [codecTag].[profile].[level][tier].[bitDepth]
+ StringBuilder result = new StringBuilder("av01", 13);
+
+ if (string.Equals(profile, "Main", StringComparison.OrdinalIgnoreCase))
+ {
+ result.Append(".0");
+ }
+ else if (string.Equals(profile, "High", StringComparison.OrdinalIgnoreCase))
+ {
+ result.Append(".1");
+ }
+ else if (string.Equals(profile, "Professional", StringComparison.OrdinalIgnoreCase))
+ {
+ result.Append(".2");
+ }
+ else
+ {
+ // Default to Main
+ result.Append(".0");
+ }
+
+ if (level <= 0
+ || level > 31)
+ {
+ // Default to the maximum defined level 6.3
+ level = 19;
+ }
+
+ if (bitDepth != 8
+ && bitDepth != 10
+ && bitDepth != 12)
+ {
+ // Default to 8 bits
+ bitDepth = 8;
+ }
+
+ result.Append("." + level)
+ .Append(tierFlag ? "H" : "M");
+
+ string bitDepthD2 = bitDepth.ToString("D2", CultureInfo.InvariantCulture);
+ result.Append("." + bitDepthD2);
+
+ return result.ToString();
+ }
}