浏览代码

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
Ac_K 4 年之前
父节点
当前提交
16c649934f
共有 1 个文件被更改,包括 25 次插入1 次删除
  1. 25 1
      Ryujinx.Graphics.Nvdec.FFmpeg/FFmpegContext.cs

+ 25 - 1
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);
+            if (_codec == null)
+            {
+                Logger.Error?.PrintMsg(LogClass.FFmpeg, $"Codec wasn't found. Make sure you have the {codecId} codec present in your FFmpeg installation.");
+
+                return;
+            }
+
             _context = ffmpeg.avcodec_alloc_context3(_codec);
+            if (_context == null)
+            {
+                Logger.Error?.PrintMsg(LogClass.FFmpeg, "Codec context couldn't be allocated.");
 
-            ffmpeg.avcodec_open2(_context, _codec, null);
+                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<AVCodec_decode>(_codec->decode.Pointer);
         }