summaryrefslogtreecommitdiff
path: root/libavfilter
diff options
context:
space:
mode:
authorTimo Rothenpieler <timo@rothenpieler.org>2021-04-10 14:31:52 +0200
committerTimo Rothenpieler <timo@rothenpieler.org>2021-04-11 10:26:47 +0200
commit0fcaa9773943843c26ceb950ef2075d92f59bc21 (patch)
tree97ebe45cbcbf003436e7379cf7c51749d0ee1b63 /libavfilter
parent31d249a418409a0e295e74701040e8ef866847d1 (diff)
downloadffmpeg-0fcaa9773943843c26ceb950ef2075d92f59bc21.tar.gz
avfilter/overlay_cuda: hold explicit reference to hw_device_ctx
Diffstat (limited to 'libavfilter')
-rw-r--r--libavfilter/vf_overlay_cuda.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/libavfilter/vf_overlay_cuda.c b/libavfilter/vf_overlay_cuda.c
index f6ee43e929..e45f510644 100644
--- a/libavfilter/vf_overlay_cuda.c
+++ b/libavfilter/vf_overlay_cuda.c
@@ -63,6 +63,7 @@ typedef struct OverlayCUDAContext {
enum AVPixelFormat in_format_overlay;
enum AVPixelFormat in_format_main;
+ AVBufferRef *hw_device_ctx;
AVCUDADeviceContext *hwctx;
CUcontext cu_ctx;
@@ -256,6 +257,9 @@ static av_cold void overlay_cuda_uninit(AVFilterContext *avctx)
CHECK_CU(cu->cuModuleUnload(ctx->cu_module));
CHECK_CU(cu->cuCtxPopCurrent(&dummy));
}
+
+ av_buffer_unref(&ctx->hw_device_ctx);
+ ctx->hwctx = NULL;
}
/**
@@ -341,7 +345,9 @@ static int overlay_cuda_config_output(AVFilterLink *outlink)
// initialize
- ctx->hwctx = frames_ctx->device_ctx->hwctx;
+ ctx->hw_device_ctx = av_buffer_ref(frames_ctx->device_ref);
+ ctx->hwctx = ((AVHWDeviceContext*)ctx->hw_device_ctx->data)->hwctx;
+
cuda_ctx = ctx->hwctx->cuda_ctx;
ctx->fs.time_base = inlink->time_base;