]> git.sesse.net Git - ffmpeg/commitdiff
avfilter/overlay_cuda: hold explicit reference to hw_device_ctx
authorTimo Rothenpieler <timo@rothenpieler.org>
Sat, 10 Apr 2021 12:31:52 +0000 (14:31 +0200)
committerTimo Rothenpieler <timo@rothenpieler.org>
Sun, 11 Apr 2021 07:21:21 +0000 (09:21 +0200)
libavfilter/vf_overlay_cuda.c

index f6ee43e9295af6d751f5016ff37cfec96dda8731..e45f510644ffea079f8f43148873e87a14235279 100644 (file)
@@ -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;