Revision: 36197
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36197
Author:   schlaile
Date:     2011-04-17 10:05:27 +0000 (Sun, 17 Apr 2011)
Log Message:
-----------
== Sequencer ==

Fixes Fix for [#25713] VSE shows and renders wrong straight alpha gradient even 
after convert to pr
(see revision: 34540, fix by Janne)

By not breaking the seqcache interface API.

Added comments to header file, so that it is easier to understand, how the
cache API is supposed to work.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_sequencer.h
    trunk/blender/source/blender/blenkernel/intern/seqcache.c
    trunk/blender/source/blender/blenkernel/intern/sequencer.c

Modified: trunk/blender/source/blender/blenkernel/BKE_sequencer.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_sequencer.h     2011-04-17 
08:38:27 UTC (rev 36196)
+++ trunk/blender/source/blender/blenkernel/BKE_sequencer.h     2011-04-17 
10:05:27 UTC (rev 36197)
@@ -217,9 +217,16 @@
 
 void seq_stripelem_cache_cleanup(void);
 
+/* returned ImBuf is properly refed and has to be freed */
 struct ImBuf * seq_stripelem_cache_get(
        SeqRenderData context, struct Sequence * seq, 
        float cfra, seq_stripelem_ibuf_t type);
+
+/* passed ImBuf is properly refed, so ownership is *not* 
+   transfered to the cache.
+   you can pass the same ImBuf multiple times to the cache without problems.
+*/
+   
 void seq_stripelem_cache_put(
        SeqRenderData context, struct Sequence * seq, 
        float cfra, seq_stripelem_ibuf_t type, struct ImBuf * nval);

Modified: trunk/blender/source/blender/blenkernel/intern/seqcache.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/seqcache.c   2011-04-17 
08:38:27 UTC (rev 36196)
+++ trunk/blender/source/blender/blenkernel/intern/seqcache.c   2011-04-17 
10:05:27 UTC (rev 36197)
@@ -237,9 +237,7 @@
        key->cfra = cfra - seq->start;
        key->type = type;
 
-       /* Normally we want our own version, but start and end stills are 
duplicates of the original. */
-       if(ELEM(type, SEQ_STRIPELEM_IBUF_STARTSTILL, 
SEQ_STRIPELEM_IBUF_ENDSTILL)==0)
-               IMB_refImBuf(i);
+       IMB_refImBuf(i);
 
        e = (seqCacheEntry*) BLI_mempool_alloc(entrypool);
 

Modified: trunk/blender/source/blender/blenkernel/intern/sequencer.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sequencer.c  2011-04-17 
08:38:27 UTC (rev 36196)
+++ trunk/blender/source/blender/blenkernel/intern/sequencer.c  2011-04-17 
10:05:27 UTC (rev 36197)
@@ -1720,16 +1720,25 @@
 static void copy_to_ibuf_still(SeqRenderData context, Sequence * seq, float nr,
                               ImBuf * ibuf)
 {
-       if (nr == 0) {
-               seq_stripelem_cache_put(
-                       context, seq, seq->start, 
-                       SEQ_STRIPELEM_IBUF_STARTSTILL, IMB_dupImBuf(ibuf));
-       } 
+       if (nr == 0 || nr == seq->len - 1) {
+               /* we have to store a copy, since the passed ibuf
+                  could be preprocessed afterwards (thereby silently
+                  changing the cached image... */
+               ibuf = IMB_dupImBuf(ibuf);
 
-       if (nr == seq->len - 1) {
-               seq_stripelem_cache_put(
-                       context, seq, seq->start, 
-                       SEQ_STRIPELEM_IBUF_ENDSTILL, IMB_dupImBuf(ibuf));
+               if (nr == 0) {
+                       seq_stripelem_cache_put(
+                               context, seq, seq->start, 
+                               SEQ_STRIPELEM_IBUF_STARTSTILL, ibuf);
+               } 
+
+               if (nr == seq->len - 1) {
+                       seq_stripelem_cache_put(
+                               context, seq, seq->start, 
+                               SEQ_STRIPELEM_IBUF_ENDSTILL, ibuf);
+               }
+
+               IMB_freeImBuf(ibuf);
        }
 }
 

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to