From: Víctor Manuel Jáquez Leal Date: Tue, 20 Feb 2018 01:25:13 +0000 (+0100) Subject: vaapibufferpool: add gst_vaapi_video_buffer_pool_copy_buffer() X-Git-Tag: 1.19.3~503^2~746 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=bcc480b70e18eb5c1768aad5a8c28c2bfb9526a6;p=platform%2Fupstream%2Fgstreamer.git vaapibufferpool: add gst_vaapi_video_buffer_pool_copy_buffer() 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 --- diff --git a/gst/vaapi/gstvaapivideobufferpool.c b/gst/vaapi/gstvaapivideobufferpool.c index 812893b..51539e2 100644 --- a/gst/vaapi/gstvaapivideobufferpool.c +++ b/gst/vaapi/gstvaapivideobufferpool.c @@ -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; +} diff --git a/gst/vaapi/gstvaapivideobufferpool.h b/gst/vaapi/gstvaapivideobufferpool.h index 9498531..98be6f8 100644 --- a/gst/vaapi/gstvaapivideobufferpool.h +++ b/gst/vaapi/gstvaapivideobufferpool.h @@ -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 */