[vlc-devel] [PATCH 2/7] picture_pool: add private functions to inc/dec the ref count
Thomas Guillem
thomas at gllm.fr
Wed Jan 11 09:13:09 CET 2017
picture_pool_DecRef() will return true if the pool is destroyed.
---
src/misc/picture_pool.c | 16 ++++++++++++----
src/misc/picture_pool.h | 11 +++++++++++
2 files changed, 23 insertions(+), 4 deletions(-)
diff --git a/src/misc/picture_pool.c b/src/misc/picture_pool.c
index 527da051e9..e7b9d34ac2 100644
--- a/src/misc/picture_pool.c
+++ b/src/misc/picture_pool.c
@@ -50,21 +50,29 @@ struct picture_pool_t {
picture_t *picture[];
};
-static void picture_pool_Destroy(picture_pool_t *pool)
+void picture_pool_IncRef(picture_pool_t *pool)
+{
+ atomic_fetch_add(&pool->refs, 1);
+}
+
+bool picture_pool_DecRef(picture_pool_t *pool)
{
if (atomic_fetch_sub(&pool->refs, 1) != 1)
- return;
+ return false;
+
+ assert(pool->picture_count - popcountll(pool->available) == 0);
vlc_cond_destroy(&pool->wait);
vlc_mutex_destroy(&pool->lock);
vlc_free(pool);
+ return true;
}
void picture_pool_Release(picture_pool_t *pool)
{
for (unsigned i = 0; i < pool->picture_count; i++)
picture_Release(pool->picture[i]);
- picture_pool_Destroy(pool);
+ picture_pool_DecRef(pool);
}
static void picture_pool_ReleasePicture(picture_t *clone)
@@ -87,7 +95,7 @@ static void picture_pool_ReleasePicture(picture_t *clone)
vlc_cond_signal(&pool->wait);
vlc_mutex_unlock(&pool->lock);
- picture_pool_Destroy(pool);
+ picture_pool_DecRef(pool);
}
static picture_t *picture_pool_ClonePicture(picture_pool_t *pool,
diff --git a/src/misc/picture_pool.h b/src/misc/picture_pool.h
index 35a14e7895..4296970f29 100644
--- a/src/misc/picture_pool.h
+++ b/src/misc/picture_pool.h
@@ -40,3 +40,14 @@ unsigned picture_pool_Reset( picture_pool_t * );
* picture_pool_Reset will also reset the cancel state to false.
*/
void picture_pool_Cancel( picture_pool_t *, bool canceled );
+
+/**
+ * Increments the reference count of the pool
+ */
+void picture_pool_IncRef(picture_pool_t *);
+
+/**
+ * Decrements the reference count of the pool
+ * @return true if the pool is destroyed (reference count to 0).
+ */
+bool picture_pool_DecRef(picture_pool_t *);
--
2.11.0
More information about the vlc-devel
mailing list