From cee712105850ac3385cd0091a923438167433f9f Mon Sep 17 00:00:00 2001 From: TSR Berry <20988865+TSRBerry@users.noreply.github.com> Date: Sat, 8 Apr 2023 01:22:00 +0200 Subject: Move solution and projects to src --- src/Ryujinx.Graphics.Nvdec.FFmpeg/Surface.cs | 41 ++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/Ryujinx.Graphics.Nvdec.FFmpeg/Surface.cs (limited to 'src/Ryujinx.Graphics.Nvdec.FFmpeg/Surface.cs') diff --git a/src/Ryujinx.Graphics.Nvdec.FFmpeg/Surface.cs b/src/Ryujinx.Graphics.Nvdec.FFmpeg/Surface.cs new file mode 100644 index 00000000..1ca9d1d5 --- /dev/null +++ b/src/Ryujinx.Graphics.Nvdec.FFmpeg/Surface.cs @@ -0,0 +1,41 @@ +using Ryujinx.Graphics.Nvdec.FFmpeg.Native; +using Ryujinx.Graphics.Video; +using System; + +namespace Ryujinx.Graphics.Nvdec.FFmpeg +{ + unsafe class Surface : ISurface + { + public AVFrame* Frame { get; } + + public int RequestedWidth { get; } + public int RequestedHeight { get; } + + public Plane YPlane => new Plane((IntPtr)Frame->Data[0], Stride * Height); + public Plane UPlane => new Plane((IntPtr)Frame->Data[1], UvStride * UvHeight); + public Plane VPlane => new Plane((IntPtr)Frame->Data[2], UvStride * UvHeight); + + public FrameField Field => Frame->InterlacedFrame != 0 ? FrameField.Interlaced : FrameField.Progressive; + + public int Width => Frame->Width; + public int Height => Frame->Height; + public int Stride => Frame->LineSize[0]; + public int UvWidth => (Width + 1) >> 1; + public int UvHeight => (Height + 1) >> 1; + public int UvStride => Frame->LineSize[1]; + + public Surface(int width, int height) + { + RequestedWidth = width; + RequestedHeight = height; + + Frame = FFmpegApi.av_frame_alloc(); + } + + public void Dispose() + { + FFmpegApi.av_frame_unref(Frame); + FFmpegApi.av_free(Frame); + } + } +} -- cgit v1.2.3