mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 20:21:24 +00:00
vaapibufferpool: don't change config when forcing video meta
VA-API based buffer might need a video meta because of different strides. But when donwstream doesn't support video meta we need to force the usage of video meta. Before we changed the buffer pool configuration, but actually this is a hack and we cannot rely on that for downstream. This patch add a check fo raw video caps and allocator is VA-API, then the option is enabled without changing the pool configuration. In this case the element is responsible to copy the frame to a simple buffer with the expected strides. https://bugzilla.gnome.org/show_bug.cgi?id=785054
This commit is contained in:
parent
516d6bb3e2
commit
ad705cc5a3
1 changed files with 5 additions and 6 deletions
|
@ -142,7 +142,7 @@ gst_vaapi_video_buffer_pool_set_config (GstBufferPool * pool,
|
||||||
const GstVideoInfo *negotiated_vinfo;
|
const GstVideoInfo *negotiated_vinfo;
|
||||||
GstVideoAlignment align;
|
GstVideoAlignment align;
|
||||||
GstAllocator *allocator;
|
GstAllocator *allocator;
|
||||||
gboolean ret, updated = FALSE;
|
gboolean ret;
|
||||||
guint size, min_buffers, max_buffers;
|
guint size, min_buffers, max_buffers;
|
||||||
guint surface_alloc_flags;
|
guint surface_alloc_flags;
|
||||||
|
|
||||||
|
@ -248,17 +248,16 @@ gst_vaapi_video_buffer_pool_set_config (GstBufferPool * pool,
|
||||||
if (gst_buffer_pool_config_has_option (config,
|
if (gst_buffer_pool_config_has_option (config,
|
||||||
GST_BUFFER_POOL_OPTION_VIDEO_META)) {
|
GST_BUFFER_POOL_OPTION_VIDEO_META)) {
|
||||||
priv->options |= GST_VAAPI_VIDEO_BUFFER_POOL_OPTION_VIDEO_META;
|
priv->options |= GST_VAAPI_VIDEO_BUFFER_POOL_OPTION_VIDEO_META;
|
||||||
} else {
|
} else if (gst_caps_is_video_raw (caps) && !priv->use_dmabuf_memory) {
|
||||||
gint i;
|
gint i;
|
||||||
|
|
||||||
for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&new_allocation_vinfo); i++) {
|
for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&new_allocation_vinfo); i++) {
|
||||||
if (GST_VIDEO_INFO_PLANE_OFFSET (&new_allocation_vinfo, i) !=
|
if (GST_VIDEO_INFO_PLANE_OFFSET (&new_allocation_vinfo, i) !=
|
||||||
GST_VIDEO_INFO_PLANE_OFFSET (&priv->vmeta_vinfo, i) ||
|
GST_VIDEO_INFO_PLANE_OFFSET (&priv->vmeta_vinfo, i) ||
|
||||||
GST_VIDEO_INFO_PLANE_STRIDE (&new_allocation_vinfo, i) !=
|
GST_VIDEO_INFO_PLANE_STRIDE (&new_allocation_vinfo, i) !=
|
||||||
GST_VIDEO_INFO_PLANE_STRIDE (&priv->vmeta_vinfo, i)) {
|
GST_VIDEO_INFO_PLANE_STRIDE (&priv->vmeta_vinfo, i)) {
|
||||||
priv->options |= GST_VAAPI_VIDEO_BUFFER_POOL_OPTION_VIDEO_META;
|
priv->options |= GST_VAAPI_VIDEO_BUFFER_POOL_OPTION_VIDEO_META;
|
||||||
gst_buffer_pool_config_add_option (config,
|
GST_INFO_OBJECT (pool, "adding unrequested video meta");
|
||||||
GST_BUFFER_POOL_OPTION_VIDEO_META);
|
|
||||||
updated = TRUE;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -277,7 +276,7 @@ gst_vaapi_video_buffer_pool_set_config (GstBufferPool * pool,
|
||||||
ret =
|
ret =
|
||||||
GST_BUFFER_POOL_CLASS
|
GST_BUFFER_POOL_CLASS
|
||||||
(gst_vaapi_video_buffer_pool_parent_class)->set_config (pool, config);
|
(gst_vaapi_video_buffer_pool_parent_class)->set_config (pool, config);
|
||||||
return !updated && ret;
|
return ret;
|
||||||
|
|
||||||
/* ERRORS */
|
/* ERRORS */
|
||||||
error_invalid_config:
|
error_invalid_config:
|
||||||
|
|
Loading…
Reference in a new issue