]> git.sesse.net Git - vlc/commitdiff
picture_pool: add enumeration helper
authorRémi Denis-Courmont <remi@remlab.net>
Mon, 3 Nov 2014 17:55:41 +0000 (19:55 +0200)
committerRémi Denis-Courmont <remi@remlab.net>
Mon, 3 Nov 2014 17:55:41 +0000 (19:55 +0200)
include/vlc_picture_pool.h
src/libvlccore.sym
src/misc/picture_pool.c

index 72278c9ab4600516b248084c13f5fa20992fc188..aa51678800f1e56dd5fdb7e5ef0280c1e7d6ef6e 100644 (file)
@@ -95,6 +95,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.
  *
index b53ad9dfa66b18d3bc1aba78ea4b8beaea526c0d..10e036a2295169e2c95f77c487e89a3fba0bf687 100644 (file)
@@ -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
index dac7ef67edb86c6f29f83b65d9068922403035db..2d525178a80b9c280b8e71e83286ba27da3f156f 100644 (file)
@@ -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]);
+}