diff options
author | Timo Rothenpieler <timo@rothenpieler.org> | 2021-04-10 14:31:52 +0200 |
---|---|---|
committer | Timo Rothenpieler <timo@rothenpieler.org> | 2021-04-11 09:21:21 +0200 |
commit | 5d52c4cbba8daee4c6f752087c1a01ddc9c43eac (patch) | |
tree | 01e40528eff75ce6eb70ee4ad1ea8169c5db8ac3 | |
parent | 7555d6f74ce4845383e9297fd0989059739af4c2 (diff) | |
download | ffmpeg-5d52c4cbba8daee4c6f752087c1a01ddc9c43eac.tar.gz |
avfilter/overlay_cuda: hold explicit reference to hw_device_ctx
-rw-r--r-- | libavfilter/vf_overlay_cuda.c | 8 |
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; |