summaryrefslogtreecommitdiff
path: root/libavutil/hwcontext_cuda.c
diff options
context:
space:
mode:
authorTimo Rothenpieler <timo@rothenpieler.org>2021-11-22 22:42:09 +0100
committerTimo Rothenpieler <timo@rothenpieler.org>2021-11-22 23:03:21 +0100
commitb1f1de084416768e8b4ba76b338029b974e518a2 (patch)
tree287299c9102228704b6dd8918e9ea0589c7c9220 /libavutil/hwcontext_cuda.c
parent203b0e3561dea1ec459be226d805abe73e7535e5 (diff)
downloadffmpeg-b1f1de084416768e8b4ba76b338029b974e518a2.tar.gz
avutil/hwcontext_cuda: add option to use primary device context
Diffstat (limited to 'libavutil/hwcontext_cuda.c')
-rw-r--r--libavutil/hwcontext_cuda.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/libavutil/hwcontext_cuda.c b/libavutil/hwcontext_cuda.c
index 48f7ecbdd3..ed7eeecb8b 100644
--- a/libavutil/hwcontext_cuda.c
+++ b/libavutil/hwcontext_cuda.c
@@ -376,6 +376,22 @@ static int cuda_context_init(AVHWDeviceContext *device_ctx, int flags) {
return 0;
}
+static int cuda_flags_from_opts(AVHWDeviceContext *device_ctx,
+ AVDictionary *opts, int *flags)
+{
+ AVDictionaryEntry *primary_ctx_opt = av_dict_get(opts, "primary_ctx", NULL, 0);
+
+ if (primary_ctx_opt && strtol(primary_ctx_opt->value, NULL, 10)) {
+ av_log(device_ctx, AV_LOG_VERBOSE, "Using CUDA primary device context\n");
+ *flags |= AV_CUDA_USE_PRIMARY_CONTEXT;
+ } else if (primary_ctx_opt) {
+ av_log(device_ctx, AV_LOG_VERBOSE, "Disabling use of CUDA primary device context\n");
+ *flags &= ~AV_CUDA_USE_PRIMARY_CONTEXT;
+ }
+
+ return 0;
+}
+
static int cuda_device_create(AVHWDeviceContext *device_ctx,
const char *device,
AVDictionary *opts, int flags)
@@ -384,6 +400,10 @@ static int cuda_device_create(AVHWDeviceContext *device_ctx,
CudaFunctions *cu;
int ret, device_idx = 0;
+ ret = cuda_flags_from_opts(device_ctx, opts, &flags);
+ if (ret < 0)
+ return ret;
+
if (device)
device_idx = strtol(device, NULL, 0);
@@ -419,6 +439,10 @@ static int cuda_device_derive(AVHWDeviceContext *device_ctx,
const char *src_uuid = NULL;
int ret, i, device_count;
+ ret = cuda_flags_from_opts(device_ctx, opts, &flags);
+ if (ret < 0)
+ return ret;
+
#if CONFIG_VULKAN
VkPhysicalDeviceIDProperties vk_idp = {
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES,