[vlc-commits] vaapi: set the video context in the picture context

Steve Lhomme git at videolan.org
Mon Dec 2 13:42:53 CET 2019


vlc | branch: master | Steve Lhomme <robux4 at ycbcr.xyz> | Wed Nov 13 16:32:14 2019 +0100| [3299d341817a46abb54988cc9e1e29ab69151f4f] | committer: Steve Lhomme

vaapi: set the video context in the picture context

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=3299d341817a46abb54988cc9e1e29ab69151f4f
---

 modules/codec/avcodec/vaapi.c | 3 ++-
 modules/hw/vaapi/vlc_vaapi.c  | 4 +++-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/modules/codec/avcodec/vaapi.c b/modules/codec/avcodec/vaapi.c
index 5a5c86cff9..afe77d97c3 100644
--- a/modules/codec/avcodec/vaapi.c
+++ b/modules/codec/avcodec/vaapi.c
@@ -145,6 +145,7 @@ static picture_context_t *vaapi_dec_pic_context_copy(picture_context_t *src)
     if (unlikely(pic_ctx == NULL))
         return NULL;
     *pic_ctx = *src_ctx;
+    vlc_video_context_Hold(pic_ctx->ctx.s.vctx);
     va_surface_AddRef(pic_ctx->va_surface);
     return &pic_ctx->ctx.s;
 }
@@ -163,7 +164,7 @@ static int Get(vlc_va_t *va, picture_t *pic, uint8_t **data)
     }
     vaapi_ctx->ctx.s = (picture_context_t) {
         vaapi_dec_pic_context_destroy, vaapi_dec_pic_context_copy,
-        NULL /*TODO*/
+        sys->vctx,
     };
     vaapi_ctx->ctx.surface = sys->render_targets[va_surface_GetIndex(va_surface)];
     vaapi_ctx->ctx.va_dpy = sys->hw_ctx.display;
diff --git a/modules/hw/vaapi/vlc_vaapi.c b/modules/hw/vaapi/vlc_vaapi.c
index 6270271b57..c2d63baacd 100644
--- a/modules/hw/vaapi/vlc_vaapi.c
+++ b/modules/hw/vaapi/vlc_vaapi.c
@@ -454,6 +454,7 @@ pic_ctx_copy_cb(struct picture_context_t *opaque)
         return NULL;
 
     *dst_ctx = *src_ctx;
+    vlc_video_context_Hold(dst_ctx->ctx.s.vctx);
     dst_ctx->ctx.s.destroy = pic_ctx_destroy_cb;
     picture_Hold(dst_ctx->picref);
     return &dst_ctx->ctx.s;
@@ -508,7 +509,7 @@ vlc_vaapi_PoolNew(vlc_object_t *o, vlc_video_context *vctx,
         p_sys->instance = instance;
         p_sys->ctx.ctx.s = (picture_context_t) {
             pic_sys_ctx_destroy_cb, pic_ctx_copy_cb,
-            NULL /*TODO*/
+            vctx, // it will be held during PicSetContext
         };
         p_sys->ctx.ctx.surface = instance->render_targets[i];
         p_sys->ctx.ctx.va_dpy = dpy;
@@ -569,6 +570,7 @@ vlc_vaapi_PicSetContext(picture_t *pic, struct vaapi_pic_context *vaapi_ctx)
     assert(pic->context == NULL);
 
     pic->context = &vaapi_ctx->s;
+    vlc_video_context_Hold(vaapi_ctx->s.vctx);
 }
 
 void



More information about the vlc-commits mailing list