Evan Husted b1de7696ee misc: chore: VP9 project cleanup
Target-typed new, remove var usage, use collection expressions, rename many fields & properties to match C# standard
2025-02-18 21:33:07 -06:00

623 lines
32 KiB
C#

using Ryujinx.Graphics.Nvdec.Vp9.Types;
using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
namespace Ryujinx.Graphics.Nvdec.Vp9
{
internal static class Entropy
{
public const int DiffUpdateProb = 252;
// Coefficient token alphabet
public const int ZeroToken = 0; // 0 Extra Bits 0+0
public const int OneToken = 1; // 1 Extra Bits 0+1
public const int TwoToken = 2; // 2 Extra Bits 0+1
public const int ThreeToken = 3; // 3 Extra Bits 0+1
public const int FourToken = 4; // 4 Extra Bits 0+1
public const int Category1Token = 5; // 5-6 Extra Bits 1+1
public const int Category2Token = 6; // 7-10 Extra Bits 2+1
public const int Category3Token = 7; // 11-18 Extra Bits 3+1
public const int Category4Token = 8; // 19-34 Extra Bits 4+1
public const int Category5Token = 9; // 35-66 Extra Bits 5+1
public const int Category6Token = 10; // 67+ Extra Bits 14+1
public const int EobToken = 11; // EOB Extra Bits 0+0
public const int EntropyTokens = 12;
public const int RefTypes = 2; // intra=0, inter=1
/* Middle dimension reflects the coefficient position within the transform. */
public const int CoefBands = 6;
/* Inside dimension is measure of nearby complexity, that reflects the energy
of nearby coefficients are nonzero. For the first coefficient (DC, unless
block type is 0), we look at the (already encoded) blocks above and to the
left of the current block. The context index is then the number (0,1,or 2)
of these blocks having nonzero coefficients.
After decoding a coefficient, the measure is determined by the size of the
most recently decoded coefficient.
Note that the intuitive meaning of this measure changes as coefficients
are decoded, e.g., prior to the first token, a zero means that my neighbors
are empty while, after the first token, because of the use of end-of-block,
a zero means we just decoded a zero and hence guarantees that a non-zero
coefficient will appear later in this block. However, this shift
in meaning is perfectly OK because our context depends also on the
coefficient band (and since zigzag positions 0, 1, and 2 are in
distinct bands). */
public const int CoeffContexts = 6;
public static int BAND_COEFF_CONTEXTS(int band)
{
return band == 0 ? 3 : CoeffContexts;
}
public const int UnconstrainedNodes = 3;
public const int PivotNode = 2;
public const int Cat1MinVal = 5;
public const int Cat2MinVal = 7;
public const int Cat3MinVal = 11;
public const int Cat4MinVal = 19;
public const int Cat5MinVal = 35;
public const int Cat6MinVal = 67;
public static readonly byte[] Cat1Prob = [159];
public static readonly byte[] Cat2Prob = [165, 145];
public static readonly byte[] Cat3Prob = [173, 148, 140];
public static readonly byte[] Cat4Prob = [176, 155, 140, 135];
public static readonly byte[] Cat5Prob = [180, 157, 141, 134, 130];
public static readonly byte[] Cat6Prob =
[
254, 254, 254, 252, 249, 243, 230, 196, 177, 153, 140, 133, 130, 129
];
public static readonly byte[] Cat6ProbHigh12 =
[
255, 255, 255, 255, 254, 254, 54, 252, 249, 243, 230, 196, 177, 153, 140, 133, 130, 129
];
public const int EobModelToken = 3;
private static readonly byte[] _coefbandTrans8X8Plus =
[
0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5,
// beyond MAXBAND_INDEX+1 all values are filled as 5
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
];
private static readonly byte[] _coefbandTrans4X4 = [0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5];
public static readonly byte[][] Pareto8Full =
[
[3, 86, 128, 6, 86, 23, 88, 29], [6, 86, 128, 11, 87, 42, 91, 52],
[9, 86, 129, 17, 88, 61, 94, 76], [12, 86, 129, 22, 88, 77, 97, 93],
[15, 87, 129, 28, 89, 93, 100, 110], [17, 87, 129, 33, 90, 105, 103, 123],
[20, 88, 130, 38, 91, 118, 106, 136], [23, 88, 130, 43, 91, 128, 108, 146],
[26, 89, 131, 48, 92, 139, 111, 156], [28, 89, 131, 53, 93, 147, 114, 163],
[31, 90, 131, 58, 94, 156, 117, 171], [34, 90, 131, 62, 94, 163, 119, 177],
[37, 90, 132, 66, 95, 171, 122, 184], [39, 90, 132, 70, 96, 177, 124, 189],
[42, 91, 132, 75, 97, 183, 127, 194], [44, 91, 132, 79, 97, 188, 129, 198],
[47, 92, 133, 83, 98, 193, 132, 202], [49, 92, 133, 86, 99, 197, 134, 205],
[52, 93, 133, 90, 100, 201, 137, 208], [54, 93, 133, 94, 100, 204, 139, 211],
[57, 94, 134, 98, 101, 208, 142, 214], [59, 94, 134, 101, 102, 211, 144, 216],
[62, 94, 135, 105, 103, 214, 146, 218],
[64, 94, 135, 108, 103, 216, 148, 220],
[66, 95, 135, 111, 104, 219, 151, 222],
[68, 95, 135, 114, 105, 221, 153, 223],
[71, 96, 136, 117, 106, 224, 155, 225],
[73, 96, 136, 120, 106, 225, 157, 226],
[76, 97, 136, 123, 107, 227, 159, 228],
[78, 97, 136, 126, 108, 229, 160, 229],
[80, 98, 137, 129, 109, 231, 162, 231],
[82, 98, 137, 131, 109, 232, 164, 232],
[84, 98, 138, 134, 110, 234, 166, 233],
[86, 98, 138, 137, 111, 235, 168, 234],
[89, 99, 138, 140, 112, 236, 170, 235],
[91, 99, 138, 142, 112, 237, 171, 235],
[93, 100, 139, 145, 113, 238, 173, 236],
[95, 100, 139, 147, 114, 239, 174, 237],
[97, 101, 140, 149, 115, 240, 176, 238],
[99, 101, 140, 151, 115, 241, 177, 238],
[101, 102, 140, 154, 116, 242, 179, 239],
[103, 102, 140, 156, 117, 242, 180, 239],
[105, 103, 141, 158, 118, 243, 182, 240],
[107, 103, 141, 160, 118, 243, 183, 240],
[109, 104, 141, 162, 119, 244, 185, 241],
[111, 104, 141, 164, 119, 244, 186, 241],
[113, 104, 142, 166, 120, 245, 187, 242],
[114, 104, 142, 168, 121, 245, 188, 242],
[116, 105, 143, 170, 122, 246, 190, 243],
[118, 105, 143, 171, 122, 246, 191, 243],
[120, 106, 143, 173, 123, 247, 192, 244],
[121, 106, 143, 175, 124, 247, 193, 244],
[123, 107, 144, 177, 125, 248, 195, 244],
[125, 107, 144, 178, 125, 248, 196, 244],
[127, 108, 145, 180, 126, 249, 197, 245],
[128, 108, 145, 181, 127, 249, 198, 245],
[130, 109, 145, 183, 128, 249, 199, 245],
[132, 109, 145, 184, 128, 249, 200, 245],
[134, 110, 146, 186, 129, 250, 201, 246],
[135, 110, 146, 187, 130, 250, 202, 246],
[137, 111, 147, 189, 131, 251, 203, 246],
[138, 111, 147, 190, 131, 251, 204, 246],
[140, 112, 147, 192, 132, 251, 205, 247],
[141, 112, 147, 193, 132, 251, 206, 247],
[143, 113, 148, 194, 133, 251, 207, 247],
[144, 113, 148, 195, 134, 251, 207, 247],
[146, 114, 149, 197, 135, 252, 208, 248],
[147, 114, 149, 198, 135, 252, 209, 248],
[149, 115, 149, 199, 136, 252, 210, 248],
[150, 115, 149, 200, 137, 252, 210, 248],
[152, 115, 150, 201, 138, 252, 211, 248],
[153, 115, 150, 202, 138, 252, 212, 248],
[155, 116, 151, 204, 139, 253, 213, 249],
[156, 116, 151, 205, 139, 253, 213, 249],
[158, 117, 151, 206, 140, 253, 214, 249],
[159, 117, 151, 207, 141, 253, 215, 249],
[161, 118, 152, 208, 142, 253, 216, 249],
[162, 118, 152, 209, 142, 253, 216, 249],
[163, 119, 153, 210, 143, 253, 217, 249],
[164, 119, 153, 211, 143, 253, 217, 249],
[166, 120, 153, 212, 144, 254, 218, 250],
[167, 120, 153, 212, 145, 254, 219, 250],
[168, 121, 154, 213, 146, 254, 220, 250],
[169, 121, 154, 214, 146, 254, 220, 250],
[171, 122, 155, 215, 147, 254, 221, 250],
[172, 122, 155, 216, 147, 254, 221, 250],
[173, 123, 155, 217, 148, 254, 222, 250],
[174, 123, 155, 217, 149, 254, 222, 250],
[176, 124, 156, 218, 150, 254, 223, 250],
[177, 124, 156, 219, 150, 254, 223, 250],
[178, 125, 157, 220, 151, 254, 224, 251],
[179, 125, 157, 220, 151, 254, 224, 251],
[180, 126, 157, 221, 152, 254, 225, 251],
[181, 126, 157, 221, 152, 254, 225, 251],
[183, 127, 158, 222, 153, 254, 226, 251],
[184, 127, 158, 223, 154, 254, 226, 251],
[185, 128, 159, 224, 155, 255, 227, 251],
[186, 128, 159, 224, 155, 255, 227, 251],
[187, 129, 160, 225, 156, 255, 228, 251],
[188, 130, 160, 225, 156, 255, 228, 251],
[189, 131, 160, 226, 157, 255, 228, 251],
[190, 131, 160, 226, 158, 255, 228, 251],
[191, 132, 161, 227, 159, 255, 229, 251],
[192, 132, 161, 227, 159, 255, 229, 251],
[193, 133, 162, 228, 160, 255, 230, 252],
[194, 133, 162, 229, 160, 255, 230, 252],
[195, 134, 163, 230, 161, 255, 231, 252],
[196, 134, 163, 230, 161, 255, 231, 252],
[197, 135, 163, 231, 162, 255, 231, 252],
[198, 135, 163, 231, 162, 255, 231, 252],
[199, 136, 164, 232, 163, 255, 232, 252],
[200, 136, 164, 232, 164, 255, 232, 252],
[201, 137, 165, 233, 165, 255, 233, 252],
[201, 137, 165, 233, 165, 255, 233, 252],
[202, 138, 166, 233, 166, 255, 233, 252],
[203, 138, 166, 233, 166, 255, 233, 252],
[204, 139, 166, 234, 167, 255, 234, 252],
[205, 139, 166, 234, 167, 255, 234, 252],
[206, 140, 167, 235, 168, 255, 235, 252],
[206, 140, 167, 235, 168, 255, 235, 252],
[207, 141, 168, 236, 169, 255, 235, 252],
[208, 141, 168, 236, 170, 255, 235, 252],
[209, 142, 169, 237, 171, 255, 236, 252],
[209, 143, 169, 237, 171, 255, 236, 252],
[210, 144, 169, 237, 172, 255, 236, 252],
[211, 144, 169, 237, 172, 255, 236, 252],
[212, 145, 170, 238, 173, 255, 237, 252],
[213, 145, 170, 238, 173, 255, 237, 252],
[214, 146, 171, 239, 174, 255, 237, 253],
[214, 146, 171, 239, 174, 255, 237, 253],
[215, 147, 172, 240, 175, 255, 238, 253],
[215, 147, 172, 240, 175, 255, 238, 253],
[216, 148, 173, 240, 176, 255, 238, 253],
[217, 148, 173, 240, 176, 255, 238, 253],
[218, 149, 173, 241, 177, 255, 239, 253],
[218, 149, 173, 241, 178, 255, 239, 253],
[219, 150, 174, 241, 179, 255, 239, 253],
[219, 151, 174, 241, 179, 255, 239, 253],
[220, 152, 175, 242, 180, 255, 240, 253],
[221, 152, 175, 242, 180, 255, 240, 253],
[222, 153, 176, 242, 181, 255, 240, 253],
[222, 153, 176, 242, 181, 255, 240, 253],
[223, 154, 177, 243, 182, 255, 240, 253],
[223, 154, 177, 243, 182, 255, 240, 253],
[224, 155, 178, 244, 183, 255, 241, 253],
[224, 155, 178, 244, 183, 255, 241, 253],
[225, 156, 178, 244, 184, 255, 241, 253],
[225, 157, 178, 244, 184, 255, 241, 253],
[226, 158, 179, 244, 185, 255, 242, 253],
[227, 158, 179, 244, 185, 255, 242, 253],
[228, 159, 180, 245, 186, 255, 242, 253],
[228, 159, 180, 245, 186, 255, 242, 253],
[229, 160, 181, 245, 187, 255, 242, 253],
[229, 160, 181, 245, 187, 255, 242, 253],
[230, 161, 182, 246, 188, 255, 243, 253],
[230, 162, 182, 246, 188, 255, 243, 253],
[231, 163, 183, 246, 189, 255, 243, 253],
[231, 163, 183, 246, 189, 255, 243, 253],
[232, 164, 184, 247, 190, 255, 243, 253],
[232, 164, 184, 247, 190, 255, 243, 253],
[233, 165, 185, 247, 191, 255, 244, 253],
[233, 165, 185, 247, 191, 255, 244, 253],
[234, 166, 185, 247, 192, 255, 244, 253],
[234, 167, 185, 247, 192, 255, 244, 253],
[235, 168, 186, 248, 193, 255, 244, 253],
[235, 168, 186, 248, 193, 255, 244, 253],
[236, 169, 187, 248, 194, 255, 244, 253],
[236, 169, 187, 248, 194, 255, 244, 253],
[236, 170, 188, 248, 195, 255, 245, 253],
[236, 170, 188, 248, 195, 255, 245, 253],
[237, 171, 189, 249, 196, 255, 245, 254],
[237, 172, 189, 249, 196, 255, 245, 254],
[238, 173, 190, 249, 197, 255, 245, 254],
[238, 173, 190, 249, 197, 255, 245, 254],
[239, 174, 191, 249, 198, 255, 245, 254],
[239, 174, 191, 249, 198, 255, 245, 254],
[240, 175, 192, 249, 199, 255, 246, 254],
[240, 176, 192, 249, 199, 255, 246, 254],
[240, 177, 193, 250, 200, 255, 246, 254],
[240, 177, 193, 250, 200, 255, 246, 254],
[241, 178, 194, 250, 201, 255, 246, 254],
[241, 178, 194, 250, 201, 255, 246, 254],
[242, 179, 195, 250, 202, 255, 246, 254],
[242, 180, 195, 250, 202, 255, 246, 254],
[242, 181, 196, 250, 203, 255, 247, 254],
[242, 181, 196, 250, 203, 255, 247, 254],
[243, 182, 197, 251, 204, 255, 247, 254],
[243, 183, 197, 251, 204, 255, 247, 254],
[244, 184, 198, 251, 205, 255, 247, 254],
[244, 184, 198, 251, 205, 255, 247, 254],
[244, 185, 199, 251, 206, 255, 247, 254],
[244, 185, 199, 251, 206, 255, 247, 254],
[245, 186, 200, 251, 207, 255, 247, 254],
[245, 187, 200, 251, 207, 255, 247, 254],
[246, 188, 201, 252, 207, 255, 248, 254],
[246, 188, 201, 252, 207, 255, 248, 254],
[246, 189, 202, 252, 208, 255, 248, 254],
[246, 190, 202, 252, 208, 255, 248, 254],
[247, 191, 203, 252, 209, 255, 248, 254],
[247, 191, 203, 252, 209, 255, 248, 254],
[247, 192, 204, 252, 210, 255, 248, 254],
[247, 193, 204, 252, 210, 255, 248, 254],
[248, 194, 205, 252, 211, 255, 248, 254],
[248, 194, 205, 252, 211, 255, 248, 254],
[248, 195, 206, 252, 212, 255, 249, 254],
[248, 196, 206, 252, 212, 255, 249, 254],
[249, 197, 207, 253, 213, 255, 249, 254],
[249, 197, 207, 253, 213, 255, 249, 254],
[249, 198, 208, 253, 214, 255, 249, 254],
[249, 199, 209, 253, 214, 255, 249, 254],
[250, 200, 210, 253, 215, 255, 249, 254],
[250, 200, 210, 253, 215, 255, 249, 254],
[250, 201, 211, 253, 215, 255, 249, 254],
[250, 202, 211, 253, 215, 255, 249, 254],
[250, 203, 212, 253, 216, 255, 249, 254],
[250, 203, 212, 253, 216, 255, 249, 254],
[251, 204, 213, 253, 217, 255, 250, 254],
[251, 205, 213, 253, 217, 255, 250, 254],
[251, 206, 214, 254, 218, 255, 250, 254],
[251, 206, 215, 254, 218, 255, 250, 254],
[252, 207, 216, 254, 219, 255, 250, 254],
[252, 208, 216, 254, 219, 255, 250, 254],
[252, 209, 217, 254, 220, 255, 250, 254],
[252, 210, 217, 254, 220, 255, 250, 254],
[252, 211, 218, 254, 221, 255, 250, 254],
[252, 212, 218, 254, 221, 255, 250, 254],
[253, 213, 219, 254, 222, 255, 250, 254],
[253, 213, 220, 254, 222, 255, 250, 254],
[253, 214, 221, 254, 223, 255, 250, 254],
[253, 215, 221, 254, 223, 255, 250, 254],
[253, 216, 222, 254, 224, 255, 251, 254],
[253, 217, 223, 254, 224, 255, 251, 254],
[253, 218, 224, 254, 225, 255, 251, 254],
[253, 219, 224, 254, 225, 255, 251, 254],
[254, 220, 225, 254, 225, 255, 251, 254],
[254, 221, 226, 254, 225, 255, 251, 254],
[254, 222, 227, 255, 226, 255, 251, 254],
[254, 223, 227, 255, 226, 255, 251, 254],
[254, 224, 228, 255, 227, 255, 251, 254],
[254, 225, 229, 255, 227, 255, 251, 254],
[254, 226, 230, 255, 228, 255, 251, 254],
[254, 227, 230, 255, 229, 255, 251, 254],
[255, 228, 231, 255, 230, 255, 251, 254],
[255, 229, 232, 255, 230, 255, 251, 254],
[255, 230, 233, 255, 231, 255, 252, 254],
[255, 231, 234, 255, 231, 255, 252, 254],
[255, 232, 235, 255, 232, 255, 252, 254],
[255, 233, 236, 255, 232, 255, 252, 254],
[255, 235, 237, 255, 233, 255, 252, 254],
[255, 236, 238, 255, 234, 255, 252, 254],
[255, 238, 240, 255, 235, 255, 252, 255],
[255, 239, 241, 255, 235, 255, 252, 254],
[255, 241, 243, 255, 236, 255, 252, 254],
[255, 243, 245, 255, 237, 255, 252, 254],
[255, 246, 247, 255, 239, 255, 253, 255]
];
internal static readonly byte[] DefaultCoefProbs4X4 =
[
// Y plane
// Intra
// Band 0
195, 29, 183, 84, 49, 136, 8, 42, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// Band 1
31, 107, 169, 35, 99, 159, 17, 82, 140, 8, 66, 114, 2, 44, 76, 1, 19, 32,
// Band 2
40, 132, 201, 29, 114, 187, 13, 91, 157, 7, 75, 127, 3, 58, 95, 1, 28, 47,
// Band 3
69, 142, 221, 42, 122, 201, 15, 91, 159, 6, 67, 121, 1, 42, 77, 1, 17, 31,
// Band 4
102, 148, 228, 67, 117, 204, 17, 82, 154, 6, 59, 114, 2, 39, 75, 1, 15, 29,
// Band 5
156, 57, 233, 119, 57, 212, 58, 48, 163, 29, 40, 124, 12, 30, 81, 3, 12, 31,
// Inter
// Band 0
191, 107, 226, 124, 117, 204, 25, 99, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// Band 1
29, 148, 210, 37, 126, 194, 8, 93, 157, 2, 68, 118, 1, 39, 69, 1, 17, 33,
// Band 2
41, 151, 213, 27, 123, 193, 3, 82, 144, 1, 58, 105, 1, 32, 60, 1, 13, 26,
// Band 3
59, 159, 220, 23, 126, 198, 4, 88, 151, 1, 66, 114, 1, 38, 71, 1, 18, 34,
// Band 4
114, 136, 232, 51, 114, 207, 11, 83, 155, 3, 56, 105, 1, 33, 65, 1, 17, 34,
// Band 5
149, 65, 234, 121, 57, 215, 61, 49, 166, 28, 36, 114, 12, 25, 76, 3, 16, 42,
// UV plane
// Intra
// Band 0
214, 49, 220, 132, 63, 188, 42, 65, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// Band 1
85, 137, 221, 104, 131, 216, 49, 111, 192, 21, 87, 155, 2, 49, 87, 1, 16, 28,
// Band 2
89, 163, 230, 90, 137, 220, 29, 100, 183, 10, 70, 135, 2, 42, 81, 1, 17, 33,
// Band 3
108, 167, 237, 55, 133, 222, 15, 97, 179, 4, 72, 135, 1, 45, 85, 1, 19, 38,
// Band 4
124, 146, 240, 66, 124, 224, 17, 88, 175, 4, 58, 122, 1, 36, 75, 1, 18, 37,
// Band 5
141, 79, 241, 126, 70, 227, 66, 58, 182, 30, 44, 136, 12, 34, 96, 2, 20, 47,
// Inter
// Band 0
229, 99, 249, 143, 111, 235, 46, 109, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// Band 1
82, 158, 236, 94, 146, 224, 25, 117, 191, 9, 87, 149, 3, 56, 99, 1, 33, 57,
// Band 2
83, 167, 237, 68, 145, 222, 10, 103, 177, 2, 72, 131, 1, 41, 79, 1, 20, 39,
// Band 3
99, 167, 239, 47, 141, 224, 10, 104, 178, 2, 73, 133, 1, 44, 85, 1, 22, 47,
// Band 4
127, 145, 243, 71, 129, 228, 17, 93, 177, 3, 61, 124, 1, 41, 84, 1, 21, 52,
// Band 5
157, 78, 244, 140, 72, 231, 69, 58, 184, 31, 44, 137, 14, 38, 105, 8, 23, 61
];
internal static readonly byte[] DefaultCoefProbs8X8 =
[
// Y plane
// Intra
// Band 0
125, 34, 187, 52, 41, 133, 6, 31, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// Band 1
37, 109, 153, 51, 102, 147, 23, 87, 128, 8, 67, 101, 1, 41, 63, 1, 19, 29,
// Band 2
31, 154, 185, 17, 127, 175, 6, 96, 145, 2, 73, 114, 1, 51, 82, 1, 28, 45,
// Band 3
23, 163, 200, 10, 131, 185, 2, 93, 148, 1, 67, 111, 1, 41, 69, 1, 14, 24,
// Band 4
29, 176, 217, 12, 145, 201, 3, 101, 156, 1, 69, 111, 1, 39, 63, 1, 14, 23,
// Band 5
57, 192, 233, 25, 154, 215, 6, 109, 167, 3, 78, 118, 1, 48, 69, 1, 21, 29,
// Inter
// Band 0
202, 105, 245, 108, 106, 216, 18, 90, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// Band 1
33, 172, 219, 64, 149, 206, 14, 117, 177, 5, 90, 141, 2, 61, 95, 1, 37, 57,
// Band 2
33, 179, 220, 11, 140, 198, 1, 89, 148, 1, 60, 104, 1, 33, 57, 1, 12, 21,
// Band 3
30, 181, 221, 8, 141, 198, 1, 87, 145, 1, 58, 100, 1, 31, 55, 1, 12, 20,
// Band 4
32, 186, 224, 7, 142, 198, 1, 86, 143, 1, 58, 100, 1, 31, 55, 1, 12, 22,
// Band 5
57, 192, 227, 20, 143, 204, 3, 96, 154, 1, 68, 112, 1, 42, 69, 1, 19, 32,
// UV plane
// Intra
// Band 0
212, 35, 215, 113, 47, 169, 29, 48, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// Band 1
74, 129, 203, 106, 120, 203, 49, 107, 178, 19, 84, 144, 4, 50, 84, 1, 15, 25,
// Band 2
71, 172, 217, 44, 141, 209, 15, 102, 173, 6, 76, 133, 2, 51, 89, 1, 24, 42,
// Band 3
64, 185, 231, 31, 148, 216, 8, 103, 175, 3, 74, 131, 1, 46, 81, 1, 18, 30,
// Band 4
65, 196, 235, 25, 157, 221, 5, 105, 174, 1, 67, 120, 1, 38, 69, 1, 15, 30,
// Band 5
65, 204, 238, 30, 156, 224, 7, 107, 177, 2, 70, 124, 1, 42, 73, 1, 18, 34,
// Inter
// Band 0
225, 86, 251, 144, 104, 235, 42, 99, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// Band 1
85, 175, 239, 112, 165, 229, 29, 136, 200, 12, 103, 162, 6, 77, 123, 2, 53, 84,
// Band 2
75, 183, 239, 30, 155, 221, 3, 106, 171, 1, 74, 128, 1, 44, 76, 1, 17, 28,
// Band 3
73, 185, 240, 27, 159, 222, 2, 107, 172, 1, 75, 127, 1, 42, 73, 1, 17, 29,
// Band 4
62, 190, 238, 21, 159, 222, 2, 107, 172, 1, 72, 122, 1, 40, 71, 1, 18, 32,
// Band 5
61, 199, 240, 27, 161, 226, 4, 113, 180, 1, 76, 129, 1, 46, 80, 1, 23, 41
];
internal static readonly byte[] DefaultCoefProbs16X16 =
[
// Y plane
// Intra
// Band 0
7, 27, 153, 5, 30, 95, 1, 16, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// Band 1
50, 75, 127, 57, 75, 124, 27, 67, 108, 10, 54, 86, 1, 33, 52, 1, 12, 18,
// Band 2
43, 125, 151, 26, 108, 148, 7, 83, 122, 2, 59, 89, 1, 38, 60, 1, 17, 27,
// Band 3
23, 144, 163, 13, 112, 154, 2, 75, 117, 1, 50, 81, 1, 31, 51, 1, 14, 23,
// Band 4
18, 162, 185, 6, 123, 171, 1, 78, 125, 1, 51, 86, 1, 31, 54, 1, 14, 23,
// Band 5
15, 199, 227, 3, 150, 204, 1, 91, 146, 1, 55, 95, 1, 30, 53, 1, 11, 20,
// Inter
// Band 0
19, 55, 240, 19, 59, 196, 3, 52, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// Band 1
41, 166, 207, 104, 153, 199, 31, 123, 181, 14, 101, 152, 5, 72, 106, 1, 36, 52,
// Band 2
35, 176, 211, 12, 131, 190, 2, 88, 144, 1, 60, 101, 1, 36, 60, 1, 16, 28,
// Band 3
28, 183, 213, 8, 134, 191, 1, 86, 142, 1, 56, 96, 1, 30, 53, 1, 12, 20,
// Band 4
20, 190, 215, 4, 135, 192, 1, 84, 139, 1, 53, 91, 1, 28, 49, 1, 11, 20,
// Band 5
13, 196, 216, 2, 137, 192, 1, 86, 143, 1, 57, 99, 1, 32, 56, 1, 13, 24,
// UV plane
// Intra
// Band 0
211, 29, 217, 96, 47, 156, 22, 43, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// Band 1
78, 120, 193, 111, 116, 186, 46, 102, 164, 15, 80, 128, 2, 49, 76, 1, 18, 28,
// Band 2
71, 161, 203, 42, 132, 192, 10, 98, 150, 3, 69, 109, 1, 44, 70, 1, 18, 29,
// Band 3
57, 186, 211, 30, 140, 196, 4, 93, 146, 1, 62, 102, 1, 38, 65, 1, 16, 27,
// Band 4
47, 199, 217, 14, 145, 196, 1, 88, 142, 1, 57, 98, 1, 36, 62, 1, 15, 26,
// Band 5
26, 219, 229, 5, 155, 207, 1, 94, 151, 1, 60, 104, 1, 36, 62, 1, 16, 28,
// Inter
// Band 0
233, 29, 248, 146, 47, 220, 43, 52, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// Band 1
100, 163, 232, 179, 161, 222, 63, 142, 204, 37, 113, 174, 26, 89, 137, 18, 68, 97,
// Band 2
85, 181, 230, 32, 146, 209, 7, 100, 164, 3, 71, 121, 1, 45, 77, 1, 18, 30,
// Band 3
65, 187, 230, 20, 148, 207, 2, 97, 159, 1, 68, 116, 1, 40, 70, 1, 14, 29,
// Band 4
40, 194, 227, 8, 147, 204, 1, 94, 155, 1, 65, 112, 1, 39, 66, 1, 14, 26,
// Band 5
16, 208, 228, 3, 151, 207, 1, 98, 160, 1, 67, 117, 1, 41, 74, 1, 17, 31
];
internal static readonly byte[] DefaultCoefProbs32X32 =
[
// Y plane
// Intra
// Band 0
17, 38, 140, 7, 34, 80, 1, 17, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// Band 1
37, 75, 128, 41, 76, 128, 26, 66, 116, 12, 52, 94, 2, 32, 55, 1, 10, 16,
// Band 2
50, 127, 154, 37, 109, 152, 16, 82, 121, 5, 59, 85, 1, 35, 54, 1, 13, 20,
// Band 3
40, 142, 167, 17, 110, 157, 2, 71, 112, 1, 44, 72, 1, 27, 45, 1, 11, 17,
// Band 4
30, 175, 188, 9, 124, 169, 1, 74, 116, 1, 48, 78, 1, 30, 49, 1, 11, 18,
// Band 5
10, 222, 223, 2, 150, 194, 1, 83, 128, 1, 48, 79, 1, 27, 45, 1, 11, 17,
// Inter
// Band 0
36, 41, 235, 29, 36, 193, 10, 27, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// Band 1
85, 165, 222, 177, 162, 215, 110, 135, 195, 57, 113, 168, 23, 83, 120, 10, 49, 61,
// Band 2
85, 190, 223, 36, 139, 200, 5, 90, 146, 1, 60, 103, 1, 38, 65, 1, 18, 30,
// Band 3
72, 202, 223, 23, 141, 199, 2, 86, 140, 1, 56, 97, 1, 36, 61, 1, 16, 27,
// Band 4
55, 218, 225, 13, 145, 200, 1, 86, 141, 1, 57, 99, 1, 35, 61, 1, 13, 22,
// Band 5
15, 235, 212, 1, 132, 184, 1, 84, 139, 1, 57, 97, 1, 34, 56, 1, 14, 23,
// UV plane
// Intra
// Band 0
181, 21, 201, 61, 37, 123, 10, 38, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// Band 1
47, 106, 172, 95, 104, 173, 42, 93, 159, 18, 77, 131, 4, 50, 81, 1, 17, 23,
// Band 2
62, 147, 199, 44, 130, 189, 28, 102, 154, 18, 75, 115, 2, 44, 65, 1, 12, 19,
// Band 3
55, 153, 210, 24, 130, 194, 3, 93, 146, 1, 61, 97, 1, 31, 50, 1, 10, 16,
// Band 4
49, 186, 223, 17, 148, 204, 1, 96, 142, 1, 53, 83, 1, 26, 44, 1, 11, 17,
// Band 5
13, 217, 212, 2, 136, 180, 1, 78, 124, 1, 50, 83, 1, 29, 49, 1, 14, 23,
// Inter
// Band 0
197, 13, 247, 82, 17, 222, 25, 17, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// Band 1
126, 186, 247, 234, 191, 243, 176, 177, 234, 104, 158, 220, 66, 128, 186, 55, 90, 137,
// Band 2
111, 197, 242, 46, 158, 219, 9, 104, 171, 2, 65, 125, 1, 44, 80, 1, 17, 91,
// Band 3
104, 208, 245, 39, 168, 224, 3, 109, 162, 1, 79, 124, 1, 50, 102, 1, 43, 102,
// Band 4
84, 220, 246, 31, 177, 231, 2, 115, 180, 1, 79, 134, 1, 55, 77, 1, 60, 79,
// Band 5
43, 243, 240, 8, 180, 217, 1, 115, 166, 1, 84, 121, 1, 51, 67, 1, 16, 6
];
public static byte[] GetBandTranslate(int txSize)
{
return txSize == (int)TxSize.Tx4X4 ? _coefbandTrans4X4 : _coefbandTrans8X8Plus;
}
public static void CopyProbs<T>(ref T dest, ReadOnlySpan<byte> probs) where T : unmanaged
{
if (Unsafe.SizeOf<T>() != probs.Length)
{
throw new Exception("size mismatch expected: " + probs.Length + " got: " + Unsafe.SizeOf<T>());
}
probs.CopyTo(MemoryMarshal.Cast<T, byte>(MemoryMarshal.CreateSpan(ref dest, 1)));
}
internal const int CoefCountSat = 24;
internal const int CoefMaxUpdateFactor = 112;
internal const int CoefCountSatKey = 24;
internal const int CoefMaxUpdateFactorKey = 112;
internal const int CoefCountSatAfterKey = 24;
internal const int CoefMaxUpdateFactorAfterKey = 128;
}
}