mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-20 00:31:13 +00:00
videodec: Don't use non-growable pool
As we don't know how many output buffers we need to operate, we need to avoid pool that can't grow. Otherwise the pipeline may stall, waiting for buffers. For now, we require it to be able to grow to at least 32 buffers, which I think is a fair amount of buffers for decoders. https://bugzilla.gnome.org/show_bug.cgi?id=726299
This commit is contained in:
parent
2262b9aa35
commit
62a4d065ed
1 changed files with 21 additions and 1 deletions
|
@ -47,6 +47,7 @@ GST_DEBUG_CATEGORY_EXTERN (GST_CAT_PERFORMANCE);
|
|||
#define DEFAULT_DEBUG_MV FALSE
|
||||
#define DEFAULT_MAX_THREADS 0
|
||||
#define DEFAULT_OUTPUT_CORRUPT TRUE
|
||||
#define REQUIRED_POOL_MAX_BUFFERS 32
|
||||
|
||||
enum
|
||||
{
|
||||
|
@ -1693,7 +1694,7 @@ gst_ffmpegviddec_decide_allocation (GstVideoDecoder * decoder, GstQuery * query)
|
|||
GstBufferPool *pool;
|
||||
guint size, min, max;
|
||||
GstStructure *config;
|
||||
gboolean have_videometa, have_alignment;
|
||||
gboolean have_videometa, have_alignment, update_pool;
|
||||
GstAllocator *allocator = NULL;
|
||||
GstAllocationParams params = { 0, 15, 0, 0, };
|
||||
|
||||
|
@ -1712,6 +1713,22 @@ gst_ffmpegviddec_decide_allocation (GstVideoDecoder * decoder, GstQuery * query)
|
|||
|
||||
gst_query_parse_nth_allocation_pool (query, 0, &pool, &size, &min, &max);
|
||||
|
||||
/* Don't use pool that can't grow, as we don't know how many buffer we'll
|
||||
* need, otherwise we may stall */
|
||||
if (max != 0 && max < REQUIRED_POOL_MAX_BUFFERS) {
|
||||
gst_object_unref (pool);
|
||||
pool = gst_video_buffer_pool_new ();
|
||||
max = 0;
|
||||
update_pool = TRUE;
|
||||
|
||||
/* if there is an allocator, also drop it, as it might be the reason we
|
||||
* have this limit. Default will be used */
|
||||
if (allocator) {
|
||||
gst_object_unref (allocator);
|
||||
allocator = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
config = gst_buffer_pool_get_config (pool);
|
||||
gst_buffer_pool_config_set_params (config, state->caps, size, min, max);
|
||||
/* we are happy with the default allocator but we would like to have 16 bytes
|
||||
|
@ -1799,6 +1816,9 @@ gst_ffmpegviddec_decide_allocation (GstVideoDecoder * decoder, GstQuery * query)
|
|||
/* and store */
|
||||
gst_buffer_pool_set_config (pool, config);
|
||||
|
||||
if (update_pool)
|
||||
gst_query_set_nth_allocation_pool (query, 0, pool, size, min, max);
|
||||
|
||||
gst_object_unref (pool);
|
||||
if (allocator)
|
||||
gst_object_unref (allocator);
|
||||
|
|
Loading…
Reference in a new issue