]> git.sesse.net Git - vlc/blobdiff - src/misc/picture_pool.c
es_format: avoid copy in video_format_IsSimilar() if possible
[vlc] / src / misc / picture_pool.c
index ce25461d48da5a7e781e1d1bfc7b84026e1386e1..98e093f130bee4d084ba11327b43baa4599768f8 100644 (file)
@@ -41,11 +41,11 @@ struct picture_gc_sys_t {
     picture_pool_t *pool;
     picture_t *picture;
     bool in_use;
-    int64_t tick;
+    uint64_t tick;
 };
 
 struct picture_pool_t {
-    int64_t        tick;
+    uint64_t       tick;
     /* */
     unsigned       picture_count;
     picture_t      **picture;
@@ -56,7 +56,7 @@ struct picture_pool_t {
     vlc_mutex_t lock;
 };
 
-static void picture_pool_Release(picture_pool_t *pool)
+void picture_pool_Release(picture_pool_t *pool)
 {
     bool destroy;
 
@@ -221,8 +221,6 @@ picture_pool_t *picture_pool_Reserve(picture_pool_t *master, unsigned count)
     if (!pool)
         goto error;
 
-    pool->pic_lock   = master->pic_lock;
-    pool->pic_unlock = master->pic_unlock;
     return pool;
 
 error:
@@ -231,11 +229,6 @@ error:
     return NULL;
 }
 
-void picture_pool_Delete(picture_pool_t *pool)
-{
-    picture_pool_Release(pool);
-}
-
 picture_t *picture_pool_Get(picture_pool_t *pool)
 {
     vlc_mutex_lock(&pool->lock);
@@ -258,7 +251,6 @@ picture_t *picture_pool_Get(picture_pool_t *pool)
             vlc_mutex_lock(&pool->lock);
             sys->in_use = false;
             pool->refs--;
-            vlc_mutex_unlock(&pool->lock);
             continue;
         }
 
@@ -331,7 +323,16 @@ void picture_pool_NonEmpty(picture_pool_t *pool)
     vlc_mutex_unlock(&pool->lock);
 }
 
-int picture_pool_GetSize(picture_pool_t *pool)
+unsigned picture_pool_GetSize(const picture_pool_t *pool)
 {
     return pool->picture_count;
 }
+
+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]);
+}