aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Nvdec/Types/Vp9/PictureInfo.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Graphics.Nvdec/Types/Vp9/PictureInfo.cs')
-rw-r--r--Ryujinx.Graphics.Nvdec/Types/Vp9/PictureInfo.cs85
1 files changed, 85 insertions, 0 deletions
diff --git a/Ryujinx.Graphics.Nvdec/Types/Vp9/PictureInfo.cs b/Ryujinx.Graphics.Nvdec/Types/Vp9/PictureInfo.cs
new file mode 100644
index 00000000..f1f9e2f1
--- /dev/null
+++ b/Ryujinx.Graphics.Nvdec/Types/Vp9/PictureInfo.cs
@@ -0,0 +1,85 @@
+using Ryujinx.Common.Memory;
+using Ryujinx.Graphics.Video;
+
+namespace Ryujinx.Graphics.Nvdec.Types.Vp9
+{
+ struct PictureInfo
+ {
+ public Array12<uint> Unknown0;
+ public uint BitstreamSize;
+ public uint IsEncrypted;
+ public uint Unknown38;
+ public uint Reserved3C;
+ public uint BlockLayout; // Not supported on T210
+ public uint WorkBufferSizeShr8;
+ public FrameSize LastFrameSize;
+ public FrameSize GoldenFrameSize;
+ public FrameSize AltFrameSize;
+ public FrameSize CurrentFrameSize;
+ public FrameFlags Flags;
+ public Array4<sbyte> RefFrameSignBias;
+ public byte FirstLevel;
+ public byte SharpnessLevel;
+ public byte BaseQIndex;
+ public byte YDcDeltaQ;
+ public byte UvAcDeltaQ;
+ public byte UvDcDeltaQ;
+ public byte Lossless;
+ public byte TxMode;
+ public byte AllowHighPrecisionMv;
+ public byte InterpFilter;
+ public byte ReferenceMode;
+ public sbyte CompFixedRef;
+ public Array2<sbyte> CompVarRef;
+ public byte Log2TileCols;
+ public byte Log2TileRows;
+ public Segmentation Seg;
+ public LoopFilter Lf;
+ public byte PaddingEB;
+ public uint WorkBufferSizeShr8New; // Not supported on T210
+ public uint SurfaceParams; // Not supported on T210
+ public uint UnknownF4;
+ public uint UnknownF8;
+ public uint UnknownFC;
+
+ public uint BitDepth => (SurfaceParams >> 1) & 0xf;
+
+ public Vp9PictureInfo Convert()
+ {
+ return new Vp9PictureInfo()
+ {
+ IsKeyFrame = Flags.HasFlag(FrameFlags.IsKeyFrame),
+ IntraOnly = Flags.HasFlag(FrameFlags.IntraOnly),
+ UsePrevInFindMvRefs =
+ !Flags.HasFlag(FrameFlags.ErrorResilientMode) &&
+ !Flags.HasFlag(FrameFlags.FrameSizeChanged) &&
+ !Flags.HasFlag(FrameFlags.IntraOnly) &&
+ Flags.HasFlag(FrameFlags.LastShowFrame) &&
+ !Flags.HasFlag(FrameFlags.LastFrameIsKeyFrame),
+ RefFrameSignBias = RefFrameSignBias,
+ BaseQIndex = BaseQIndex,
+ YDcDeltaQ = YDcDeltaQ,
+ UvDcDeltaQ = UvDcDeltaQ,
+ UvAcDeltaQ = UvAcDeltaQ,
+ Lossless = Lossless != 0,
+ TransformMode = TxMode,
+ AllowHighPrecisionMv = AllowHighPrecisionMv != 0,
+ InterpFilter = InterpFilter,
+ ReferenceMode = ReferenceMode,
+ CompFixedRef = CompFixedRef,
+ CompVarRef = CompVarRef,
+ Log2TileCols = Log2TileCols,
+ Log2TileRows = Log2TileRows,
+ SegmentEnabled = Seg.Enabled != 0,
+ SegmentMapUpdate = Seg.UpdateMap != 0,
+ SegmentMapTemporalUpdate = Seg.TemporalUpdate != 0,
+ SegmentAbsDelta = Seg.AbsDelta,
+ SegmentFeatureEnable = Seg.FeatureMask,
+ SegmentFeatureData = Seg.FeatureData,
+ ModeRefDeltaEnabled = Lf.ModeRefDeltaEnabled != 0,
+ RefDeltas = Lf.RefDeltas,
+ ModeDeltas = Lf.ModeDeltas
+ };
+ }
+ }
+}