From 64d58b80c01b9dc30b332456f0f2cd08be512f97 Mon Sep 17 00:00:00 2001 From: Nicolas Dufresne Date: Tue, 15 Apr 2014 14:51:46 -0400 Subject: [PATCH] videodecoder: Retry setting configuration with modified config Buffer pool set_config() may return FALSE if requested configuration needed small changes. Reget the config and try setting it again. This ensure we have a configured pool if possible. --- gst-libs/gst/video/gstvideodecoder.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/gst-libs/gst/video/gstvideodecoder.c b/gst-libs/gst/video/gstvideodecoder.c index fce2ea7..eb2d5a1 100644 --- a/gst-libs/gst/video/gstvideodecoder.c +++ b/gst-libs/gst/video/gstvideodecoder.c @@ -3169,7 +3169,24 @@ gst_video_decoder_decide_allocation_default (GstVideoDecoder * decoder, config = gst_buffer_pool_get_config (pool); gst_buffer_pool_config_set_params (config, outcaps, size, min, max); gst_buffer_pool_config_set_allocator (config, allocator, ¶ms); - gst_buffer_pool_set_config (pool, config); + + if (!gst_buffer_pool_set_config (pool, config)) { + config = gst_buffer_pool_get_config (pool); + + /* If change are not acceptable, fallback to generic pool */ + if (!gst_buffer_pool_config_validate_params (config, outcaps, size, min, + max)) { + GST_DEBUG_OBJECT (decoder, "unsuported pool, making new pool"); + + gst_object_unref (pool); + pool = gst_video_buffer_pool_new (); + gst_buffer_pool_config_set_params (config, outcaps, size, min, max); + gst_buffer_pool_config_set_allocator (config, allocator, ¶ms); + } + + if (!gst_buffer_pool_set_config (pool, config)) + goto config_failed; + } if (update_allocator) gst_query_set_nth_allocation_param (query, 0, allocator, ¶ms); @@ -3187,6 +3204,12 @@ gst_video_decoder_decide_allocation_default (GstVideoDecoder * decoder, gst_object_unref (pool); return TRUE; + +config_failed: + GST_ELEMENT_ERROR (decoder, RESOURCE, SETTINGS, + ("Failed to configure the buffer pool"), + ("Configuration is most likely invalid, please report this issue.")); + return FALSE; } static gboolean -- 2.7.4