diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2012-08-08 16:16:46 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2012-08-08 16:16:46 +0400 |
commit | 69095a65d91d2f6f89c28455232e0d31c33093e4 (patch) | |
tree | 55b00fbc65b97fc23ac0f448502f578acd5e20b2 /source/blender | |
parent | 6292fed832241f109b54c47815ce921079bca869 (diff) |
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.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/imbuf/IMB_moviecache.h | 3 | ||||
-rw-r--r-- | source/blender/imbuf/intern/moviecache.c | 26 |
2 files changed, 29 insertions, 0 deletions
diff --git a/source/blender/imbuf/IMB_moviecache.h b/source/blender/imbuf/IMB_moviecache.h index 5e52563a89e..00d3368ae5f 100644 --- a/source/blender/imbuf/IMB_moviecache.h +++ b/source/blender/imbuf/IMB_moviecache.h @@ -60,6 +60,9 @@ void IMB_moviecache_set_priority_callback(struct MovieCache *cache, MovieCacheGe void IMB_moviecache_put(struct MovieCache *cache, void *userkey, struct ImBuf *ibuf); struct ImBuf* IMB_moviecache_get(struct MovieCache *cache, void *userkey); void IMB_moviecache_free(struct MovieCache *cache); + +void IMB_moviecache_cleanup(struct MovieCache *cache, int (cleanup_check_cb) (void *userkey, void *userdata), void *userdata); + void IMB_moviecache_get_cache_segments(struct MovieCache *cache, int proxy, int render_flags, int *totseg_r, int **points_r); #endif 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) { |