From fcdfd8a4822f4ce1be3f01fc97fa25a847221568 Mon Sep 17 00:00:00 2001 From: Mary <me@thog.eu> Date: Sun, 2 May 2021 22:08:35 +0200 Subject: [PATCH] Update to FFmpeg 4.4.0 (#2259) * Update to FFmpeg 4.4.0 As the title say * Fix warning from 4.4.0 --- Ryujinx.Graphics.Nvdec.H264/FFmpegContext.cs | 19 +++++++++++++------ .../Ryujinx.Graphics.Nvdec.H264.csproj | 2 +- Ryujinx/Ryujinx.csproj | 2 +- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/Ryujinx.Graphics.Nvdec.H264/FFmpegContext.cs b/Ryujinx.Graphics.Nvdec.H264/FFmpegContext.cs index b4f9206bad..98754c767c 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) diff --git a/Ryujinx.Graphics.Nvdec.H264/Ryujinx.Graphics.Nvdec.H264.csproj b/Ryujinx.Graphics.Nvdec.H264/Ryujinx.Graphics.Nvdec.H264.csproj index 2d54173cdc..fdcdae06de 100644 --- a/Ryujinx.Graphics.Nvdec.H264/Ryujinx.Graphics.Nvdec.H264.csproj +++ b/Ryujinx.Graphics.Nvdec.H264/Ryujinx.Graphics.Nvdec.H264.csproj @@ -6,7 +6,7 @@ </PropertyGroup> <ItemGroup> - <PackageReference Include="FFmpeg.AutoGen" Version="4.3.0" /> + <PackageReference Include="FFmpeg.AutoGen" Version="4.4.0" /> </ItemGroup> <ItemGroup> diff --git a/Ryujinx/Ryujinx.csproj b/Ryujinx/Ryujinx.csproj index 59edc9193d..c4d758748d 100644 --- a/Ryujinx/Ryujinx.csproj +++ b/Ryujinx/Ryujinx.csproj @@ -15,7 +15,7 @@ <PackageReference Include="DiscordRichPresence" Version="1.0.166" /> <PackageReference Include="GtkSharp" Version="3.22.25.128" /> <PackageReference Include="GtkSharp.Dependencies" Version="1.1.0" Condition="'$(RuntimeIdentifier)' != 'linux-x64' AND '$(RuntimeIdentifier)' != 'osx-x64'" /> - <PackageReference Include="Ryujinx.Graphics.Nvdec.Dependencies" Version="4.3.0" Condition="'$(RuntimeIdentifier)' != 'linux-x64' AND '$(RuntimeIdentifier)' != 'osx-x64'" /> + <PackageReference Include="Ryujinx.Graphics.Nvdec.Dependencies" Version="4.4.0-build7" Condition="'$(RuntimeIdentifier)' != 'linux-x64' AND '$(RuntimeIdentifier)' != 'osx-x64'" /> <PackageReference Include="Ryujinx.Audio.OpenAL.Dependencies" Version="1.21.0.1" Condition="'$(RuntimeIdentifier)' != 'linux-x64' AND '$(RuntimeIdentifier)' != 'osx-x64'" /> <PackageReference Include="OpenTK.Graphics" Version="4.5.0" /> <PackageReference Include="SPB" Version="0.0.2" />