diff options
| author | gdkchan <gab.dark.100@gmail.com> | 2021-09-28 19:43:40 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-09-29 00:43:40 +0200 |
| commit | f4f496cb48a59aae36e3252baa90396e1bfadd2e (patch) | |
| tree | 5594d76b3f1b552f1fecdeda37bd2f6667781a56 /Ryujinx.Graphics.Nvdec/Types | |
| parent | 0d23504e30395ba20d1704da464b41f3fe539062 (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.cs | 18 | ||||
| -rw-r--r-- | Ryujinx.Graphics.Nvdec/Types/H264/ReferenceFrame.cs | 13 | ||||
| -rw-r--r-- | Ryujinx.Graphics.Nvdec/Types/Vp9/FrameStats.cs | 1 |
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 } } |
