diff --git a/sys/va/gstvaallocator.c b/sys/va/gstvaallocator.c index b3b7ad422d..6c44854006 100644 --- a/sys/va/gstvaallocator.c +++ b/sys/va/gstvaallocator.c @@ -706,6 +706,11 @@ _va_map_unlocked (GstVaMemory * mem, GstMapFlags flags) (GST_VIDEO_INFO_FORMAT (&mem->info) == mem->surface_format); } + if (flags & GST_MAP_VA) { + mem->mapped_data = &mem->surface; + goto success; + } + if (!_ensure_image (display, mem->surface, &mem->info, &mem->image, &mem->is_derived)) return NULL; @@ -757,6 +762,9 @@ _va_unmap_unlocked (GstVaMemory * mem) if (!g_atomic_int_dec_and_test (&mem->map_count)) return TRUE; + if (mem->prev_mapflags & GST_MAP_VA) + goto bail; + display = GST_VA_ALLOCATOR (allocator)->display; if (mem->image.image_id != VA_INVALID_ID) { @@ -771,6 +779,7 @@ _va_unmap_unlocked (GstVaMemory * mem) ret &= _unmap_buffer (display, mem->image.buf); ret &= _destroy_image (display, mem->image.image_id); +bail: _clean_mem (mem); return ret; diff --git a/sys/va/gstvaallocator.h b/sys/va/gstvaallocator.h index f25b065f11..9ac12a3722 100644 --- a/sys/va/gstvaallocator.h +++ b/sys/va/gstvaallocator.h @@ -50,6 +50,8 @@ G_DECLARE_FINAL_TYPE (GstVaAllocator, gst_va_allocator, GST, VA_ALLOCATOR, GstAl #define GST_ALLOCATOR_VASURFACE "VAMemory" +#define GST_MAP_VA (GST_MAP_FLAG_LAST << 1) + GstAllocator * gst_va_allocator_new (GstVaDisplay * display, GArray * surface_formats); GstMemory * gst_va_allocator_alloc (GstAllocator * allocator,