[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21165] trunk/blender/source/blender: == Sequencer ==
Peter Schlaile
peter at schlaile.de
Fri Jun 26 09:32:25 CEST 2009
Revision: 21165
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21165
Author: schlaile
Date: 2009-06-26 09:32:24 +0200 (Fri, 26 Jun 2009)
Log Message:
-----------
== Sequencer ==
This fixes several issues with the Speed Control Effect:
* IPO curve-deletion resulted in non-working effect
* easy retiming only allowed enlarging of strips,
now shrinking is also possible (easy retiming:
use the right display handle of input strip and
shrink or enlarge, will make the speed of the
strip exactly fit the effect strip's length)
* frames after end-of-display of input strips can
now be accessed (which is necessary for fix #2)
=> just use easy retiming from now on, it's fun :)
Modified Paths:
--------------
trunk/blender/source/blender/include/BSE_sequence.h
trunk/blender/source/blender/src/buttons_scene.c
trunk/blender/source/blender/src/editseq.c
trunk/blender/source/blender/src/seqeffects.c
trunk/blender/source/blender/src/sequence.c
Modified: trunk/blender/source/blender/include/BSE_sequence.h
===================================================================
--- trunk/blender/source/blender/include/BSE_sequence.h 2009-06-26 02:49:47 UTC (rev 21164)
+++ trunk/blender/source/blender/include/BSE_sequence.h 2009-06-26 07:32:24 UTC (rev 21165)
@@ -66,8 +66,10 @@
char *give_seqname(struct Sequence *seq);
int evaluate_seq_frame(int cfra);
-struct StripElem *give_stripelem(struct Sequence *seq, int cfra);
-struct TStripElem *give_tstripelem(struct Sequence *seq, int cfra);
+struct StripElem *give_stripelem(struct Sequence *seq, int cfra,
+ int in_display_range);
+struct TStripElem *give_tstripelem(struct Sequence *seq, int cfra,
+ int in_display_range);
struct ImBuf *give_ibuf_seq(int rectx, int recty, int cfra, int chansel,
int render_size);
/* chansel: render this channel. Default=0 (renders end result)*/
Modified: trunk/blender/source/blender/src/buttons_scene.c
===================================================================
--- trunk/blender/source/blender/src/buttons_scene.c 2009-06-26 02:49:47 UTC (rev 21164)
+++ trunk/blender/source/blender/src/buttons_scene.c 2009-06-26 07:32:24 UTC (rev 21165)
@@ -767,7 +767,7 @@
if(last_seq->type==SEQ_IMAGE) {
if (last_seq->len > 1) {
/* CURRENT */
- StripElem * se= give_stripelem(last_seq, CFRA);
+ StripElem * se= give_stripelem(last_seq, CFRA, TRUE);
StripElem * last;
/* FIRST AND LAST */
@@ -809,7 +809,8 @@
}
}
else if(last_seq->type==SEQ_SCENE) {
- TStripElem * se= give_tstripelem(last_seq, (G.scene->r.cfra));
+ TStripElem * se= give_tstripelem(last_seq, (G.scene->r.cfra),
+ TRUE);
if(se && last_seq->scene) {
sprintf(str, "First: %d\nLast: %d\nCur: %d\n", last_seq->sfra+se->nr, last_seq->sfra, last_seq->sfra+last_seq->len-1);
}
@@ -882,7 +883,7 @@
cfra = last_seq->enddisp - 1;
}
- se = give_stripelem(last_seq, cfra);
+ se = give_stripelem(last_seq, cfra, TRUE);
if (se) {
uiDefBut(block, TEX,
Modified: trunk/blender/source/blender/src/editseq.c
===================================================================
--- trunk/blender/source/blender/src/editseq.c 2009-06-26 02:49:47 UTC (rev 21164)
+++ trunk/blender/source/blender/src/editseq.c 2009-06-26 07:32:24 UTC (rev 21165)
@@ -3720,7 +3720,7 @@
while (cfra < frame_end) {
/* new seq */
- se = give_stripelem(seq, cfra);
+ se = give_stripelem(seq, cfra, TRUE);
seq_new= alloc_sequence(((Editing *)G.scene->ed)->seqbasep, start_ofs, seq->machine);
seq_new->type= SEQ_IMAGE;
Modified: trunk/blender/source/blender/src/seqeffects.c
===================================================================
--- trunk/blender/source/blender/src/seqeffects.c 2009-06-26 02:49:47 UTC (rev 21164)
+++ trunk/blender/source/blender/src/seqeffects.c 2009-06-26 07:32:24 UTC (rev 21165)
@@ -32,6 +32,7 @@
#include "MEM_guardedalloc.h"
#include "PIL_dynlib.h"
+#include "DNA_ipo_types.h"
#include "DNA_scene_types.h"
#include "DNA_sequence_types.h"
@@ -2805,20 +2806,11 @@
/* 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
+ if ((!seq->ipo || !seq->ipo->curve.first) &&
+ 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) {
@@ -2828,7 +2820,7 @@
v->lastValidFrame = 0;
for (cfra = 1; cfra < v->length; cfra++) {
- if(seq->ipo) {
+ if(seq->ipo && seq->ipo->curve.first) {
if((seq->flag & SEQ_IPO_FRAME_LOCKED) != 0) {
ctime = frame_to_float(seq->startdisp
+ cfra);
@@ -2848,7 +2840,7 @@
cursor += seq->facf0;
- if (cursor >= v->length) {
+ if (cursor >= seq->seq1->len) {
v->frameMap[cfra] = v->length - 1;
} else {
v->frameMap[cfra] = cursor;
@@ -2858,7 +2850,7 @@
} else {
v->lastValidFrame = 0;
for (cfra = 0; cfra < v->length; cfra++) {
- if(seq->ipo) {
+ if(seq->ipo && seq->ipo->curve.first) {
if((seq->flag & SEQ_IPO_FRAME_LOCKED) != 0) {
ctime = frame_to_float(seq->startdisp
+ cfra);
@@ -2876,11 +2868,11 @@
if (v->flags & SEQ_SPEED_COMPRESS_IPO_Y) {
seq->facf0 *= v->length;
}
- if (!seq->ipo) {
+ if ((!seq->ipo || !seq->ipo->curve.first)) {
seq->facf0 = (float) cfra * fallback_fac;
}
seq->facf0 *= v->globalSpeed;
- if (seq->facf0 >= v->length) {
+ if (seq->facf0 >= seq->seq1->len) {
seq->facf0 = v->length - 1;
} else {
v->lastValidFrame = cfra;
Modified: trunk/blender/source/blender/src/sequence.c
===================================================================
--- trunk/blender/source/blender/src/sequence.c 2009-06-26 02:49:47 UTC (rev 21164)
+++ trunk/blender/source/blender/src/sequence.c 2009-06-26 07:32:24 UTC (rev 21165)
@@ -838,11 +838,13 @@
se->ibuf);
}
-static int give_stripelem_index(Sequence *seq, int cfra)
+static int give_stripelem_index(Sequence *seq, int cfra, int in_display_range)
{
int nr;
- if(seq->startdisp >cfra || seq->enddisp <= cfra) return -1;
+ if (in_display_range) {
+ if(seq->startdisp >cfra || seq->enddisp <= cfra) return -1;
+ }
if(seq->len == 0) return -1;
if(seq->flag&SEQ_REVERSE_FRAMES) {
/*reverse frame in this sequence */
@@ -872,7 +874,7 @@
return se;
}
-TStripElem *give_tstripelem(Sequence *seq, int cfra)
+TStripElem *give_tstripelem(Sequence *seq, int cfra, int in_display_range)
{
TStripElem *se;
int nr;
@@ -882,7 +884,7 @@
se = seq->strip->tstripdata = alloc_tstripdata(seq->len,
"tstripelems");
}
- nr = give_stripelem_index(seq, cfra);
+ nr = give_stripelem_index(seq, cfra, in_display_range);
if (nr == -1) return 0;
if (se == 0) return 0;
@@ -943,13 +945,13 @@
return se;
}
-StripElem *give_stripelem(Sequence *seq, int cfra)
+StripElem *give_stripelem(Sequence *seq, int cfra, int in_display_range)
{
StripElem *se;
int nr;
se = seq->strip->stripdata;
- nr = give_stripelem_index(seq, cfra);
+ nr = give_stripelem_index(seq, cfra, in_display_range);
if (nr == -1) return 0;
if (se == 0) return 0;
@@ -1051,7 +1053,7 @@
#define PROXY_MAXFILE (2*FILE_MAXDIR+FILE_MAXFILE)
static int seq_proxy_get_fname(Sequence * seq, int cfra, char * name,
- int render_size)
+ int render_size, int in_display_range)
{
int frameno;
char dir[FILE_MAXDIR];
@@ -1060,7 +1062,8 @@
return FALSE;
}
- if (seq->flag & SEQ_USE_PROXY_CUSTOM_DIR) {
+ if ((seq->flag & SEQ_USE_PROXY_CUSTOM_DIR) ||
+ (seq->flag & SEQ_USE_PROXY_CUSTOM_FILE)) {
strcpy(dir, seq->strip->proxy->dir);
} else {
if (seq->type == SEQ_IMAGE || seq->type == SEQ_MOVIE) {
@@ -1082,12 +1085,12 @@
/* generate a seperate proxy directory for each preview size */
if (seq->type == SEQ_IMAGE) {
- StripElem * se = give_stripelem(seq, cfra);
+ StripElem * se = give_stripelem(seq, cfra, in_display_range);
snprintf(name, PROXY_MAXFILE, "%s/images/%d/%s_proxy",
dir, render_size, se->name);
frameno = 1;
} else if (seq->type == SEQ_MOVIE) {
- TStripElem * tse = give_tstripelem(seq, cfra);
+ TStripElem * tse = give_tstripelem(seq, cfra,in_display_range);
frameno = tse->nr + seq->anim_startofs;
@@ -1095,7 +1098,7 @@
seq->strip->stripdata->name,
render_size);
} else {
- TStripElem * tse = give_tstripelem(seq, cfra);
+ TStripElem * tse = give_tstripelem(seq, cfra,in_display_range);
frameno = tse->nr + seq->anim_startofs;
@@ -1113,7 +1116,7 @@
}
static struct ImBuf * seq_proxy_fetch(Sequence * seq, int cfra,
- int render_size)
+ int render_size, int in_display_range)
{
char name[PROXY_MAXFILE];
@@ -1127,10 +1130,11 @@
}
if (seq->flag & SEQ_USE_PROXY_CUSTOM_FILE) {
- TStripElem * tse = give_tstripelem(seq, cfra);
+ TStripElem * tse = give_tstripelem(seq, cfra,in_display_range);
int frameno = tse->nr + seq->anim_startofs;
if (!seq->strip->proxy->anim) {
- if (!seq_proxy_get_fname(seq, cfra,name,render_size)) {
+ if (!seq_proxy_get_fname(seq, cfra,name,render_size,
+ in_display_range)) {
return 0;
}
@@ -1143,7 +1147,8 @@
return IMB_anim_absolute(seq->strip->proxy->anim, frameno);
}
- if (!seq_proxy_get_fname(seq, cfra, name, render_size)) {
+ if (!seq_proxy_get_fname(seq, cfra, name, render_size,
+ in_display_range)) {
return 0;
}
@@ -1155,7 +1160,8 @@
}
static void do_build_seq_ibuf(Sequence * seq, TStripElem *se, int cfra,
- int build_proxy_run, int render_size);
+ int build_proxy_run, int render_size,
+ int in_display_range);
static void seq_proxy_build_frame(Sequence * seq, int cfra, int render_size)
{
@@ -1180,11 +1186,11 @@
return;
}
- if (!seq_proxy_get_fname(seq, cfra, name, render_size)) {
+ if (!seq_proxy_get_fname(seq, cfra, name, render_size, TRUE)) {
return;
}
- se = give_tstripelem(seq, cfra);
+ se = give_tstripelem(seq, cfra, TRUE);
if (!se) {
return;
}
@@ -1194,7 +1200,7 @@
se->ibuf = 0;
}
- do_build_seq_ibuf(seq, se, cfra, TRUE, render_size);
+ do_build_seq_ibuf(seq, se, cfra, TRUE, render_size, TRUE);
if (!se->ibuf) {
return;
@@ -1244,7 +1250,7 @@
*/
for (cfra = seq->startdisp; cfra < seq->enddisp; cfra++) {
- TStripElem * tse = give_tstripelem(seq, cfra);
+ TStripElem * tse = give_tstripelem(seq, cfra, TRUE);
tse->flag &= ~STRIPELEM_PREVIEW_DONE;
}
@@ -1256,7 +1262,7 @@
if (seq->flag & SEQ_REVERSE_FRAMES) {
for (cfra = seq->enddisp-seq->endstill-1;
cfra >= seq->startdisp + seq->startstill; cfra--) {
- TStripElem * tse = give_tstripelem(seq, cfra);
+ TStripElem * tse = give_tstripelem(seq, cfra, TRUE);
if (!(tse->flag & STRIPELEM_PREVIEW_DONE)) {
set_timecursor(cfra);
@@ -1270,7 +1276,7 @@
} else {
for (cfra = seq->startdisp + seq->startstill;
cfra < seq->enddisp - seq->endstill; cfra++) {
- TStripElem * tse = give_tstripelem(seq, cfra);
+ TStripElem * tse = give_tstripelem(seq, cfra, TRUE);
if (!(tse->flag & STRIPELEM_PREVIEW_DONE)) {
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list