[vlc-commits] picture_pool: add enumeration helper

Rémi Denis-Courmont git at videolan.org
Mon Nov 3 19:15:58 CET 2014


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Mon Nov  3 19:55:41 2014 +0200| [bfe3ffd17ebfbae8ce2ae27f17090517c79e7a01] | committer: Rémi Denis-Courmont

picture_pool: add enumeration helper

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=bfe3ffd17ebfbae8ce2ae27f17090517c79e7a01
---

 include/vlc_picture_pool.h |   13 +++++++++++++
 src/libvlccore.sym         |    1 +
 src/misc/picture_pool.c    |    9 +++++++++
 3 files changed, 23 insertions(+)

diff --git a/include/vlc_picture_pool.h b/include/vlc_picture_pool.h
index 72278c9..aa51678 100644
--- a/include/vlc_picture_pool.h
+++ b/include/vlc_picture_pool.h
@@ -96,6 +96,19 @@ VLC_API void picture_pool_Release( picture_pool_t * );
 VLC_API picture_t * picture_pool_Get( picture_pool_t * ) VLC_USED;
 
 /**
+ * Enumerates all pictures in a pool, both free and allocated.
+ *
+ * @param cb callback to invoke once for each picture
+ * @param data opaque data parameter for the callback (first argument)
+ *
+ * @note Allocated pictures may be accessed asynchronously by other threads.
+ * Therefore, only read-only picture parameters can be read by the callback,
+ * typically picture_t.p_sys.
+ */
+VLC_API void picture_pool_Enum( picture_pool_t *,
+                                void (*cb)(void *, picture_t *), void *data );
+
+/**
  * Forcefully return all pictures in the pool to free/unallocated state.
  *
  * @warning This can only be called when it is known that all pending
diff --git a/src/libvlccore.sym b/src/libvlccore.sym
index b53ad9d..10e036a 100644
--- a/src/libvlccore.sym
+++ b/src/libvlccore.sym
@@ -303,6 +303,7 @@ picture_NewFromResource
 picture_pool_Release
 picture_pool_Get
 picture_pool_GetSize
+picture_pool_Enum
 picture_pool_New
 picture_pool_NewExtended
 picture_pool_NewFromFormat
diff --git a/src/misc/picture_pool.c b/src/misc/picture_pool.c
index dac7ef6..2d52517 100644
--- a/src/misc/picture_pool.c
+++ b/src/misc/picture_pool.c
@@ -334,3 +334,12 @@ bool picture_pool_NeedsLocking(const picture_pool_t *pool)
 {
     return pool->pic_lock != NULL || pool->pic_unlock != NULL;
 }
+
+void picture_pool_Enum(picture_pool_t *pool, void (*cb)(void *, picture_t *),
+                       void *opaque)
+{
+    /* NOTE: So far, the pictures table cannot change after the pool is created
+     * so there is no need to lock the pool mutex here. */
+    for (unsigned i = 0; i < pool->picture_count; i++)
+        cb(opaque, pool->picture[i]);
+}



More information about the vlc-commits mailing list