]> git.sesse.net Git - ffmpeg/blobdiff - libavutil/cuda_check.h
avcodec/flacenc: Remove always-true check
[ffmpeg] / libavutil / cuda_check.h
index b8e5f65cbbf6247efa9c4c4d91800cf059322eb0..3aea085c07378ed8433743338752dfaebfcf234c 100644 (file)
 #ifndef AVUTIL_CUDA_CHECK_H
 #define AVUTIL_CUDA_CHECK_H
 
+#include "compat/cuda/dynlink_loader.h"
+
+typedef CUresult CUDAAPI cuda_check_GetErrorName(CUresult error, const char** pstr);
+typedef CUresult CUDAAPI cuda_check_GetErrorString(CUresult error, const char** pstr);
+
 /**
  * Wrap a CUDA function call and print error information if it fails.
  */
+static inline int ff_cuda_check(void *avctx,
+                                void *cuGetErrorName_fn, void *cuGetErrorString_fn,
+                                CUresult err, const char *func)
+{
+    const char *err_name;
+    const char *err_string;
+
+    av_log(avctx, AV_LOG_TRACE, "Calling %s\n", func);
+
+    if (err == CUDA_SUCCESS)
+        return 0;
+
+    ((cuda_check_GetErrorName *)cuGetErrorName_fn)(err, &err_name);
+    ((cuda_check_GetErrorString *)cuGetErrorString_fn)(err, &err_string);
+
+    av_log(avctx, AV_LOG_ERROR, "%s failed", func);
+    if (err_name && err_string)
+        av_log(avctx, AV_LOG_ERROR, " -> %s: %s", err_name, err_string);
+    av_log(avctx, AV_LOG_ERROR, "\n");
 
-int ff_cuda_check(void *avctx,
-                  void *cuGetErrorName_fn, void *cuGetErrorString_fn,
-                  CUresult err, const char *func);
+    return AVERROR_EXTERNAL;
+}
 
 /**
  * Convenience wrapper for ff_cuda_check when directly linking libcuda.