aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Ryujinx.Graphics.Nvdec.FFmpeg/FFmpegContext.cs26
1 files changed, 25 insertions, 1 deletions
diff --git a/Ryujinx.Graphics.Nvdec.FFmpeg/FFmpegContext.cs b/Ryujinx.Graphics.Nvdec.FFmpeg/FFmpegContext.cs
index 1e3b88bb..e0ef05a5 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);
+ 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);
}