mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-23 18:21:04 +00:00
vaapivideobufferpool: keep only current video info
Instead of keeping old and new GstVideoInfo video structure, we only keep one, the current one, the negotiated. The old one is not needed at all. https://bugzilla.gnome.org/show_bug.cgi?id=765435
This commit is contained in:
parent
3d9f8dd41f
commit
2643ae980a
1 changed files with 9 additions and 12 deletions
|
@ -44,8 +44,7 @@ enum
|
||||||
|
|
||||||
struct _GstVaapiVideoBufferPoolPrivate
|
struct _GstVaapiVideoBufferPoolPrivate
|
||||||
{
|
{
|
||||||
GstVideoInfo video_info[2];
|
GstVideoInfo video_info;
|
||||||
guint video_info_index;
|
|
||||||
GstAllocator *allocator;
|
GstAllocator *allocator;
|
||||||
GstVideoInfo alloc_info;
|
GstVideoInfo alloc_info;
|
||||||
GstVaapiDisplay *display;
|
GstVaapiDisplay *display;
|
||||||
|
@ -138,8 +137,8 @@ gst_vaapi_video_buffer_pool_set_config (GstBufferPool * pool,
|
||||||
GstVaapiVideoBufferPoolPrivate *const priv =
|
GstVaapiVideoBufferPoolPrivate *const priv =
|
||||||
GST_VAAPI_VIDEO_BUFFER_POOL (pool)->priv;
|
GST_VAAPI_VIDEO_BUFFER_POOL (pool)->priv;
|
||||||
GstCaps *caps = NULL;
|
GstCaps *caps = NULL;
|
||||||
GstVideoInfo *const cur_vip = &priv->video_info[priv->video_info_index];
|
GstVideoInfo *const cur_vip = &priv->video_info;
|
||||||
GstVideoInfo *const new_vip = &priv->video_info[!priv->video_info_index];
|
GstVideoInfo new_vip;
|
||||||
GstVideoAlignment align;
|
GstVideoAlignment align;
|
||||||
GstAllocator *allocator;
|
GstAllocator *allocator;
|
||||||
gboolean changed_caps, use_dmabuf_memory;
|
gboolean changed_caps, use_dmabuf_memory;
|
||||||
|
@ -148,7 +147,7 @@ gst_vaapi_video_buffer_pool_set_config (GstBufferPool * pool,
|
||||||
goto error_invalid_config;
|
goto error_invalid_config;
|
||||||
if (!caps)
|
if (!caps)
|
||||||
goto error_no_caps;
|
goto error_no_caps;
|
||||||
if (!gst_video_info_from_caps (new_vip, caps))
|
if (!gst_video_info_from_caps (&new_vip, caps))
|
||||||
goto error_invalid_caps;
|
goto error_invalid_caps;
|
||||||
|
|
||||||
use_dmabuf_memory = gst_buffer_pool_config_has_option (config,
|
use_dmabuf_memory = gst_buffer_pool_config_has_option (config,
|
||||||
|
@ -158,7 +157,7 @@ gst_vaapi_video_buffer_pool_set_config (GstBufferPool * pool,
|
||||||
g_clear_object (&priv->allocator);
|
g_clear_object (&priv->allocator);
|
||||||
}
|
}
|
||||||
|
|
||||||
changed_caps = !priv->allocator || gst_video_info_changed (cur_vip, new_vip);
|
changed_caps = !priv->allocator || gst_video_info_changed (cur_vip, &new_vip);
|
||||||
if (changed_caps) {
|
if (changed_caps) {
|
||||||
const GstVideoInfo *alloc_vip;
|
const GstVideoInfo *alloc_vip;
|
||||||
guint flags = 0;
|
guint flags = 0;
|
||||||
|
@ -167,16 +166,16 @@ gst_vaapi_video_buffer_pool_set_config (GstBufferPool * pool,
|
||||||
/* XXX: also needs fixed strides/offsets */
|
/* XXX: also needs fixed strides/offsets */
|
||||||
flags |= GST_VAAPI_SURFACE_ALLOC_FLAG_LINEAR_STORAGE;
|
flags |= GST_VAAPI_SURFACE_ALLOC_FLAG_LINEAR_STORAGE;
|
||||||
allocator =
|
allocator =
|
||||||
gst_vaapi_dmabuf_allocator_new (priv->display, new_vip, flags);
|
gst_vaapi_dmabuf_allocator_new (priv->display, &new_vip, flags);
|
||||||
} else {
|
} else {
|
||||||
allocator = gst_vaapi_video_allocator_new (priv->display, new_vip, 0);
|
allocator = gst_vaapi_video_allocator_new (priv->display, &new_vip, 0);
|
||||||
}
|
}
|
||||||
if (!allocator)
|
if (!allocator)
|
||||||
goto error_create_allocator;
|
goto error_create_allocator;
|
||||||
gst_object_replace ((GstObject **) & priv->allocator,
|
gst_object_replace ((GstObject **) & priv->allocator,
|
||||||
GST_OBJECT_CAST (allocator));
|
GST_OBJECT_CAST (allocator));
|
||||||
gst_object_unref (allocator);
|
gst_object_unref (allocator);
|
||||||
priv->video_info_index ^= 1;
|
priv->video_info = new_vip;
|
||||||
|
|
||||||
alloc_vip = gst_allocator_get_vaapi_video_info (allocator, NULL);
|
alloc_vip = gst_allocator_get_vaapi_video_info (allocator, NULL);
|
||||||
if (!alloc_vip)
|
if (!alloc_vip)
|
||||||
|
@ -382,9 +381,7 @@ gst_vaapi_video_buffer_pool_init (GstVaapiVideoBufferPool * pool)
|
||||||
|
|
||||||
pool->priv = priv;
|
pool->priv = priv;
|
||||||
|
|
||||||
gst_video_info_init (&priv->video_info[0]);
|
gst_video_info_init (&priv->video_info);
|
||||||
gst_video_info_init (&priv->video_info[1]);
|
|
||||||
gst_video_info_init (&priv->alloc_info);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GstBufferPool *
|
GstBufferPool *
|
||||||
|
|
Loading…
Reference in a new issue