From 69095a65d91d2f6f89c28455232e0d31c33093e4 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Wed, 8 Aug 2012 12:16:46 +0000 Subject: Movie cache: add function to iterate through cache and remove items using custom check function for this. Currently unused, but would be helpful for sequencer cache. --- source/blender/imbuf/intern/moviecache.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'source/blender/imbuf/intern/moviecache.c') diff --git a/source/blender/imbuf/intern/moviecache.c b/source/blender/imbuf/intern/moviecache.c index 671c79a0659..71eae6c6c21 100644 --- a/source/blender/imbuf/intern/moviecache.c +++ b/source/blender/imbuf/intern/moviecache.c @@ -393,6 +393,32 @@ void IMB_moviecache_free(MovieCache *cache) MEM_freeN(cache); } +void IMB_moviecache_cleanup(MovieCache *cache, int (cleanup_check_cb) (void *userkey, void *userdata), void *userdata) +{ + GHashIterator *iter; + + iter = BLI_ghashIterator_new(cache->hash); + while (!BLI_ghashIterator_isDone(iter)) { + MovieCacheKey *key = BLI_ghashIterator_getKey(iter); + int remove; + + BLI_ghashIterator_step(iter); + + remove = cleanup_check_cb(key->userkey, userdata); + + if (remove) { + MovieCacheItem *item = BLI_ghashIterator_getValue(iter); + (void) item; /* silence unused variable when not using debug */ + + PRINT("%s: cache '%s' remove item %p\n", __func__, cache->name, item); + + BLI_ghash_remove(cache->hash, key, moviecache_keyfree, moviecache_valfree); + } + } + + BLI_ghashIterator_free(iter); +} + /* get segments of cached frames. useful for debugging cache policies */ void IMB_moviecache_get_cache_segments(MovieCache *cache, int proxy, int render_flags, int *totseg_r, int **points_r) { -- cgit v1.2.3