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; _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs