aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Nvdec/Types
diff options
context:
space:
mode:
authorAc_K <Acoustik666@gmail.com>2021-10-12 22:55:57 +0200
committerGitHub <noreply@github.com>2021-10-12 22:55:57 +0200
commitd1604aa762a3f669a3fecff0a30b7360399954bc (patch)
tree1996eec4b3937354aedc4d31b5b7b931ae4e321b /Ryujinx.Graphics.Nvdec/Types
parenta7109c767bdc014327b574012794156c92174495 (diff)
nvdec: Adding Vp8 codec support (#2707)
* first try * second try * working update * Final impl * Fixes nits * Fix everything * remove leftover * Update FFmpegContext.cs * Update Surface.cs * Addresses gdkchan feedback * bool not byte * Addresses gdkchan feedback
Diffstat (limited to 'Ryujinx.Graphics.Nvdec/Types')
-rw-r--r--Ryujinx.Graphics.Nvdec/Types/Vp8/PictureInfo.cs75
1 files changed, 75 insertions, 0 deletions
diff --git a/Ryujinx.Graphics.Nvdec/Types/Vp8/PictureInfo.cs b/Ryujinx.Graphics.Nvdec/Types/Vp8/PictureInfo.cs
new file mode 100644
index 00000000..844f2103
--- /dev/null
+++ b/Ryujinx.Graphics.Nvdec/Types/Vp8/PictureInfo.cs
@@ -0,0 +1,75 @@
+using Ryujinx.Common.Memory;
+using Ryujinx.Graphics.Video;
+
+namespace Ryujinx.Graphics.Nvdec.Types.Vp8
+{
+ struct PictureInfo
+ {
+#pragma warning disable CS0649
+ public Array13<uint> Unknown0;
+ public uint GpTimerTimeoutValue;
+ public ushort FrameWidth;
+ public ushort FrameHeight;
+ public byte KeyFrame; // 1: key frame - 0: not
+ public byte Version;
+ public byte Flags0;
+ // TileFormat : 2 // 0: TBL; 1: KBL;
+ // GobHeight : 3 // Set GOB height, 0: GOB_2, 1: GOB_4, 2: GOB_8, 3: GOB_16, 4: GOB_32 (NVDEC3 onwards)
+ // ReserverdSurfaceFormat : 3
+ public byte ErrorConcealOn; // 1: error conceal on - 0: off
+ public uint FirstPartSize; // the size of first partition (frame header and mb header partition)
+ public uint HistBufferSize; // in units of 256
+ public uint VLDBufferSize; // in units of 1
+ public Array2<uint> FrameStride; // [y_c]
+ public uint LumaTopOffset; // offset of luma top field in units of 256
+ public uint LumaBotOffset; // offset of luma bottom field in units of 256
+ public uint LumaFrameOffset; // offset of luma frame in units of 256
+ public uint ChromaTopOffset; // offset of chroma top field in units of 256
+ public uint ChromaBotOffset; // offset of chroma bottom field in units of 256
+ public uint ChromaFrameOffset; // offset of chroma frame in units of 256
+ public uint Flags1;
+ // EnableTFOutput : 1; // =1, enable dbfdma to output the display surface; if disable, then the following configure on tf is useless.
+ // Remap for VC1
+ // VC1MapYFlag : 1
+ // MapYValue : 3
+ // VC1MapUVFlag : 1
+ // MapUVValue : 3
+ // TF
+ // OutStride : 8
+ // TilingFormat : 3;
+ // OutputStructure : 1 // 0:frame, 1:field
+ // Reserved0 : 11
+ public Array2<int> OutputTop; // in units of 256
+ public Array2<int> OutputBottom; // in units of 256
+ // Histogram
+ public uint Flags2;
+ // EnableHistogram : 1 // enable histogram info collection
+ // HistogramStartX : 12 // start X of Histogram window
+ // HistogramStartY : 12 // start Y of Histogram window
+ // Reserved1 : 7
+ // HistogramEndX : 12 // end X of Histogram window
+ // HistogramEndY : 12 // end y of Histogram window
+ // Reserved2 : 8
+ // Decode picture buffer related
+ public sbyte CurrentOutputMemoryLayout;
+ public Array3<sbyte> OutputMemoryLayout; // output NV12/NV24 setting. item 0:golden - 1: altref - 2: last
+ public byte SegmentationFeatureDataUpdate;
+ public Array3<byte> Reserved3;
+ public uint ResultValue; // ucode return result
+ public Array8<uint> PartitionOffset;
+ public Array3<uint> Reserved4;
+#pragma warning restore CS0649
+
+ public Vp8PictureInfo Convert()
+ {
+ return new Vp8PictureInfo()
+ {
+ KeyFrame = KeyFrame != 0,
+ FirstPartSize = FirstPartSize,
+ Version = Version,
+ FrameWidth = FrameWidth,
+ FrameHeight = FrameHeight
+ };
+ }
+ }
+}