PictureInfo.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using Ryujinx.Common.Memory;
  2. using Ryujinx.Graphics.Video;
  3. namespace Ryujinx.Graphics.Nvdec.Types.Vp9
  4. {
  5. struct PictureInfo
  6. {
  7. #pragma warning disable CS0649
  8. public Array12<uint> Unknown0;
  9. public uint BitstreamSize;
  10. public uint IsEncrypted;
  11. public uint Unknown38;
  12. public uint Reserved3C;
  13. public uint BlockLayout; // Not supported on T210
  14. public uint WorkBufferSizeShr8;
  15. public FrameSize LastFrameSize;
  16. public FrameSize GoldenFrameSize;
  17. public FrameSize AltFrameSize;
  18. public FrameSize CurrentFrameSize;
  19. public FrameFlags Flags;
  20. public Array4<sbyte> RefFrameSignBias;
  21. public byte FirstLevel;
  22. public byte SharpnessLevel;
  23. public byte BaseQIndex;
  24. public byte YDcDeltaQ;
  25. public byte UvAcDeltaQ;
  26. public byte UvDcDeltaQ;
  27. public byte Lossless;
  28. public byte TxMode;
  29. public byte AllowHighPrecisionMv;
  30. public byte InterpFilter;
  31. public byte ReferenceMode;
  32. public sbyte CompFixedRef;
  33. public Array2<sbyte> CompVarRef;
  34. public byte Log2TileCols;
  35. public byte Log2TileRows;
  36. public Segmentation Seg;
  37. public LoopFilter Lf;
  38. public byte PaddingEB;
  39. public uint WorkBufferSizeShr8New; // Not supported on T210
  40. public uint SurfaceParams; // Not supported on T210
  41. public uint UnknownF4;
  42. public uint UnknownF8;
  43. public uint UnknownFC;
  44. #pragma warning restore CS0649
  45. public uint BitDepth => (SurfaceParams >> 1) & 0xf;
  46. public Vp9PictureInfo Convert()
  47. {
  48. return new Vp9PictureInfo()
  49. {
  50. IsKeyFrame = Flags.HasFlag(FrameFlags.IsKeyFrame),
  51. IntraOnly = Flags.HasFlag(FrameFlags.IntraOnly),
  52. UsePrevInFindMvRefs =
  53. !Flags.HasFlag(FrameFlags.ErrorResilientMode) &&
  54. !Flags.HasFlag(FrameFlags.FrameSizeChanged) &&
  55. !Flags.HasFlag(FrameFlags.IntraOnly) &&
  56. Flags.HasFlag(FrameFlags.LastShowFrame) &&
  57. !Flags.HasFlag(FrameFlags.LastFrameIsKeyFrame),
  58. RefFrameSignBias = RefFrameSignBias,
  59. BaseQIndex = BaseQIndex,
  60. YDcDeltaQ = YDcDeltaQ,
  61. UvDcDeltaQ = UvDcDeltaQ,
  62. UvAcDeltaQ = UvAcDeltaQ,
  63. Lossless = Lossless != 0,
  64. TransformMode = TxMode,
  65. AllowHighPrecisionMv = AllowHighPrecisionMv != 0,
  66. InterpFilter = InterpFilter,
  67. ReferenceMode = ReferenceMode,
  68. CompFixedRef = CompFixedRef,
  69. CompVarRef = CompVarRef,
  70. Log2TileCols = Log2TileCols,
  71. Log2TileRows = Log2TileRows,
  72. SegmentEnabled = Seg.Enabled != 0,
  73. SegmentMapUpdate = Seg.UpdateMap != 0,
  74. SegmentMapTemporalUpdate = Seg.TemporalUpdate != 0,
  75. SegmentAbsDelta = Seg.AbsDelta,
  76. SegmentFeatureEnable = Seg.FeatureMask,
  77. SegmentFeatureData = Seg.FeatureData,
  78. ModeRefDeltaEnabled = Lf.ModeRefDeltaEnabled != 0,
  79. RefDeltas = Lf.RefDeltas,
  80. ModeDeltas = Lf.ModeDeltas
  81. };
  82. }
  83. }
  84. }