aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Nvdec.H264/FFmpegContext.cs
diff options
context:
space:
mode:
authorMary <me@thog.eu>2021-05-02 22:08:35 +0200
committerGitHub <noreply@github.com>2021-05-02 22:08:35 +0200
commitfcdfd8a4822f4ce1be3f01fc97fa25a847221568 (patch)
tree1fc51ea40d744c194a875894f0aff2f893b3d731 /Ryujinx.Graphics.Nvdec.H264/FFmpegContext.cs
parent3443023a0844822f4f320ea4f75d9522fb5bbc01 (diff)
Update to FFmpeg 4.4.0 (#2259)
* Update to FFmpeg 4.4.0 As the title say * Fix warning from 4.4.0
Diffstat (limited to 'Ryujinx.Graphics.Nvdec.H264/FFmpegContext.cs')
-rw-r--r--Ryujinx.Graphics.Nvdec.H264/FFmpegContext.cs19
1 files changed, 13 insertions, 6 deletions
diff --git a/Ryujinx.Graphics.Nvdec.H264/FFmpegContext.cs b/Ryujinx.Graphics.Nvdec.H264/FFmpegContext.cs
index b4f9206b..98754c76 100644
--- a/Ryujinx.Graphics.Nvdec.H264/FFmpegContext.cs
+++ b/Ryujinx.Graphics.Nvdec.H264/FFmpegContext.cs
@@ -6,6 +6,7 @@ namespace Ryujinx.Graphics.Nvdec.H264
unsafe class FFmpegContext : IDisposable
{
private readonly AVCodec* _codec;
+ private AVPacket* _packet;
private AVCodecContext* _context;
public FFmpegContext()
@@ -14,20 +15,21 @@ namespace Ryujinx.Graphics.Nvdec.H264
_context = ffmpeg.avcodec_alloc_context3(_codec);
ffmpeg.avcodec_open2(_context, _codec, null);
+
+ _packet = ffmpeg.av_packet_alloc();
}
public int DecodeFrame(Surface output, ReadOnlySpan<byte> bitstream)
{
- AVPacket packet;
-
- ffmpeg.av_init_packet(&packet);
+ // Ensure the packet is clean before proceeding
+ ffmpeg.av_packet_unref(_packet);
fixed (byte* ptr = bitstream)
{
- packet.data = ptr;
- packet.size = bitstream.Length;
+ _packet->data = ptr;
+ _packet->size = bitstream.Length;
- int rc = ffmpeg.avcodec_send_packet(_context, &packet);
+ int rc = ffmpeg.avcodec_send_packet(_context, _packet);
if (rc != 0)
{
@@ -40,6 +42,11 @@ namespace Ryujinx.Graphics.Nvdec.H264
public void Dispose()
{
+ fixed (AVPacket** ppPacket = &_packet)
+ {
+ ffmpeg.av_packet_free(ppPacket);
+ }
+
ffmpeg.avcodec_close(_context);
fixed (AVCodecContext** ppContext = &_context)