[FFmpeg-devel] [PATCH 09/13] compat/cuda: Pass a logging context to load functions

Mark Thompson sw at jkqxz.net
Sat Nov 18 20:47:09 EET 2017


---
The cuda load error is easily hit by "-hwaccel auto".


 compat/cuda/dynlink_loader.h | 18 +++++++++---------
 libavcodec/cuviddec.c        |  2 +-
 libavcodec/nvdec.c           |  2 +-
 libavcodec/nvenc.c           |  4 ++--
 libavutil/hwcontext_cuda.c   |  2 +-
 5 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/compat/cuda/dynlink_loader.h b/compat/cuda/dynlink_loader.h
index 7d2c87449e..fa43782c9a 100644
--- a/compat/cuda/dynlink_loader.h
+++ b/compat/cuda/dynlink_loader.h
@@ -59,29 +59,29 @@
 #define LOAD_LIBRARY(l, path)                                     \
     do {                                                          \
         if (!((l) = dlopen(path, RTLD_LAZY))) {                   \
-            av_log(NULL, AV_LOG_ERROR, "Cannot load %s\n", path); \
+            av_log(logctx, AV_LOG_ERROR, "Cannot load %s\n", path); \
             ret = AVERROR_UNKNOWN;                                \
             goto error;                                           \
         }                                                         \
-        av_log(NULL, AV_LOG_TRACE, "Loaded lib: %s\n", path);     \
+        av_log(logctx, AV_LOG_TRACE, "Loaded lib: %s\n", path);     \
     } while (0)
 
 #define LOAD_SYMBOL(fun, tp, symbol)                                \
     do {                                                            \
         if (!((f->fun) = (tp*)dlsym(f->lib, symbol))) {             \
-            av_log(NULL, AV_LOG_ERROR, "Cannot load %s\n", symbol); \
+            av_log(logctx, AV_LOG_ERROR, "Cannot load %s\n", symbol); \
             ret = AVERROR_UNKNOWN;                                  \
             goto error;                                             \
         }                                                           \
-        av_log(NULL, AV_LOG_TRACE, "Loaded sym: %s\n", symbol);     \
+        av_log(logctx, AV_LOG_TRACE, "Loaded sym: %s\n", symbol);     \
     } while (0)
 
 #define LOAD_SYMBOL_OPT(fun, tp, symbol)                                     \
     do {                                                                     \
         if (!((f->fun) = (tp*)dlsym(f->lib, symbol))) {                      \
-            av_log(NULL, AV_LOG_DEBUG, "Cannot load optional %s\n", symbol); \
+            av_log(logctx, AV_LOG_DEBUG, "Cannot load optional %s\n", symbol); \
         } else {                                                             \
-            av_log(NULL, AV_LOG_TRACE, "Loaded sym: %s\n", symbol);          \
+            av_log(logctx, AV_LOG_TRACE, "Loaded sym: %s\n", symbol);          \
         }                                                                    \
     } while (0)
 
@@ -187,7 +187,7 @@ static inline void nvenc_free_functions(NvencFunctions **functions)
 }
 
 #ifdef AV_COMPAT_DYNLINK_CUDA_H
-static inline int cuda_load_functions(CudaFunctions **functions)
+static inline int cuda_load_functions(CudaFunctions **functions, void *logctx)
 {
     GENERIC_LOAD_FUNC_PREAMBLE(CudaFunctions, cuda, CUDA_LIBNAME);
 
@@ -210,7 +210,7 @@ static inline int cuda_load_functions(CudaFunctions **functions)
 }
 #endif
 
-static inline int cuvid_load_functions(CuvidFunctions **functions)
+static inline int cuvid_load_functions(CuvidFunctions **functions, void *logctx)
 {
     GENERIC_LOAD_FUNC_PREAMBLE(CuvidFunctions, cuvid, NVCUVID_LIBNAME);
 
@@ -244,7 +244,7 @@ static inline int cuvid_load_functions(CuvidFunctions **functions)
     GENERIC_LOAD_FUNC_FINALE(cuvid);
 }
 
-static inline int nvenc_load_functions(NvencFunctions **functions)
+static inline int nvenc_load_functions(NvencFunctions **functions, void *logctx)
 {
     GENERIC_LOAD_FUNC_PREAMBLE(NvencFunctions, nvenc, NVENC_LIBNAME);
 
diff --git a/libavcodec/cuviddec.c b/libavcodec/cuviddec.c
index 346e54e7c6..33e9140f89 100644
--- a/libavcodec/cuviddec.c
+++ b/libavcodec/cuviddec.c
@@ -836,7 +836,7 @@ static av_cold int cuvid_decode_init(AVCodecContext *avctx)
         goto error;
     }
 
-    ret = cuvid_load_functions(&ctx->cvdl);
+    ret = cuvid_load_functions(&ctx->cvdl, avctx);
     if (ret < 0) {
         av_log(avctx, AV_LOG_ERROR, "Failed loading nvcuvid.\n");
         goto error;
diff --git a/libavcodec/nvdec.c b/libavcodec/nvdec.c
index 3d62840e9f..30e5258b07 100644
--- a/libavcodec/nvdec.c
+++ b/libavcodec/nvdec.c
@@ -174,7 +174,7 @@ static int nvdec_decoder_create(AVBufferRef **out, AVBufferRef *hw_device_ref,
     decoder->cuda_ctx = device_hwctx->cuda_ctx;
     decoder->cudl = device_hwctx->internal->cuda_dl;
 
-    ret = cuvid_load_functions(&decoder->cvdl);
+    ret = cuvid_load_functions(&decoder->cvdl, logctx);
     if (ret < 0) {
         av_log(logctx, AV_LOG_ERROR, "Failed loading nvcuvid.\n");
         goto fail;
diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c
index e07280b568..79f7dce5f1 100644
--- a/libavcodec/nvenc.c
+++ b/libavcodec/nvenc.c
@@ -133,11 +133,11 @@ static av_cold int nvenc_load_libraries(AVCodecContext *avctx)
     uint32_t nvenc_max_ver;
     int ret;
 
-    ret = cuda_load_functions(&dl_fn->cuda_dl);
+    ret = cuda_load_functions(&dl_fn->cuda_dl, avctx);
     if (ret < 0)
         return ret;
 
-    ret = nvenc_load_functions(&dl_fn->nvenc_dl);
+    ret = nvenc_load_functions(&dl_fn->nvenc_dl, avctx);
     if (ret < 0) {
         nvenc_print_driver_requirement(avctx, AV_LOG_ERROR);
         return ret;
diff --git a/libavutil/hwcontext_cuda.c b/libavutil/hwcontext_cuda.c
index dfb67bc941..37827a770c 100644
--- a/libavutil/hwcontext_cuda.c
+++ b/libavutil/hwcontext_cuda.c
@@ -336,7 +336,7 @@ static int cuda_device_init(AVHWDeviceContext *ctx)
     }
 
     if (!hwctx->internal->cuda_dl) {
-        ret = cuda_load_functions(&hwctx->internal->cuda_dl);
+        ret = cuda_load_functions(&hwctx->internal->cuda_dl, ctx);
         if (ret < 0) {
             av_log(ctx, AV_LOG_ERROR, "Could not dynamically load CUDA\n");
             goto error;
-- 
2.11.0



More information about the ffmpeg-devel mailing list