From 16c649934fde134d7e8fc9539cf562dd129fbaac Mon Sep 17 00:00:00 2001 From: Ac_K Date: Mon, 3 Jan 2022 12:38:21 +0100 Subject: [PATCH] ffmpeg: Add extra checks and error messages (#2951) * ffmpeg: Add extra checks and error messages This PR adds some checks and logging error messages related to the ffmpeg context creation, that will prevent users to open issues because they don't have the correct packages installed. Close #2762 * Update FFmpegContext.cs --- .../FFmpegContext.cs | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/Ryujinx.Graphics.Nvdec.FFmpeg/FFmpegContext.cs b/Ryujinx.Graphics.Nvdec.FFmpeg/FFmpegContext.cs index 1e3b88bbf..e0ef05a52 100644 --- a/Ryujinx.Graphics.Nvdec.FFmpeg/FFmpegContext.cs +++ b/Ryujinx.Graphics.Nvdec.FFmpeg/FFmpegContext.cs @@ -18,11 +18,35 @@ namespace Ryujinx.Graphics.Nvdec.FFmpeg public FFmpegContext(AVCodecID codecId) { _codec = ffmpeg.avcodec_find_decoder(codecId); - _context = ffmpeg.avcodec_alloc_context3(_codec); + if (_codec == null) + { + Logger.Error?.PrintMsg(LogClass.FFmpeg, $"Codec wasn't found. Make sure you have the {codecId} codec present in your FFmpeg installation."); - ffmpeg.avcodec_open2(_context, _codec, null); + return; + } + + _context = ffmpeg.avcodec_alloc_context3(_codec); + if (_context == null) + { + Logger.Error?.PrintMsg(LogClass.FFmpeg, "Codec context couldn't be allocated."); + + return; + } + + if (ffmpeg.avcodec_open2(_context, _codec, null) != 0) + { + Logger.Error?.PrintMsg(LogClass.FFmpeg, "Codec couldn't be opened."); + + return; + } _packet = ffmpeg.av_packet_alloc(); + if (_packet == null) + { + Logger.Error?.PrintMsg(LogClass.FFmpeg, "Packet couldn't be allocated."); + + return; + } _decodeFrame = Marshal.GetDelegateForFunctionPointer(_codec->decode.Pointer); }