aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Nvdec/Types
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2021-09-28 19:43:40 -0300
committerGitHub <noreply@github.com>2021-09-29 00:43:40 +0200
commitf4f496cb48a59aae36e3252baa90396e1bfadd2e (patch)
tree5594d76b3f1b552f1fecdeda37bd2f6667781a56 /Ryujinx.Graphics.Nvdec/Types
parent0d23504e30395ba20d1704da464b41f3fe539062 (diff)
NVDEC (H264): Use separate contexts per channel and decode frames in DTS order (#2671)
* Use separate NVDEC contexts per channel (for FFMPEG) * Remove NVDEC -> VIC frame override hack * Add missing bottom_field_pic_order_in_frame_present_flag * Make FFMPEG logging static * nit: Remove empty lines * New FFMPEG decoding approach -- call h264_decode_frame directly, trim surface cache to reduce memory usage * Fix case * Silence warnings * PR feedback * Per-decoder rather than per-codec ownership of surfaces on the cache
Diffstat (limited to 'Ryujinx.Graphics.Nvdec/Types')
-rw-r--r--Ryujinx.Graphics.Nvdec/Types/H264/PictureInfo.cs18
-rw-r--r--Ryujinx.Graphics.Nvdec/Types/H264/ReferenceFrame.cs13
-rw-r--r--Ryujinx.Graphics.Nvdec/Types/Vp9/FrameStats.cs1
3 files changed, 17 insertions, 15 deletions
diff --git a/Ryujinx.Graphics.Nvdec/Types/H264/PictureInfo.cs b/Ryujinx.Graphics.Nvdec/Types/H264/PictureInfo.cs
index 86570342..326c40ae 100644
--- a/Ryujinx.Graphics.Nvdec/Types/H264/PictureInfo.cs
+++ b/Ryujinx.Graphics.Nvdec/Types/H264/PictureInfo.cs
@@ -26,13 +26,13 @@ namespace Ryujinx.Graphics.Nvdec.Types.H264
public uint Transform8x8ModeFlag;
public uint LumaPitch;
public uint ChromaPitch;
- public uint Unknown94;
- public uint LumaSecondFieldOffset;
- public uint Unknown9C;
- public uint UnknownA0;
- public uint ChromaSecondFieldOffset;
- public uint UnknownA8;
- public uint UnknownAC;
+ public uint LumaTopOffset;
+ public uint LumaBottomOffset;
+ public uint LumaFrameOffset;
+ public uint ChromaTopOffset;
+ public uint ChromaBottomFieldOffset;
+ public uint ChromaFrameOffset;
+ public uint HistBufferSize;
public ulong Flags;
public Array2<int> FieldOrderCnt;
public Array16<ReferenceFrame> RefFrames;
@@ -64,8 +64,8 @@ namespace Ryujinx.Graphics.Nvdec.Types.H264
public int ChromaQpIndexOffset => ExtractSx(Flags, 22, 5);
public int SecondChromaQpIndexOffset => ExtractSx(Flags, 27, 5);
public uint WeightedBipredIdc => (uint)(Flags >> 32) & 3;
- public uint LumaOutputSurfaceIndex => (uint)(Flags >> 34) & 0x7f;
- public uint ChromaOutputSurfaceIndex => (uint)(Flags >> 41) & 0x1f;
+ public uint OutputSurfaceIndex => (uint)(Flags >> 34) & 0x7f;
+ public uint ColIndex => (uint)(Flags >> 41) & 0x1f;
public ushort FrameNum => (ushort)(Flags >> 46);
public bool QpprimeYZeroTransformBypassFlag => (Flags2 & (1 << 1)) != 0;
diff --git a/Ryujinx.Graphics.Nvdec/Types/H264/ReferenceFrame.cs b/Ryujinx.Graphics.Nvdec/Types/H264/ReferenceFrame.cs
index 163a8783..d205a47a 100644
--- a/Ryujinx.Graphics.Nvdec/Types/H264/ReferenceFrame.cs
+++ b/Ryujinx.Graphics.Nvdec/Types/H264/ReferenceFrame.cs
@@ -1,12 +1,15 @@
-namespace Ryujinx.Graphics.Nvdec.Types.H264
+using Ryujinx.Common.Memory;
+
+namespace Ryujinx.Graphics.Nvdec.Types.H264
{
struct ReferenceFrame
{
#pragma warning disable CS0649
- public uint Unknown0;
- public uint Unknown4;
- public uint Unknown8;
- public uint UnknownC;
+ public uint Flags;
+ public Array2<uint> FieldOrderCnt;
+ public uint FrameNum;
#pragma warning restore CS0649
+
+ public uint OutputSurfaceIndex => (uint)Flags & 0x7f;
}
}
diff --git a/Ryujinx.Graphics.Nvdec/Types/Vp9/FrameStats.cs b/Ryujinx.Graphics.Nvdec/Types/Vp9/FrameStats.cs
index c360d378..26aab506 100644
--- a/Ryujinx.Graphics.Nvdec/Types/Vp9/FrameStats.cs
+++ b/Ryujinx.Graphics.Nvdec/Types/Vp9/FrameStats.cs
@@ -16,7 +16,6 @@
public uint FrameStatusBwdMvyCnt;
public uint ErrorCtbPos;
public uint ErrorSlicePos;
- public uint Unknown34;
#pragma warning restore CS0649
}
}