X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavutil%2Fcuda_check.h;h=3aea085c07378ed8433743338752dfaebfcf234c;hb=2606c48391377681541111263de41c79adeffa49;hp=b8e5f65cbbf6247efa9c4c4d91800cf059322eb0;hpb=420ab946ace27e4b4bfb6c2be0a65a4ffd6e05a1;p=ffmpeg diff --git a/libavutil/cuda_check.h b/libavutil/cuda_check.h index b8e5f65cbbf..3aea085c073 100644 --- a/libavutil/cuda_check.h +++ b/libavutil/cuda_check.h @@ -20,13 +20,36 @@ #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.