#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.