gstvaapivideomemory: allocator's image size getter
authorVíctor Manuel Jáquez Leal <victorx.jaquez@intel.com>
Fri, 29 Jul 2016 13:13:29 +0000 (15:13 +0200)
committerVíctor Manuel Jáquez Leal <victorx.jaquez@intel.com>
Fri, 29 Jul 2016 13:13:29 +0000 (15:13 +0200)
Add the method gst_allocator_get_vaapi_image_size() for the
GstVaapiVideoAllocator, which gets the size of the allocated images with the
current video info.

This method replaces the direct call to the allocator's image info when the
pool is configured.

gst/vaapi/gstvaapipluginbase.c
gst/vaapi/gstvaapivideomemory.c
gst/vaapi/gstvaapivideomemory.h

index c5b8b85..54fc403 100644 (file)
@@ -832,10 +832,8 @@ gst_vaapi_plugin_base_decide_allocation (GstVaapiPluginBase * plugin,
   if (!pool) {
     if (!ensure_srcpad_allocator (plugin, &vi))
       goto error_create_allocator;
-
     /* Update video size with allocator's image size */
-    size = GST_VIDEO_INFO_SIZE (&GST_VAAPI_VIDEO_ALLOCATOR_CAST
-        (plugin->srcpad_allocator)->image_info);
+    gst_allocator_get_vaapi_image_size (plugin->srcpad_allocator, &size);
     pool = gst_vaapi_plugin_base_create_pool (plugin, caps, size, min, max,
         pool_options, plugin->srcpad_allocator);
     if (!pool)
index ea09177..3b2b4d8 100644 (file)
@@ -1036,6 +1036,32 @@ gst_allocator_set_vaapi_video_info (GstAllocator * allocator,
   return TRUE;
 }
 
+/**
+ * gst_allocator_get_vaapi_image_size:
+ * @allocator: a #GstAllocator instance.
+ * @size: (out) (optional): the VA image size created by @allocator.
+ *
+ * This function gets the size of the VA images instantiated by the
+ * @allocator.
+ *
+ * Returns: %TRUE if @allocator is VA valid
+ **/
+gboolean
+gst_allocator_get_vaapi_image_size (GstAllocator * allocator, guint * size)
+{
+  GstVaapiVideoAllocator *alloc;
+
+  g_return_val_if_fail (GST_IS_ALLOCATOR (allocator), FALSE);
+
+  if (g_strcmp0 (allocator->mem_type, GST_VAAPI_VIDEO_MEMORY_NAME))
+    return FALSE;
+  alloc = GST_VAAPI_VIDEO_ALLOCATOR_CAST (allocator);
+  if (alloc && size)
+    *size = GST_VIDEO_INFO_SIZE (&alloc->image_info);
+
+  return TRUE;
+}
+
 gboolean
 gst_vaapi_is_dmabuf_allocator (GstAllocator * allocator)
 {
index c096a03..88a3814 100644 (file)
@@ -218,6 +218,10 @@ gst_allocator_set_vaapi_video_info (GstAllocator * allocator,
 
 G_GNUC_INTERNAL
 gboolean
+gst_allocator_get_vaapi_image_size (GstAllocator * allocator, guint * size);
+
+G_GNUC_INTERNAL
+gboolean
 gst_vaapi_is_dmabuf_allocator (GstAllocator * allocator);
 
 G_END_DECLS