R/Ryujinx.Graphics.Vic/Image/InputSurface.cs
gdkchan 1402d8391d
Support NVDEC H264 interlaced video decoding and VIC deinterlacing (#3225)
* Support NVDEC H264 interlaced video decoding and VIC deinterlacing

* Remove unused code
2022-03-23 17:09:32 -03:00

86 lines
1.9 KiB
C#

using System;
namespace Ryujinx.Graphics.Vic.Image
{
ref struct RentedBuffer
{
public static RentedBuffer Empty => new RentedBuffer(Span<byte>.Empty, -1);
public Span<byte> Data;
public int Index;
public RentedBuffer(Span<byte> data, int index)
{
Data = data;
Index = index;
}
public void Return(BufferPool<byte> pool)
{
if (Index != -1)
{
pool.Return(Index);
}
}
}
ref struct InputSurface
{
public ReadOnlySpan<byte> Buffer0;
public ReadOnlySpan<byte> Buffer1;
public ReadOnlySpan<byte> Buffer2;
public int Buffer0Index;
public int Buffer1Index;
public int Buffer2Index;
public int Width;
public int Height;
public int UvWidth;
public int UvHeight;
public void Initialize()
{
Buffer0Index = -1;
Buffer1Index = -1;
Buffer2Index = -1;
}
public void SetBuffer0(RentedBuffer buffer)
{
Buffer0 = buffer.Data;
Buffer0Index = buffer.Index;
}
public void SetBuffer1(RentedBuffer buffer)
{
Buffer1 = buffer.Data;
Buffer1Index = buffer.Index;
}
public void SetBuffer2(RentedBuffer buffer)
{
Buffer2 = buffer.Data;
Buffer2Index = buffer.Index;
}
public void Return(BufferPool<byte> pool)
{
if (Buffer0Index != -1)
{
pool.Return(Buffer0Index);
}
if (Buffer1Index != -1)
{
pool.Return(Buffer1Index);
}
if (Buffer2Index != -1)
{
pool.Return(Buffer2Index);
}
}
}
}