mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-10-04 01:32:42 +00:00
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
This commit is contained in:
parent
5e15d4aa60
commit
c740bad1a0
2 changed files with 8 additions and 34 deletions
|
@ -609,9 +609,9 @@ wrong_config:
|
||||||
*
|
*
|
||||||
* Set the configuration of the pool. If the pool is already configured, and
|
* 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
|
* the configuration haven't change, this function will return %TRUE. If the
|
||||||
* pool is active, this function will try deactivating it. Buffers allocated
|
* pool is active, this method will return %FALSE and active configuration
|
||||||
* form this pool must be returned or else this function will do nothing and
|
* will remain. Buffers allocated form this pool must be returned or else this
|
||||||
* return %FALSE.
|
* function will do nothing and return %FALSE.
|
||||||
*
|
*
|
||||||
* @config is a #GstStructure that contains the configuration parameters for
|
* @config is a #GstStructure that contains the configuration parameters for
|
||||||
* the pool. A default and mandatory set of parameters can be configured with
|
* 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;
|
goto config_unchanged;
|
||||||
|
|
||||||
/* can't change the settings when active */
|
/* 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)
|
if (priv->active)
|
||||||
goto was_active;
|
goto was_active;
|
||||||
}
|
|
||||||
|
|
||||||
/* we can't change when outstanding buffers */
|
/* we can't change when outstanding buffers */
|
||||||
if (g_atomic_int_get (&priv->outstanding) != 0)
|
if (g_atomic_int_get (&priv->outstanding) != 0)
|
||||||
|
@ -694,7 +684,7 @@ config_unchanged:
|
||||||
was_active:
|
was_active:
|
||||||
{
|
{
|
||||||
gst_structure_free (config);
|
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);
|
GST_BUFFER_POOL_UNLOCK (pool);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -179,7 +179,6 @@ GST_START_TEST (test_pool_activation_and_config)
|
||||||
GstBufferPool *pool = gst_buffer_pool_new ();
|
GstBufferPool *pool = gst_buffer_pool_new ();
|
||||||
GstStructure *config = gst_buffer_pool_get_config (pool);
|
GstStructure *config = gst_buffer_pool_get_config (pool);
|
||||||
GstCaps *caps = gst_caps_new_empty_simple ("test/data");
|
GstCaps *caps = gst_caps_new_empty_simple ("test/data");
|
||||||
GstBuffer *buffer = NULL;
|
|
||||||
|
|
||||||
/* unconfigured pool cannot be activated */
|
/* unconfigured pool cannot be activated */
|
||||||
fail_if (gst_buffer_pool_set_active (pool, TRUE));
|
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);
|
config = gst_buffer_pool_get_config (pool);
|
||||||
fail_unless (gst_buffer_pool_set_config (pool, config));
|
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);
|
config = gst_buffer_pool_get_config (pool);
|
||||||
gst_buffer_pool_config_set_params (config, caps, 12, 10, 0);
|
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));
|
fail_if (gst_buffer_pool_set_config (pool, config));
|
||||||
|
fail_unless (gst_buffer_pool_is_active (pool));
|
||||||
/* 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));
|
|
||||||
|
|
||||||
gst_buffer_pool_set_active (pool, FALSE);
|
gst_buffer_pool_set_active (pool, FALSE);
|
||||||
gst_object_unref (pool);
|
gst_object_unref (pool);
|
||||||
|
|
Loading…
Reference in a new issue