mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-22 01:31:03 +00:00
waylandsink: Do not offer SHM pool when DMABuf is negotiated
Pools are expected to produce DMABuf when the caps are negotiated with the associated caps feature. For that reason, avoid sharing the SHM pool in this case. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7903>
This commit is contained in:
parent
c67ac844ed
commit
f9c01f6479
2 changed files with 14 additions and 10 deletions
|
@ -1038,11 +1038,10 @@ gst_gtk_wayland_sink_propose_allocation (GstBaseSink * bsink, GstQuery * query)
|
||||||
GstCaps *caps;
|
GstCaps *caps;
|
||||||
GstBufferPool *pool = NULL;
|
GstBufferPool *pool = NULL;
|
||||||
gboolean need_pool;
|
gboolean need_pool;
|
||||||
GstAllocator *alloc;
|
|
||||||
|
|
||||||
gst_query_parse_allocation (query, &caps, &need_pool);
|
gst_query_parse_allocation (query, &caps, &need_pool);
|
||||||
|
|
||||||
if (need_pool) {
|
if (need_pool && !gst_video_is_dma_drm_caps (caps)) {
|
||||||
GstStructure *config;
|
GstStructure *config;
|
||||||
pool = gst_wl_video_buffer_pool_new ();
|
pool = gst_wl_video_buffer_pool_new ();
|
||||||
config = gst_buffer_pool_get_config (pool);
|
config = gst_buffer_pool_get_config (pool);
|
||||||
|
@ -1057,10 +1056,13 @@ gst_gtk_wayland_sink_propose_allocation (GstBaseSink * bsink, GstQuery * query)
|
||||||
if (pool)
|
if (pool)
|
||||||
g_object_unref (pool);
|
g_object_unref (pool);
|
||||||
|
|
||||||
alloc = gst_shm_allocator_get ();
|
if (!gst_video_is_dma_drm_caps (caps)) {
|
||||||
gst_query_add_allocation_param (query, alloc, NULL);
|
GstAllocator *alloc = gst_shm_allocator_get ();
|
||||||
|
gst_query_add_allocation_param (query, alloc, NULL);
|
||||||
|
g_object_unref (alloc);
|
||||||
|
}
|
||||||
|
|
||||||
gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL);
|
gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL);
|
||||||
g_object_unref (alloc);
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -790,7 +790,6 @@ gst_wayland_sink_propose_allocation (GstBaseSink * bsink, GstQuery * query)
|
||||||
GstCaps *caps;
|
GstCaps *caps;
|
||||||
GstBufferPool *pool = NULL;
|
GstBufferPool *pool = NULL;
|
||||||
gboolean need_pool;
|
gboolean need_pool;
|
||||||
GstAllocator *alloc;
|
|
||||||
GstVideoInfoDmaDrm drm_info;
|
GstVideoInfoDmaDrm drm_info;
|
||||||
GstVideoInfo vinfo;
|
GstVideoInfo vinfo;
|
||||||
guint size;
|
guint size;
|
||||||
|
@ -811,7 +810,7 @@ gst_wayland_sink_propose_allocation (GstBaseSink * bsink, GstQuery * query)
|
||||||
size = vinfo.size;
|
size = vinfo.size;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (need_pool) {
|
if (need_pool && !gst_video_is_dma_drm_caps (caps)) {
|
||||||
GstStructure *config;
|
GstStructure *config;
|
||||||
pool = gst_wl_video_buffer_pool_new ();
|
pool = gst_wl_video_buffer_pool_new ();
|
||||||
config = gst_buffer_pool_get_config (pool);
|
config = gst_buffer_pool_get_config (pool);
|
||||||
|
@ -825,10 +824,13 @@ gst_wayland_sink_propose_allocation (GstBaseSink * bsink, GstQuery * query)
|
||||||
if (pool)
|
if (pool)
|
||||||
g_object_unref (pool);
|
g_object_unref (pool);
|
||||||
|
|
||||||
alloc = gst_shm_allocator_get ();
|
if (!gst_video_is_dma_drm_caps (caps)) {
|
||||||
gst_query_add_allocation_param (query, alloc, NULL);
|
GstAllocator *alloc = gst_shm_allocator_get ();
|
||||||
|
gst_query_add_allocation_param (query, alloc, NULL);
|
||||||
|
g_object_unref (alloc);
|
||||||
|
}
|
||||||
|
|
||||||
gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL);
|
gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL);
|
||||||
g_object_unref (alloc);
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue