From: Nicolas Dufresne Date: Sun, 1 Mar 2015 18:15:40 +0000 (-0500) Subject: bufferpool: Don't stop the pool in set_config() X-Git-Tag: 1.6.1~485 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c740bad1a003e43c732183f18ed242b602e085a2;p=platform%2Fupstream%2Fgstreamer.git bufferpool: Don't stop the pool in set_config() Don't stop the pool in set_config(). Instead, let the controlling element manage it. Most of the time, when an active pool is being configured is because the caps didn't change. https://bugzilla.gnome.org/show_bug.cgi?id=745377 --- diff --git a/gst/gstbufferpool.c b/gst/gstbufferpool.c index 60cc77c..f865790 100644 --- a/gst/gstbufferpool.c +++ b/gst/gstbufferpool.c @@ -609,9 +609,9 @@ wrong_config: * * Set the configuration of the pool. If the pool is already configured, and * the configuration haven't change, this function will return %TRUE. If the - * pool is active, this function will try deactivating it. Buffers allocated - * form this pool must be returned or else this function will do nothing and - * return %FALSE. + * pool is active, this method will return %FALSE and active configuration + * will remain. Buffers allocated form this pool must be returned or else this + * function will do nothing and return %FALSE. * * @config is a #GstStructure that contains the configuration parameters for * the pool. A default and mandatory set of parameters can be configured with @@ -645,18 +645,8 @@ gst_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config) goto config_unchanged; /* can't change the settings when active */ - if (priv->active) { - GST_BUFFER_POOL_UNLOCK (pool); - if (!gst_buffer_pool_set_active (pool, FALSE)) { - GST_BUFFER_POOL_LOCK (pool); - goto was_active; - } - GST_BUFFER_POOL_LOCK (pool); - - /* not likely but as we released the lock */ - if (priv->active) - goto was_active; - } + if (priv->active) + goto was_active; /* we can't change when outstanding buffers */ if (g_atomic_int_get (&priv->outstanding) != 0) @@ -694,7 +684,7 @@ config_unchanged: was_active: { gst_structure_free (config); - GST_WARNING_OBJECT (pool, "can't change config, we are active"); + GST_INFO_OBJECT (pool, "can't change config, we are active"); GST_BUFFER_POOL_UNLOCK (pool); return FALSE; } diff --git a/tests/check/gst/gstbufferpool.c b/tests/check/gst/gstbufferpool.c index 96769cb..8dd265a 100644 --- a/tests/check/gst/gstbufferpool.c +++ b/tests/check/gst/gstbufferpool.c @@ -179,7 +179,6 @@ GST_START_TEST (test_pool_activation_and_config) GstBufferPool *pool = gst_buffer_pool_new (); GstStructure *config = gst_buffer_pool_get_config (pool); GstCaps *caps = gst_caps_new_empty_simple ("test/data"); - GstBuffer *buffer = NULL; /* unconfigured pool cannot be activated */ fail_if (gst_buffer_pool_set_active (pool, TRUE)); @@ -192,26 +191,11 @@ GST_START_TEST (test_pool_activation_and_config) config = gst_buffer_pool_get_config (pool); fail_unless (gst_buffer_pool_set_config (pool, config)); - /* setting a different config should deactivate the pool */ + /* setting a different config on active pool should fail */ config = gst_buffer_pool_get_config (pool); gst_buffer_pool_config_set_params (config, caps, 12, 10, 0); - fail_unless (gst_buffer_pool_set_config (pool, config)); - fail_if (gst_buffer_pool_is_active (pool)); - - /* though it should fail if there is outstanding buffers */ - gst_buffer_pool_set_active (pool, TRUE); - gst_buffer_pool_acquire_buffer (pool, &buffer, NULL); - fail_if (buffer == NULL); - config = gst_buffer_pool_get_config (pool); - gst_buffer_pool_config_set_params (config, caps, 10, 10, 0); fail_if (gst_buffer_pool_set_config (pool, config)); - - /* and work when last buffer is back */ - config = gst_buffer_pool_get_config (pool); - gst_buffer_pool_config_set_params (config, caps, 10, 10, 0); - gst_buffer_unref (buffer); - fail_unless (gst_buffer_pool_set_config (pool, config)); - fail_unless (gst_buffer_pool_set_active (pool, TRUE)); + fail_unless (gst_buffer_pool_is_active (pool)); gst_buffer_pool_set_active (pool, FALSE); gst_object_unref (pool);