| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- 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);
- }
- }
- }
|