mem->surface = gst_msdk_system_allocator_create_surface (base_allocator);
+ if (!mem->surface) {
+ g_slice_free (GstMsdkSystemMemory, mem);
+ return NULL;
+ }
+
vip = &allocator->image_info;
gst_memory_init (&mem->parent_instance, 0,
base_allocator, NULL, GST_VIDEO_INFO_SIZE (vip), 0, 0,
GST_VIDEO_INFO_SIZE (vip));
- if (!ensure_data (mem))
+ if (!ensure_data (mem)) {
+ g_slice_free (mfxFrameSurface1, mem->surface);
+ g_slice_free (GstMsdkSystemMemory, mem);
return NULL;
+ }
return GST_MEMORY_CAST (mem);
}
_aligned_free (mem->cache);
g_slice_free (mfxFrameSurface1, mem->surface);
+ g_slice_free (GstMsdkSystemMemory, mem);
}
static GstMemory *
return NULL;
mem->surface = gst_msdk_video_allocator_get_surface (base_allocator);
- if (!mem->surface)
+ if (!mem->surface) {
+ g_slice_free (GstMsdkVideoMemory, mem);
return NULL;
+ }
vip = &allocator->image_info;
gst_memory_init (&mem->parent_instance, 0,
}
static void
+gst_msdk_video_allocator_free (GstAllocator * allocator, GstMemory * base_mem)
+{
+ GstMsdkVideoMemory *const mem = GST_MSDK_VIDEO_MEMORY_CAST (base_mem);
+
+ g_slice_free (GstMsdkVideoMemory, mem);
+}
+
+static void
gst_msdk_video_allocator_class_init (GstMsdkVideoAllocatorClass * klass)
{
GObjectClass *const object_class = G_OBJECT_CLASS (klass);
object_class->finalize = gst_msdk_video_allocator_finalize;
allocator_class->alloc = gst_msdk_video_allocator_alloc;
+ allocator_class->free = gst_msdk_video_allocator_free;
}
static void