NVDEC implementation using FFmpeg (#443)
* Initial nvdec implementation using FFmpeg * Fix swapped channels on the video decoder and the G8R8 texture format * Fix texture samplers not being set properly (regression) * Rebased * Remove unused code introduced on the rebase * Add support for RGBA8 output format on the video image composer * Correct spacing * Some fixes for rebase and other tweaks * Allow size mismatch on frame copy * Get rid of GetHostAddress calls on VDec
This commit is contained in:
parent
ad00fd0244
commit
c86aacde76
65 changed files with 2795 additions and 76 deletions
69
Ryujinx.Graphics/Vic/StructUnpacker.cs
Normal file
69
Ryujinx.Graphics/Vic/StructUnpacker.cs
Normal file
|
@ -0,0 +1,69 @@
|
|||
using Ryujinx.Graphics.Memory;
|
||||
using System;
|
||||
|
||||
namespace Ryujinx.Graphics.Vic
|
||||
{
|
||||
class StructUnpacker
|
||||
{
|
||||
private NvGpuVmm Vmm;
|
||||
|
||||
private long Position;
|
||||
|
||||
private ulong Buffer;
|
||||
private int BuffPos;
|
||||
|
||||
public StructUnpacker(NvGpuVmm Vmm, long Position)
|
||||
{
|
||||
this.Vmm = Vmm;
|
||||
this.Position = Position;
|
||||
|
||||
BuffPos = 64;
|
||||
}
|
||||
|
||||
public int Read(int Bits)
|
||||
{
|
||||
if ((uint)Bits > 32)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException(nameof(Bits));
|
||||
}
|
||||
|
||||
int Value = 0;
|
||||
|
||||
while (Bits > 0)
|
||||
{
|
||||
RefillBufferIfNeeded();
|
||||
|
||||
int ReadBits = Bits;
|
||||
|
||||
int MaxReadBits = 64 - BuffPos;
|
||||
|
||||
if (ReadBits > MaxReadBits)
|
||||
{
|
||||
ReadBits = MaxReadBits;
|
||||
}
|
||||
|
||||
Value <<= ReadBits;
|
||||
|
||||
Value |= (int)(Buffer >> BuffPos) & (int)(0xffffffff >> (32 - ReadBits));
|
||||
|
||||
BuffPos += ReadBits;
|
||||
|
||||
Bits -= ReadBits;
|
||||
}
|
||||
|
||||
return Value;
|
||||
}
|
||||
|
||||
private void RefillBufferIfNeeded()
|
||||
{
|
||||
if (BuffPos >= 64)
|
||||
{
|
||||
Buffer = Vmm.ReadUInt64(Position);
|
||||
|
||||
Position += 8;
|
||||
|
||||
BuffPos = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue