diff options
Diffstat (limited to 'gst')
-rw-r--r-- | gst/vaapi/gstvaapivideobufferpool.c | 5 | ||||
-rw-r--r-- | gst/vaapi/gstvaapivideomemory.c | 11 | ||||
-rw-r--r-- | gst/vaapi/gstvaapivideomemory.h | 4 |
3 files changed, 19 insertions, 1 deletions
diff --git a/gst/vaapi/gstvaapivideobufferpool.c b/gst/vaapi/gstvaapivideobufferpool.c index 013766d8..082cf91e 100644 --- a/gst/vaapi/gstvaapivideobufferpool.c +++ b/gst/vaapi/gstvaapivideobufferpool.c @@ -480,7 +480,10 @@ gst_vaapi_video_buffer_pool_reset_buffer (GstBufferPool * pool, /* Release the underlying surface proxy */ if (GST_VAAPI_IS_VIDEO_MEMORY (mem)) { gst_vaapi_video_memory_reset_surface (GST_VAAPI_VIDEO_MEMORY_CAST (mem)); - } else { + } else if (!gst_vaapi_dmabuf_memory_holds_surface (mem)) { + /* If mem holds an internally created surface, don't reset it! + * While surface is passed, we should clear it to avoid wrong + * reference. */ meta = gst_buffer_get_vaapi_video_meta (buffer); if (meta) gst_vaapi_video_meta_set_surface_proxy (meta, NULL); diff --git a/gst/vaapi/gstvaapivideomemory.c b/gst/vaapi/gstvaapivideomemory.c index 224a7ed2..92e7fe9f 100644 --- a/gst/vaapi/gstvaapivideomemory.c +++ b/gst/vaapi/gstvaapivideomemory.c @@ -1007,6 +1007,17 @@ gst_vaapi_buffer_proxy_quark_get (void) return g_quark; } +/* Whether @mem holds an internal VA surface proxy created at + * gst_vaapi_dmabuf_memory_new(). */ +gboolean +gst_vaapi_dmabuf_memory_holds_surface (GstMemory * mem) +{ + g_return_val_if_fail (mem != NULL, FALSE); + + return gst_mini_object_get_qdata (GST_MINI_OBJECT_CAST (mem), + GST_VAAPI_BUFFER_PROXY_QUARK) != NULL; +} + GstMemory * gst_vaapi_dmabuf_memory_new (GstAllocator * base_allocator, GstVaapiVideoMeta * meta) diff --git a/gst/vaapi/gstvaapivideomemory.h b/gst/vaapi/gstvaapivideomemory.h index be18bbfe..41a05888 100644 --- a/gst/vaapi/gstvaapivideomemory.h +++ b/gst/vaapi/gstvaapivideomemory.h @@ -216,6 +216,10 @@ GstMemory * gst_vaapi_dmabuf_memory_new (GstAllocator * allocator, GstVaapiVideoMeta * meta); +G_GNUC_INTERNAL +gboolean +gst_vaapi_dmabuf_memory_holds_surface (GstMemory * mem); + /* ------------------------------------------------------------------------ */ /* --- GstVaapiDmaBufAllocator --- */ /* ------------------------------------------------------------------------ */ |