Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/imbuf/IMB_moviecache.h3
-rw-r--r--source/blender/imbuf/intern/moviecache.c26
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)
{