[Bf-blender-cvs] [bdb3723] gooseberry: Sequencer: Implement priority queue based on frame number instead of memory size (Thanks to sergey for suggestion)

Antony Riakiotakis noreply at git.blender.org
Wed Feb 4 18:14:49 CET 2015


Commit: bdb372338b7f4a97b15af1685df9c3b836f0d51b
Author: Antony Riakiotakis
Date:   Wed Feb 4 18:14:12 2015 +0100
Branches: gooseberry
https://developer.blender.org/rBbdb372338b7f4a97b15af1685df9c3b836f0d51b

Sequencer: Implement priority queue based on frame number instead of
memory size (Thanks to sergey for suggestion)

===================================================================

M	source/blender/blenkernel/intern/seqcache.c

===================================================================

diff --git a/source/blender/blenkernel/intern/seqcache.c b/source/blender/blenkernel/intern/seqcache.c
index fd03186..5de9d16 100644
--- a/source/blender/blenkernel/intern/seqcache.c
+++ b/source/blender/blenkernel/intern/seqcache.c
@@ -27,6 +27,7 @@
  */
 
 #include <stddef.h>
+#include <stdlib.h>
 
 #include "BLI_sys_types.h"  /* for intptr_t */
 #include "BKE_global.h"
@@ -117,6 +118,36 @@ static bool seqcache_hashcmp(const void *a_, const void *b_)
 	        seq_cmp_render_data(&a->context, &b->context));
 }
 
+typedef struct {
+	int framenr;
+} SeqCachePriorityData;
+
+static void *moviecache_getprioritydata(void *key_v)
+{
+	SeqCacheKey *key = (SeqCacheKey *) key_v;
+	SeqCachePriorityData *priority_data;
+
+	priority_data = MEM_callocN(sizeof(*priority_data), "movie cache clip priority data");
+	priority_data->framenr = key->cfra;
+
+	return priority_data;
+}
+
+static int moviecache_getitempriority(void *last_userkey_v, void *priority_data_v)
+{
+	SeqCacheKey *last_userkey = (SeqCacheKey *) last_userkey_v;
+	SeqCachePriorityData *priority_data = (SeqCachePriorityData *) priority_data_v;
+
+	return -abs(last_userkey->cfra - priority_data->framenr);
+}
+
+static void moviecache_prioritydeleter(void *priority_data_v)
+{
+	SeqCachePriorityData *priority_data = (SeqCachePriorityData *) priority_data_v;
+
+	MEM_freeN(priority_data);
+}
+
 void BKE_sequencer_cache_destruct(void)
 {
 	if (moviecache)
@@ -130,6 +161,8 @@ void BKE_sequencer_cache_cleanup(void)
 	if (moviecache) {
 		IMB_moviecache_free(moviecache);
 		moviecache = IMB_moviecache_create("seqcache", sizeof(SeqCacheKey), seqcache_hashhash, seqcache_hashcmp);
+		IMB_moviecache_set_priority_callback(moviecache, moviecache_getprioritydata, moviecache_getitempriority,
+		                                     moviecache_prioritydeleter);
 	}
 
 	BKE_sequencer_preprocessed_cache_cleanup();
@@ -175,6 +208,8 @@ void BKE_sequencer_cache_put(const SeqRenderData *context, Sequence *seq, float
 
 	if (!moviecache) {
 		moviecache = IMB_moviecache_create("seqcache", sizeof(SeqCacheKey), seqcache_hashhash, seqcache_hashcmp);
+		IMB_moviecache_set_priority_callback(moviecache, moviecache_getprioritydata, moviecache_getitempriority,
+		                                     moviecache_prioritydeleter);
 	}
 
 	key.seq = seq;




More information about the Bf-blender-cvs mailing list