Constants.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. using Ryujinx.Graphics.Nvdec.Vp9.Types;
  2. namespace Ryujinx.Graphics.Nvdec.Vp9
  3. {
  4. internal static class Constants
  5. {
  6. public const int InterpExtend = 4;
  7. public const int MaxMbPlane = 3;
  8. public const int None = -1;
  9. public const int IntraFrame = 0;
  10. public const int LastFrame = 1;
  11. public const int GoldenFrame = 2;
  12. public const int AltRefFrame = 3;
  13. public const int MaxRefFrames = 4;
  14. public const int MiSizeLog2 = 3;
  15. public const int MiBlockSizeLog2 = 6 - MiSizeLog2; // 64 = 2^6
  16. public const int MiSize = 1 << MiSizeLog2; // pixels per mi-unit
  17. public const int MiBlockSize = 1 << MiBlockSizeLog2; // mi-units per max block
  18. public const int MiMask = MiBlockSize - 1;
  19. public const int PartitionPloffset = 4; // number of probability models per block size
  20. /* Segment Feature Masks */
  21. public const int MaxMvRefCandidates = 2;
  22. public const int IntraInterContexts = 4;
  23. public const int CompInterContexts = 5;
  24. public const int RefContexts = 5;
  25. public const int EightTap = 0;
  26. public const int EightTapSmooth = 1;
  27. public const int EightTapSharp = 2;
  28. public const int SwitchableFilters = 3; /* Number of switchable filters */
  29. public const int Bilinear = 3;
  30. // The codec can operate in four possible inter prediction filter mode:
  31. // 8-tap, 8-tap-smooth, 8-tap-sharp, and switching between the three.
  32. public const int SwitchableFilterContexts = SwitchableFilters + 1;
  33. public const int Switchable = 4; /* Should be the last one */
  34. // Frame
  35. public const int RefsPerFrame = 3;
  36. public const int RefFramesLog2 = 3;
  37. public const int RefFrames = 1 << RefFramesLog2;
  38. // 1 scratch frame for the new frame, 3 for scaled references on the encoder.
  39. public const int FrameBuffers = RefFrames + 4;
  40. public const int FrameContextsLog2 = 2;
  41. public const int FrameContexts = 1 << FrameContextsLog2;
  42. public const int NumPingPongBuffers = 2;
  43. public const int Class0Bits = 1; /* bits at integer precision for class 0 */
  44. public const int Class0Size = 1 << Class0Bits;
  45. public const int MvInUseBits = 14;
  46. public const int MvUpp = (1 << MvInUseBits) - 1;
  47. public const int MvLow = -(1 << MvInUseBits);
  48. // Coefficient token alphabet
  49. public const int ZeroToken = 0; // 0 Extra Bits 0+0
  50. public const int OneToken = 1; // 1 Extra Bits 0+1
  51. public const int TwoToken = 2; // 2 Extra Bits 0+1
  52. public const int PivotNode = 2;
  53. public const int Cat1MinVal = 5;
  54. public const int Cat2MinVal = 7;
  55. public const int Cat3MinVal = 11;
  56. public const int Cat4MinVal = 19;
  57. public const int Cat5MinVal = 35;
  58. public const int Cat6MinVal = 67;
  59. public const int EobModelToken = 3;
  60. public const int SegmentAbsData = 1;
  61. public const int MaxSegments = 8;
  62. public const int PartitionTypes = (int)PartitionType.PartitionTypes;
  63. public const int PartitionPlOffset = 4; // Number of probability models per block size
  64. public const int PartitionContexts = 4 * PartitionPlOffset;
  65. public const int PlaneTypes = (int)PlaneType.PlaneTypes;
  66. public const int IntraModes = (int)PredictionMode.TmPred + 1;
  67. public const int InterModes = 1 + (int)PredictionMode.NewMv - (int)PredictionMode.NearestMv;
  68. public const int SkipContexts = 3;
  69. public const int InterModeContexts = 7;
  70. }
  71. }