vaapibufferpool: add gst_vaapi_video_buffer_pool_copy_buffer()
authorVíctor Manuel Jáquez Leal <vjaquez@igalia.com>
Tue, 20 Feb 2018 01:25:13 +0000 (02:25 +0100)
committerVíctor Manuel Jáquez Leal <vjaquez@igalia.com>
Tue, 20 Feb 2018 16:57:12 +0000 (10:57 -0600)
This function will inform the element if it shall copy the generated
buffer by the pool to a system allocated buffer before pushing it
to downstream.

https://bugzilla.gnome.org/show_bug.cgi?id=785054

gst/vaapi/gstvaapivideobufferpool.c
gst/vaapi/gstvaapivideobufferpool.h

index 812893b..51539e2 100644 (file)
@@ -49,6 +49,7 @@ struct _GstVaapiVideoBufferPoolPrivate
   GstVaapiDisplay *display;
   guint options;
   guint use_dmabuf_memory:1;
+  guint forced_video_meta:1;
 };
 
 #define GST_VAAPI_VIDEO_BUFFER_POOL_GET_PRIVATE(obj) \
@@ -257,6 +258,7 @@ gst_vaapi_video_buffer_pool_set_config (GstBufferPool * pool,
           GST_VIDEO_INFO_PLANE_STRIDE (&new_allocation_vinfo, i) !=
           GST_VIDEO_INFO_PLANE_STRIDE (&priv->vmeta_vinfo, i)) {
         priv->options |= GST_VAAPI_VIDEO_BUFFER_POOL_OPTION_VIDEO_META;
+        priv->forced_video_meta = TRUE;
         GST_INFO_OBJECT (pool, "adding unrequested video meta");
         break;
       }
@@ -535,3 +537,25 @@ gst_vaapi_video_buffer_pool_new (GstVaapiDisplay * display)
   return g_object_new (GST_VAAPI_TYPE_VIDEO_BUFFER_POOL,
       "display", display, NULL);
 }
+
+/**
+ * gst_vaapi_video_buffer_pool_copy_buffer:
+ * @pool: a #GstVaapiVideoBufferPool
+ *
+ * Returns if the @pool force set of #GstVideoMeta. If so, the element
+ * should copy the generated buffer by the pool to a system allocated
+ * buffer. Otherwise, downstream could not display correctly the
+ * frame.
+ *
+ * Returns: %TRUE if #GstVideoMeta is forced.
+ **/
+gboolean
+gst_vaapi_video_buffer_pool_copy_buffer (GstBufferPool * pool)
+{
+  GstVaapiVideoBufferPoolPrivate *priv;
+
+  g_return_val_if_fail (GST_VAAPI_IS_VIDEO_BUFFER_POOL (pool), FALSE);
+
+  priv = GST_VAAPI_VIDEO_BUFFER_POOL_GET_PRIVATE (pool);
+  return priv->forced_video_meta;
+}
index 9498531..98be6f8 100644 (file)
@@ -134,6 +134,10 @@ G_GNUC_INTERNAL
 GstBufferPool *
 gst_vaapi_video_buffer_pool_new (GstVaapiDisplay * display);
 
+G_GNUC_INTERNAL
+gboolean
+gst_vaapi_video_buffer_pool_copy_buffer (GstBufferPool * pool);
+
 G_END_DECLS
 
 #endif /* GST_VAAPI_VIDEO_BUFFER_POOL_H */