diff options
author | Peter Schlaile <peter@schlaile.de> | 2008-01-03 01:39:46 +0300 |
---|---|---|
committer | Peter Schlaile <peter@schlaile.de> | 2008-01-03 01:39:46 +0300 |
commit | 4aef3b64405d9ecf8412c29a25378cea3d330c65 (patch) | |
tree | a1d548f3ef1a245ba0a0c6b7733e0eddec36759c /source/blender/src/sequence.c | |
parent | 0d0fe50a70bc71f77167e8f85ab0686784a5bc61 (diff) |
== Sequencer ==
Fixed:
* crash with gamma tabs and blend modes
* crash on rect -> rect_float blend mode input
* alpha over and under have now input swapped
Diffstat (limited to 'source/blender/src/sequence.c')
-rw-r--r-- | source/blender/src/sequence.c | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/source/blender/src/sequence.c b/source/blender/src/sequence.c index f3a42f3eb72..953e6b197c6 100644 --- a/source/blender/src/sequence.c +++ b/source/blender/src/sequence.c @@ -1498,7 +1498,7 @@ static TStripElem* do_build_seq_array_recursively( break; } - sh = get_sequence_blend(seq_arr[i]); + sh = get_sequence_blend(seq); seq->facf0 = seq->facf1 = 1.0; @@ -1549,7 +1549,7 @@ static TStripElem* do_build_seq_array_recursively( } break; } - + if (se->ibuf_comp) { break; } @@ -1568,6 +1568,7 @@ static TStripElem* do_build_seq_array_recursively( case 0: { int x= se2->ibuf->x; int y= se2->ibuf->y; + int swap_input = FALSE; if (se1->ibuf_comp->rect_float || se2->ibuf->rect_float) { @@ -1592,16 +1593,32 @@ static TStripElem* do_build_seq_array_recursively( if (!se1->ibuf_comp->rect && !se2->ibuf_comp->rect_float) { - IMB_rect_from_float(se1->ibuf); + IMB_rect_from_float(se1->ibuf_comp); } if (!se2->ibuf->rect && !se2->ibuf_comp->rect_float) { IMB_rect_from_float(se2->ibuf); } - sh.execute(seq, cfra, seq->facf0, seq->facf1, x, y, - se1->ibuf_comp, se2->ibuf, 0, - se2->ibuf_comp); + /* bad hack, to fix crazy input ordering of + those two effects */ + + if (seq->blend_mode == SEQ_ALPHAOVER || + seq->blend_mode == SEQ_ALPHAUNDER) { + swap_input = TRUE; + } + + if (swap_input) { + sh.execute(seq, cfra, + seq->facf0, seq->facf1, x, y, + se2->ibuf, se1->ibuf_comp, 0, + se2->ibuf_comp); + } else { + sh.execute(seq, cfra, + seq->facf0, seq->facf1, x, y, + se1->ibuf_comp, se2->ibuf, 0, + se2->ibuf_comp); + } IMB_cache_limiter_insert(se2->ibuf_comp); IMB_cache_limiter_ref(se2->ibuf_comp); |