[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36197] trunk/blender/source/blender/ blenkernel: == Sequencer ==

Peter Schlaile peter at schlaile.de
Sun Apr 17 12:05:27 CEST 2011


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);
 	}
 }
 




More information about the Bf-blender-cvs mailing list