[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49694] trunk/blender/source/blender/imbuf : Movie cache: add function to iterate through cache and remove items

Sergey Sharybin sergey.vfx at gmail.com
Wed Aug 8 14:16:46 CEST 2012


Revision: 49694
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49694
Author:   nazgul
Date:     2012-08-08 12:16:46 +0000 (Wed, 08 Aug 2012)
Log Message:
-----------
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.

Modified Paths:
--------------
    trunk/blender/source/blender/imbuf/IMB_moviecache.h
    trunk/blender/source/blender/imbuf/intern/moviecache.c

Modified: trunk/blender/source/blender/imbuf/IMB_moviecache.h
===================================================================
--- trunk/blender/source/blender/imbuf/IMB_moviecache.h	2012-08-08 12:15:26 UTC (rev 49693)
+++ trunk/blender/source/blender/imbuf/IMB_moviecache.h	2012-08-08 12:16:46 UTC (rev 49694)
@@ -60,6 +60,9 @@
 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

Modified: trunk/blender/source/blender/imbuf/intern/moviecache.c
===================================================================
--- trunk/blender/source/blender/imbuf/intern/moviecache.c	2012-08-08 12:15:26 UTC (rev 49693)
+++ trunk/blender/source/blender/imbuf/intern/moviecache.c	2012-08-08 12:16:46 UTC (rev 49694)
@@ -393,6 +393,32 @@
 	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)
 {




More information about the Bf-blender-cvs mailing list