static void do_free_buffer (GstBufferPool * pool, GstBuffer * buffer) { GstBufferPoolPrivate *priv; GstBufferPoolClass *pclass; priv = pool->priv; pclass = GST_BUFFER_POOL_GET_CLASS (pool); g_atomic_int_add (&priv->cur_buffers, -1); GST_LOG_OBJECT (pool, "freeing buffer %p (%u left)", buffer, priv->cur_buffers); if (G_LIKELY (pclass->free_buffer)) pclass->free_buffer (pool, buffer); }
/* must be called with the lock */ static gboolean default_stop (GstBufferPool * pool) { GstBufferPoolPrivate *priv = pool->priv; GstBuffer *buffer; GstBufferPoolClass *pclass; pclass = GST_BUFFER_POOL_GET_CLASS (pool); /* clear the pool */ while ((buffer = gst_atomic_queue_pop (priv->queue))) { GST_LOG_OBJECT (pool, "freeing %p", buffer); gst_poll_read_control (priv->poll); if (G_LIKELY (pclass->free_buffer)) pclass->free_buffer (pool, buffer); } priv->cur_buffers = 0; return TRUE; }