static av_cold int nvenc_dyload_cuda(AVCodecContext *avctx)

{

    NvencContext *ctx = avctx->priv_data;

    NvencDynLoadFunctions *dl_fn = &ctx->nvenc_dload_funcs;



#if CONFIG_CUDA

    dl_fn->cu_init                      = cuInit;

    dl_fn->cu_device_get_count          = cuDeviceGetCount;

    dl_fn->cu_device_get                = cuDeviceGet;

    dl_fn->cu_device_get_name           = cuDeviceGetName;

    dl_fn->cu_device_compute_capability = cuDeviceComputeCapability;

    dl_fn->cu_ctx_create                = cuCtxCreate_v2;

    dl_fn->cu_ctx_pop_current           = cuCtxPopCurrent_v2;

    dl_fn->cu_ctx_destroy               = cuCtxDestroy_v2;



    return 1;

#else

    if (dl_fn->cuda_lib)

        return 1;



#if defined(_WIN32)

    dl_fn->cuda_lib = LoadLibrary(TEXT("nvcuda.dll"));

#else

    dl_fn->cuda_lib = dlopen("libcuda.so", RTLD_LAZY);

#endif



    if (!dl_fn->cuda_lib) {

        av_log(avctx, AV_LOG_FATAL, "Failed loading CUDA library\n");

        goto error;

    }



    CHECK_LOAD_FUNC(PCUINIT, dl_fn->cu_init, "cuInit");

    CHECK_LOAD_FUNC(PCUDEVICEGETCOUNT, dl_fn->cu_device_get_count, "cuDeviceGetCount");

    CHECK_LOAD_FUNC(PCUDEVICEGET, dl_fn->cu_device_get, "cuDeviceGet");

    CHECK_LOAD_FUNC(PCUDEVICEGETNAME, dl_fn->cu_device_get_name, "cuDeviceGetName");

    CHECK_LOAD_FUNC(PCUDEVICECOMPUTECAPABILITY, dl_fn->cu_device_compute_capability, "cuDeviceComputeCapability");

    CHECK_LOAD_FUNC(PCUCTXCREATE, dl_fn->cu_ctx_create, "cuCtxCreate_v2");

    CHECK_LOAD_FUNC(PCUCTXPOPCURRENT, dl_fn->cu_ctx_pop_current, "cuCtxPopCurrent_v2");

    CHECK_LOAD_FUNC(PCUCTXDESTROY, dl_fn->cu_ctx_destroy, "cuCtxDestroy_v2");



    return 1;



error:



    if (dl_fn->cuda_lib)

        DL_CLOSE_FUNC(dl_fn->cuda_lib);



    dl_fn->cuda_lib = NULL;



    return 0;

#endif

}

static av_cold int nvenc_dyload_cuda(AVCodecContext *avctx)

{

    NvencContext *ctx = avctx->priv_data;

    NvencDynLoadFunctions *dl_fn = &ctx->nvenc_dload_funcs;



#if CONFIG_CUDA

    dl_fn->cu_init                      = cuInit;

    dl_fn->cu_device_get_count          = cuDeviceGetCount;

    dl_fn->cu_device_get                = cuDeviceGet;

    dl_fn->cu_device_get_name           = cuDeviceGetName;

    dl_fn->cu_device_compute_capability = cuDeviceComputeCapability;

    dl_fn->cu_ctx_create                = cuCtxCreate_v2;

    dl_fn->cu_ctx_pop_current           = cuCtxPopCurrent_v2;

    dl_fn->cu_ctx_destroy               = cuCtxDestroy_v2;



    return 1;

#else

    if (dl_fn->cuda_lib)

        return 1;



#if defined(_WIN32)

    dl_fn->cuda_lib = LoadLibrary(TEXT("nvcuda.dll"));

#else

    dl_fn->cuda_lib = dlopen("libcuda.so", RTLD_LAZY);

#endif



    if (!dl_fn->cuda_lib) {

        av_log(avctx, AV_LOG_FATAL, "Failed loading CUDA library\n");

        goto error;

    }



    CHECK_LOAD_FUNC(PCUINIT, dl_fn->cu_init, "cuInit");

    CHECK_LOAD_FUNC(PCUDEVICEGETCOUNT, dl_fn->cu_device_get_count, "cuDeviceGetCount");

    CHECK_LOAD_FUNC(PCUDEVICEGET, dl_fn->cu_device_get, "cuDeviceGet");

    CHECK_LOAD_FUNC(PCUDEVICEGETNAME, dl_fn->cu_device_get_name, "cuDeviceGetName");

    CHECK_LOAD_FUNC(PCUDEVICECOMPUTECAPABILITY, dl_fn->cu_device_compute_capability, "cuDeviceComputeCapability");

    CHECK_LOAD_FUNC(PCUCTXCREATE, dl_fn->cu_ctx_create, "cuCtxCreate_v2");

    CHECK_LOAD_FUNC(PCUCTXPOPCURRENT, dl_fn->cu_ctx_pop_current, "cuCtxPopCurrent_v2");

    CHECK_LOAD_FUNC(PCUCTXDESTROY, dl_fn->cu_ctx_destroy, "cuCtxDestroy_v2");



    return 1;



error:



    if (dl_fn->cuda_lib)

        DL_CLOSE_FUNC(dl_fn->cuda_lib);



    dl_fn->cuda_lib = NULL;



    return 0;

#endif

}

static av_cold int FUNC_0(AVCodecContext *avctx)

{

    NvencContext *ctx = avctx->priv_data;

    NvencDynLoadFunctions *dl_fn = &ctx->nvenc_dload_funcs;



#if CONFIG_CUDA

    dl_fn->cu_init                      = cuInit;

    dl_fn->cu_device_get_count          = cuDeviceGetCount;

    dl_fn->cu_device_get                = cuDeviceGet;

    dl_fn->cu_device_get_name           = cuDeviceGetName;

    dl_fn->cu_device_compute_capability = cuDeviceComputeCapability;

    dl_fn->cu_ctx_create                = cuCtxCreate_v2;

    dl_fn->cu_ctx_pop_current           = cuCtxPopCurrent_v2;

    dl_fn->cu_ctx_destroy               = cuCtxDestroy_v2;



    return 1;

#else

    if (dl_fn->cuda_lib)

        return 1;



#if defined(_WIN32)

    dl_fn->cuda_lib = LoadLibrary(TEXT("nvcuda.dll"));

#else

    dl_fn->cuda_lib = dlopen("libcuda.so", RTLD_LAZY);

#endif



    if (!dl_fn->cuda_lib) {

        av_log(avctx, AV_LOG_FATAL, "Failed loading CUDA library\n");

        goto error;

    }



    CHECK_LOAD_FUNC(PCUINIT, dl_fn->cu_init, "cuInit");

    CHECK_LOAD_FUNC(PCUDEVICEGETCOUNT, dl_fn->cu_device_get_count, "cuDeviceGetCount");

    CHECK_LOAD_FUNC(PCUDEVICEGET, dl_fn->cu_device_get, "cuDeviceGet");

    CHECK_LOAD_FUNC(PCUDEVICEGETNAME, dl_fn->cu_device_get_name, "cuDeviceGetName");

    CHECK_LOAD_FUNC(PCUDEVICECOMPUTECAPABILITY, dl_fn->cu_device_compute_capability, "cuDeviceComputeCapability");

    CHECK_LOAD_FUNC(PCUCTXCREATE, dl_fn->cu_ctx_create, "cuCtxCreate_v2");

    CHECK_LOAD_FUNC(PCUCTXPOPCURRENT, dl_fn->cu_ctx_pop_current, "cuCtxPopCurrent_v2");

    CHECK_LOAD_FUNC(PCUCTXDESTROY, dl_fn->cu_ctx_destroy, "cuCtxDestroy_v2");



    return 1;



error:



    if (dl_fn->cuda_lib)

        DL_CLOSE_FUNC(dl_fn->cuda_lib);



    dl_fn->cuda_lib = NULL;



    return 0;

#endif

}

static av_cold int FUNC_0(AVCodecContext *avctx)
{ NvencContext *ctx = avctx->priv_data; NvencDynLoadFunctions *dl_fn = &ctx->nvenc_dload_funcs; #if CONFIG_CUDA
dl_fn->cu_init                      = cuInit; dl_fn->cu_device_get_count          = cuDeviceGetCount; dl_fn->cu_device_get                = cuDeviceGet; dl_fn->cu_device_get_name           = cuDeviceGetName; dl_fn->cu_device_compute_capability = cuDeviceComputeCapability; dl_fn->cu_ctx_create                = cuCtxCreate_v2; dl_fn->cu_ctx_pop_current           = cuCtxPopCurrent_v2; dl_fn->cu_ctx_destroy               = cuCtxDestroy_v2; return 1; #else
if (dl_fn->cuda_lib)
return 1; #if defined(_WIN32)
dl_fn->cuda_lib = LoadLibrary(TEXT("nvcuda.dll")); #else
dl_fn->cuda_lib = dlopen("libcuda.so", RTLD_LAZY); #endif
if (!dl_fn->cuda_lib) { av_log(avctx, AV_LOG_FATAL, "Failed loading CUDA library\n"); goto error; } CHECK_LOAD_FUNC(PCUINIT, dl_fn->cu_init, "cuInit"); CHECK_LOAD_FUNC(PCUDEVICEGETCOUNT, dl_fn->cu_device_get_count, "cuDeviceGetCount"); CHECK_LOAD_FUNC(PCUDEVICEGET, dl_fn->cu_device_get, "cuDeviceGet"); CHECK_LOAD_FUNC(PCUDEVICEGETNAME, dl_fn->cu_device_get_name, "cuDeviceGetName"); CHECK_LOAD_FUNC(PCUDEVICECOMPUTECAPABILITY, dl_fn->cu_device_compute_capability, "cuDeviceComputeCapability"); CHECK_LOAD_FUNC(PCUCTXCREATE, dl_fn->cu_ctx_create, "cuCtxCreate_v2"); CHECK_LOAD_FUNC(PCUCTXPOPCURRENT, dl_fn->cu_ctx_pop_current, "cuCtxPopCurrent_v2"); CHECK_LOAD_FUNC(PCUCTXDESTROY, dl_fn->cu_ctx_destroy, "cuCtxDestroy_v2"); return 1; error:
if (dl_fn->cuda_lib)
DL_CLOSE_FUNC(dl_fn->cuda_lib); dl_fn->cuda_lib = NULL; return 0; #endif
}