Sequencer: refactor clipboard copy to no longer increase user count.
[blender.git] / source / blender / blenkernel / intern / seqcache.c
index 4268b33cb146b5a4ba48c4aa6f337c5abb50757f..435d9369faab2a021c0206b1ea2e4db4d118ec2c 100644 (file)
@@ -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"
 #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;