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>2006-12-04 23:00:17 +0300
committerPeter Schlaile <peter@schlaile.de>2006-12-04 23:00:17 +0300
commit0bb1256bf5078f7a1ccee75a57cbec81bfd43403 (patch)
tree01f2720a95d59c42371250f0627d3e85e11aff1d /source/blender/src/seqeffects.c
parent1cef024780e7f810ced1492bc3f57c7cd41ee8d6 (diff)
== Sequencer ==
Fixed an off by one error in Speed Controller. If no IPO is present, enlarging the strip will now "stretch" time. Shrinking doesn't work right now because of stripdata-handling...
Diffstat (limited to 'source/blender/src/seqeffects.c')
-rw-r--r--source/blender/src/seqeffects.c31
1 files changed, 28 insertions, 3 deletions
diff --git a/source/blender/src/seqeffects.c b/source/blender/src/seqeffects.c
index 3a0adfdaa39..d593bc8043d 100644
--- a/source/blender/src/seqeffects.c
+++ b/source/blender/src/seqeffects.c
@@ -2842,6 +2842,7 @@ void sequence_effect_speed_rebuild_map(struct Sequence * seq, int force)
float facf0 = seq->facf0;
float ctime, div;
int cfra;
+ float fallback_fac;
SpeedControlVars * v = (SpeedControlVars *)seq->effectdata;
/* if not already done, load / initialize data */
@@ -2859,10 +2860,34 @@ void sequence_effect_speed_rebuild_map(struct Sequence * seq, int force)
v->frameMap = MEM_callocN(sizeof(float) * v->length,
"speedcontrol frameMap");
}
+
+ fallback_fac = 1.0;
+
+ /* if there is no IPO, try to make retiming easy by stretching the
+ strip */
+
+ if (!seq->ipo && seq->seq1 && seq->seq1->enddisp != seq->seq1->start
+ && seq->seq1->len != 0) {
+ fallback_fac = (float) seq->seq1->len /
+ (float) (seq->seq1->enddisp - seq->seq1->start);
+ /* FIXME: this strip stretching gets screwed by stripdata
+ handling one layer up.
+
+ So it currently works by enlarging, never by shrinking!
+
+ (IPOs still work, if used correctly)
+ */
+ if (fallback_fac > 1.0) {
+ fallback_fac = 1.0;
+ }
+ }
+
if ((v->flags & SEQ_SPEED_INTEGRATE) != 0) {
float cursor = 0;
- for (cfra = 0; cfra < v->length; cfra++) {
+ v->frameMap[0] = 0;
+
+ for (cfra = 1; cfra < v->length; cfra++) {
if(seq->ipo) {
if((seq->flag & SEQ_IPO_FRAME_LOCKED) != 0) {
ctime = frame_to_float(seq->startdisp
@@ -2877,7 +2902,7 @@ void sequence_effect_speed_rebuild_map(struct Sequence * seq, int force)
calc_ipo(seq->ipo, ctime/div);
execute_ipo((ID *)seq, seq->ipo);
} else {
- seq->facf0 = 1.0;
+ seq->facf0 = fallback_fac;
}
seq->facf0 *= v->globalSpeed;
@@ -2910,7 +2935,7 @@ void sequence_effect_speed_rebuild_map(struct Sequence * seq, int force)
seq->facf0 *= v->length;
}
if (!seq->ipo) {
- seq->facf0 = cfra;
+ seq->facf0 = (float) cfra * fallback_fac;
}
seq->facf0 *= v->globalSpeed;
if (seq->facf0 >= v->length) {