From: Nicolas Dufresne Date: Tue, 15 Apr 2014 18:51:46 +0000 (-0400) Subject: videodecoder: Retry setting configuration with modified config X-Git-Tag: 1.3.2~20 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=64d58b80c01b9dc30b332456f0f2cd08be512f97;p=platform%2Fupstream%2Fgst-plugins-base.git 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. --- diff --git a/gst-libs/gst/video/gstvideodecoder.c b/gst-libs/gst/video/gstvideodecoder.c index fce2ea731..eb2d5a117 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