Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Schlaile <peter@schlaile.de>2011-04-17 14:05:27 +0400
committerPeter Schlaile <peter@schlaile.de>2011-04-17 14:05:27 +0400
commit163dbded30efc0eea40086cd5f9b8bafdad90790 (patch)
tree599bddc53c3e0df583dedeb539181b591886dcf9 /source/blender/blenkernel/intern
parent69f9104ea79e629119821ad6526c8e4293ac1f66 (diff)
== 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.
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r--source/blender/blenkernel/intern/seqcache.c4
-rw-r--r--source/blender/blenkernel/intern/sequencer.c27
2 files changed, 19 insertions, 12 deletions
diff --git a/source/blender/blenkernel/intern/seqcache.c b/source/blender/blenkernel/intern/seqcache.c
index e698402c538..00f88fb6202 100644
--- a/source/blender/blenkernel/intern/seqcache.c
+++ b/source/blender/blenkernel/intern/seqcache.c
@@ -237,9 +237,7 @@ void seq_stripelem_cache_put(
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);
diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c
index 7a6eb1adc9f..a765c9ee8f0 100644
--- a/source/blender/blenkernel/intern/sequencer.c
+++ b/source/blender/blenkernel/intern/sequencer.c
@@ -1720,16 +1720,25 @@ static ImBuf * copy_from_ibuf_still(SeqRenderData context, Sequence * seq,
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);
}
}