diff options
Diffstat (limited to 'source/blender/blenkernel/intern/seqcache.c')
-rw-r--r-- | source/blender/blenkernel/intern/seqcache.c | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/source/blender/blenkernel/intern/seqcache.c b/source/blender/blenkernel/intern/seqcache.c index 4268b33cb14..435d9369faa 100644 --- a/source/blender/blenkernel/intern/seqcache.c +++ b/source/blender/blenkernel/intern/seqcache.c @@ -33,6 +33,7 @@ #include "MEM_guardedalloc.h" #include "DNA_sequence_types.h" +#include "DNA_scene_types.h" #include "IMB_moviecache.h" #include "IMB_imbuf.h" @@ -41,12 +42,13 @@ #include "BLI_listbase.h" #include "BKE_sequencer.h" +#include "BKE_scene.h" typedef struct SeqCacheKey { struct Sequence *seq; SeqRenderData context; float cfra; - seq_stripelem_ibuf_t type; + eSeqStripElemIBuf type; } SeqCacheKey; typedef struct SeqPreprocessCacheElem { @@ -54,7 +56,7 @@ typedef struct SeqPreprocessCacheElem { struct Sequence *seq; SeqRenderData context; - seq_stripelem_ibuf_t type; + eSeqStripElemIBuf type; ImBuf *ibuf; } SeqPreprocessCacheElem; @@ -77,7 +79,9 @@ static bool seq_cmp_render_data(const SeqRenderData *a, const SeqRenderData *b) (a->bmain != b->bmain) || (a->scene != b->scene) || (a->motion_blur_shutter != b->motion_blur_shutter) || - (a->motion_blur_samples != b->motion_blur_samples)); + (a->motion_blur_samples != b->motion_blur_samples) || + (a->scene->r.views_format != b->scene->r.views_format) || + (a->view_id != b->view_id)); } static unsigned int seq_hash_render_data(const SeqRenderData *a) @@ -88,17 +92,18 @@ static unsigned int seq_hash_render_data(const SeqRenderData *a) rval ^= ((intptr_t) a->bmain) << 6; rval ^= ((intptr_t) a->scene) << 6; rval ^= (int)(a->motion_blur_shutter * 100.0f) << 10; - rval ^= a->motion_blur_samples << 24; + rval ^= a->motion_blur_samples << 16; + rval ^= ((a->scene->r.views_format * 2) + a->view_id) << 24; return rval; } static unsigned int seqcache_hashhash(const void *key_) { - const SeqCacheKey *key = (SeqCacheKey *) key_; + const SeqCacheKey *key = key_; unsigned int rval = seq_hash_render_data(&key->context); - rval ^= *(unsigned int *) &key->cfra; + rval ^= *(const unsigned int *) &key->cfra; rval += key->type; rval ^= ((intptr_t) key->seq) << 6; @@ -107,8 +112,8 @@ static unsigned int seqcache_hashhash(const void *key_) static bool seqcache_hashcmp(const void *a_, const void *b_) { - const SeqCacheKey *a = (SeqCacheKey *) a_; - const SeqCacheKey *b = (SeqCacheKey *) b_; + const SeqCacheKey *a = a_; + const SeqCacheKey *b = b_; return ((a->seq != b->seq) || (a->cfra != b->cfra) || @@ -148,7 +153,7 @@ void BKE_sequencer_cache_cleanup_sequence(Sequence *seq) IMB_moviecache_cleanup(moviecache, seqcache_key_check_seq, seq); } -struct ImBuf *BKE_sequencer_cache_get(const SeqRenderData *context, Sequence *seq, float cfra, seq_stripelem_ibuf_t type) +struct ImBuf *BKE_sequencer_cache_get(const SeqRenderData *context, Sequence *seq, float cfra, eSeqStripElemIBuf type) { if (moviecache && seq) { SeqCacheKey key; @@ -164,7 +169,7 @@ struct ImBuf *BKE_sequencer_cache_get(const SeqRenderData *context, Sequence *se return NULL; } -void BKE_sequencer_cache_put(const SeqRenderData *context, Sequence *seq, float cfra, seq_stripelem_ibuf_t type, ImBuf *i) +void BKE_sequencer_cache_put(const SeqRenderData *context, Sequence *seq, float cfra, eSeqStripElemIBuf type, ImBuf *i) { SeqCacheKey key; @@ -210,7 +215,7 @@ static void preprocessed_cache_destruct(void) preprocess_cache = NULL; } -ImBuf *BKE_sequencer_preprocessed_cache_get(const SeqRenderData *context, Sequence *seq, float cfra, seq_stripelem_ibuf_t type) +ImBuf *BKE_sequencer_preprocessed_cache_get(const SeqRenderData *context, Sequence *seq, float cfra, eSeqStripElemIBuf type) { SeqPreprocessCacheElem *elem; @@ -237,7 +242,7 @@ ImBuf *BKE_sequencer_preprocessed_cache_get(const SeqRenderData *context, Sequen return NULL; } -void BKE_sequencer_preprocessed_cache_put(const SeqRenderData *context, Sequence *seq, float cfra, seq_stripelem_ibuf_t type, ImBuf *ibuf) +void BKE_sequencer_preprocessed_cache_put(const SeqRenderData *context, Sequence *seq, float cfra, eSeqStripElemIBuf type, ImBuf *ibuf) { SeqPreprocessCacheElem *elem; |