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
path: root/source
diff options
context:
space:
mode:
authorPeter Schlaile <peter@schlaile.de>2007-12-26 22:30:49 +0300
committerPeter Schlaile <peter@schlaile.de>2007-12-26 22:30:49 +0300
commit6d13d4473418be180a345df4fb4375f03e7e256c (patch)
tree7a54bb10005bbfd90666b8cb8b8b646ea6b3dc5e /source
parente06edeb801b70adbc1d4b98474e7c5d6a930b7b3 (diff)
== Sequencer ==
Moved status info bar into panels. It was always shown on the wrong place... Added anim-startofs and anim-endofs, so that one can specify the range of _input_ that should be used. There is a subtle difference to start-ofs and end-ofs, which will show, when you use "Reverse Frames" or "Speed Control". Both effects operate on the input-range and _not_ on the display range! Now you can control both in a comfortable way. Only thing missing: a button to copy start-ofs and end-ofs to anim-startofs and anim-endofs. (Andy: that was the feature you missed, when storyboarding with the sequencer and the speed control effect :) Also: added File-Name and Dir-Name to redirect input as needed.
Diffstat (limited to 'source')
-rw-r--r--source/blender/include/BSE_sequence.h1
-rw-r--r--source/blender/include/butspace.h1
-rw-r--r--source/blender/makesdna/DNA_sequence_types.h7
-rw-r--r--source/blender/src/buttons_scene.c131
-rw-r--r--source/blender/src/drawseq.c139
-rw-r--r--source/blender/src/sequence.c61
6 files changed, 191 insertions, 149 deletions
diff --git a/source/blender/include/BSE_sequence.h b/source/blender/include/BSE_sequence.h
index 7bdf16e8e90..46e0aa6ff1f 100644
--- a/source/blender/include/BSE_sequence.h
+++ b/source/blender/include/BSE_sequence.h
@@ -60,6 +60,7 @@ void build_seqar_cb(struct ListBase *seqbase, struct Sequence ***seqar,
void free_editing(struct Editing *ed);
void calc_sequence(struct Sequence *seq);
void calc_sequence_disp(struct Sequence *seq);
+void reload_sequence_new_file(struct Sequence * seq);
void sort_seq(void);
void clear_scene_in_allseqs(struct Scene *sce);
diff --git a/source/blender/include/butspace.h b/source/blender/include/butspace.h
index 7eabc367782..4de9064b0bd 100644
--- a/source/blender/include/butspace.h
+++ b/source/blender/include/butspace.h
@@ -355,6 +355,7 @@ void curvemap_buttons(struct uiBlock *block, struct CurveMapping *cumap, char la
#define B_SEQ_BUT_EFFECT 1693
#define B_SEQ_BUT_RELOAD_ALL 1694
#define B_SEQ_BUT_TRANSFORM 1695
+#define B_SEQ_BUT_RELOAD_FILE 1696
/* *********************** */
#define B_ARMATUREBUTS 1800
diff --git a/source/blender/makesdna/DNA_sequence_types.h b/source/blender/makesdna/DNA_sequence_types.h
index db3790e6ea3..b401ee05433 100644
--- a/source/blender/makesdna/DNA_sequence_types.h
+++ b/source/blender/makesdna/DNA_sequence_types.h
@@ -119,7 +119,6 @@ typedef struct Sequence {
char name[24]; /* name, not set by default and dosnt need to be unique as with ID's */
int flag, type; /*flags bitmap (see below) and the type of sequence*/
- int pad;
int len; /* the length of the contense of this strip - before handles are applied */
int start, startofs, endofs;
int startstill, endstill;
@@ -128,6 +127,7 @@ typedef struct Sequence {
float mul, handsize;
/* is sfra needed anymore? - it looks like its only used in one place */
int sfra; /* starting frame according to the timeline of the scene. */
+ int anim_preseek;
Strip *strip;
@@ -151,10 +151,11 @@ typedef struct Sequence {
void *effectdata; /* Struct pointer for effect settings */
- int anim_preseek;
+ int anim_startofs; /* only use part of animation file */
+ int anim_endofs; /* is subtle different to startofs / endofs */
+
int blend_mode;
float blend_opacity;
- int pad2;
} Sequence;
typedef struct MetaStack {
diff --git a/source/blender/src/buttons_scene.c b/source/blender/src/buttons_scene.c
index b6b8805ba5c..5c9cacdb2fc 100644
--- a/source/blender/src/buttons_scene.c
+++ b/source/blender/src/buttons_scene.c
@@ -500,6 +500,10 @@ static void seq_panel_editing()
"Snd RAM", "Snd HD",
"", "Effect" };
uiBlock *block;
+ static char strdata[1024];
+ char * str = strdata;
+ char * p;
+ int yco;
block = uiNewBlock(&curarea->uiblocks, "seq_panel_editing",
UI_EMBOSS, UI_HELV, curarea->win);
@@ -578,6 +582,90 @@ static void seq_panel_editing()
0.0, last_seq->len, 0.0, 0.0, "End offset");
}
}
+
+
+ if(last_seq->type & SEQ_EFFECT)
+ sprintf(str, "Len: %d\nFrom %d - %d\n", last_seq->len, last_seq->startdisp, last_seq->enddisp-1);
+ else
+ sprintf(str, "Len: %d(%d)\n", last_seq->enddisp-last_seq->startdisp, last_seq->len);
+
+ str += strlen(str);
+
+ if(last_seq->type==SEQ_IMAGE) {
+ if (last_seq->len > 1) {
+ /* CURRENT */
+ StripElem * se= give_stripelem(last_seq, CFRA);
+ StripElem * last;
+
+ /* FIRST AND LAST */
+
+ if(last_seq->strip) {
+ se= last_seq->strip->stripdata;
+ last= se+last_seq->len-1;
+ if(last_seq->startofs) se+= last_seq->startofs;
+ if(last_seq->endofs) last-= last_seq->endofs;
+
+ sprintf(str, "First: %s at %d\nLast: %s at %d\n", se->name, last_seq->startdisp, last->name, last_seq->enddisp-1);
+ }
+ } else { /* single image */
+ if (last_seq->strip) {
+ sprintf(str, "Len: %d\n", last_seq->enddisp-last_seq->startdisp);
+ }
+ }
+
+ str += strlen(str);
+
+ /* orig size */
+ if(last_seq->strip) {
+ sprintf(str, "OrigSize: %d x %d\n", last_seq->strip->orx, last_seq->strip->ory);
+ }
+ }
+ else if(last_seq->type==SEQ_MOVIE) {
+ int sta= last_seq->startofs;
+ int end= last_seq->len-1-last_seq->endofs;
+
+ sprintf(str, "First: %d at %d\nLast: %d at %d\nCur: %d\n",
+ sta, last_seq->startdisp, end, last_seq->enddisp-1,
+ (G.scene->r.cfra)-last_seq->startdisp);
+ }
+ else if(last_seq->type==SEQ_SCENE) {
+ TStripElem * se= give_tstripelem(last_seq, (G.scene->r.cfra));
+ 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);
+ }
+ }
+ else if(last_seq->type==SEQ_RAM_SOUND
+ || last_seq->type == SEQ_HD_SOUND) {
+
+ int sta= last_seq->startofs;
+ int end= last_seq->len-1-last_seq->endofs;
+
+ sprintf(str, "First: %d at %d\nLast: %d at %d\nCur: %d\n",
+ sta, last_seq->startdisp, end, last_seq->enddisp-1,
+ (G.scene->r.cfra)-last_seq->startdisp);
+ }
+ else if(last_seq->type == SEQ_SPEED) {
+ SpeedControlVars * vars =
+ (SpeedControlVars*) last_seq->effectdata;
+
+ if (vars) {
+ sprintf(str, "Last mapped frame: %d at %d\n",
+ vars->lastValidFrame,
+ vars->lastValidFrame
+ + last_seq->startdisp);
+ }
+ }
+
+ str = strdata;
+ yco = 40;
+
+ while ((p = strchr(str, '\n'))) {
+ *p = 0;
+ uiDefBut(block, LABEL, 0, str, 10,yco,240,19, 0,
+ 0, 0, 0, 0, "");
+ str = p+1;
+ yco -= 20;
+ }
}
static void seq_panel_input()
@@ -590,7 +678,30 @@ static void seq_panel_input()
if(uiNewPanel(curarea, block, "Input", "Sequencer",
10, 230, 318, 204) == 0) return;
-
+ uiDefBut(block, TEX,
+ B_SEQ_BUT_RELOAD_FILE, "Dir: ",
+ 10,140,240,19, last_seq->strip->dir,
+ 0.0, 160.0, 100, 0, "");
+
+ if (last_seq->type == SEQ_IMAGE) {
+ StripElem * se = give_stripelem(last_seq, CFRA);
+
+ if (se) {
+ uiDefBut(block, TEX,
+ B_SEQ_BUT_RELOAD_FILE, "File: ",
+ 10, 120, 240,19, se->name,
+ 0.0, 80.0, 100, 0, "");
+ }
+
+ } else if (last_seq->type == SEQ_MOVIE ||
+ last_seq->type == SEQ_HD_SOUND ||
+ last_seq->type == SEQ_RAM_SOUND) {
+ uiDefBut(block, TEX,
+ B_SEQ_BUT_RELOAD_FILE, "File: ",
+ 10,120,240,19, last_seq->strip->stripdata->name,
+ 0.0, 80.0, 100, 0, "");
+ }
+
uiDefButBitI(block, TOG, SEQ_USE_CROP,
B_SEQ_BUT_RELOAD, "Use Crop",
10,100,240,19, &last_seq->flag,
@@ -645,8 +756,18 @@ static void seq_panel_input()
}
- uiDefButI(block, NUM, B_SEQ_BUT_RELOAD, "Preseek:",
- 10,0,150,19, &last_seq->anim_preseek,
+ uiDefButI(block, NUM,
+ B_SEQ_BUT_RELOAD_FILE, "A-Start",
+ 10, 0, 120, 20, &last_seq->anim_startofs,
+ 0.0, MAXFRAMEF, 0.0, 0.0, "Animation start offset in file");
+ uiDefButI(block, NUM,
+ B_SEQ_BUT_RELOAD_FILE, "A-End",
+ 130, 0, 120, 20, &last_seq->anim_endofs,
+ 0.0, MAXFRAMEF, 0.0, 0.0, "Animation end offset in file");
+
+
+ uiDefButI(block, NUM, B_SEQ_BUT_RELOAD, "MPEG-Preseek:",
+ 10, -20, 240,19, &last_seq->anim_preseek,
0.0, 50.0, 100,0,"On MPEG-seeking preseek this many frames");
}
@@ -948,7 +1069,9 @@ void do_sequencer_panels(unsigned short event)
case B_SEQ_BUT_EFFECT:
update_changed_seq_and_deps(last_seq, 0, 1);
break;
-
+ case B_SEQ_BUT_RELOAD_FILE:
+ reload_sequence_new_file(last_seq);
+ break;
case B_SEQ_BUT_RELOAD:
case B_SEQ_BUT_RELOAD_ALL:
update_seq_ipo_rect(last_seq);
diff --git a/source/blender/src/drawseq.c b/source/blender/src/drawseq.c
index b70a62cb65b..156a6c7b6c9 100644
--- a/source/blender/src/drawseq.c
+++ b/source/blender/src/drawseq.c
@@ -861,143 +861,6 @@ static void draw_image_seq(ScrArea *sa)
sa->win_swap= WIN_BACK_OK;
}
-static void draw_extra_seqinfo(void)
-{
- Sequence *last_seq = get_last_seq();
- StripElem *se, *last;
- float xco, xfac, yco, yfac;
- int sta, end;
- char str[256];
-
- if(last_seq==0) return;
-
- /* xfac: size of 1 pixel */
- xfac= G.v2d->cur.xmax - G.v2d->cur.xmin;
- xfac/= (float)(G.v2d->mask.xmax-G.v2d->mask.xmin);
- xco= G.v2d->cur.xmin+10*xfac;
-
- yfac= G.v2d->cur.ymax - G.v2d->cur.ymin;
- yfac/= (float)(G.v2d->mask.ymax-G.v2d->mask.ymin);
- yco= G.v2d->cur.ymin+40*yfac;
-
- BIF_ThemeColor(TH_TEXT_HI);
-
- /* NAME */
- glRasterPos3f(xco, yco, 0.0);
- strncpy(str, give_seqname(last_seq), 255);
- BMF_DrawString(G.font, str);
- xco += xfac*BMF_GetStringWidth(G.font, str) +10.0*xfac;
-
- if(last_seq->type==SEQ_SCENE && last_seq->scene) {
- glRasterPos3f(xco, yco, 0.0);
- BMF_DrawString(G.font, last_seq->scene->id.name+2);
- xco += xfac*BMF_GetStringWidth(G.font, last_seq->scene->id.name+2) +30.0*xfac;
- }
-
- /* LEN, dont bother with single images */
- if (check_single_seq(last_seq)==0) {
- if(last_seq->type & SEQ_EFFECT)
- sprintf(str, "len: %d From %d - %d", last_seq->len, last_seq->startdisp, last_seq->enddisp-1);
- else
- sprintf(str, "len: %d (%d)", last_seq->enddisp-last_seq->startdisp, last_seq->len);
-
- glRasterPos3f(xco, yco, 0.0);
-
- BMF_DrawString(G.font, str);
- xco += xfac*BMF_GetStringWidth(G.font, str) +10.0*xfac;
- }
-
-
- if(last_seq->type==SEQ_IMAGE) {
- if (last_seq->len > 1) {
- /* CURRENT */
- se= give_stripelem(last_seq, (G.scene->r.cfra));
- if(se) {
- sprintf(str, "Cur: %s%s", last_seq->strip->dir, se->name);
- glRasterPos3f(xco, yco, 0.0);
- BMF_DrawString(G.font, str);
- xco += xfac*BMF_GetStringWidth(G.font, str) +10.0*xfac;
- }
-
- /* FIRST AND LAST */
-
- if(last_seq->strip) {
- se= last_seq->strip->stripdata;
- last= se+last_seq->len-1;
- if(last_seq->startofs) se+= last_seq->startofs;
- if(last_seq->endofs) last-= last_seq->endofs;
-
- sprintf(str, "First: %s at %d Last: %s at %d", se->name, last_seq->startdisp, last->name, last_seq->enddisp-1);
- glRasterPos3f(xco, yco, 0.0);
- BMF_DrawString(G.font, str);
- xco += xfac*BMF_GetStringWidth(G.font, str) +30.0*xfac;
- }
- } else { /* single image */
- if (last_seq->strip) {
- sprintf(str, "Single: %s%s len: %d", last_seq->strip->dir, last_seq->strip->stripdata->name, last_seq->enddisp-last_seq->startdisp);
- glRasterPos3f(xco, yco, 0.0);
- BMF_DrawString(G.font, str);
- xco += xfac*BMF_GetStringWidth(G.font, str) +30.0*xfac;
- }
- }
- /* orig size */
- if(last_seq->strip) {
- sprintf(str, "OrigSize: %d x %d", last_seq->strip->orx, last_seq->strip->ory);
- glRasterPos3f(xco, yco, 0.0);
- BMF_DrawString(G.font, str);
- xco += xfac*BMF_GetStringWidth(G.font, str) +30.0*xfac;
- }
- }
- else if(last_seq->type==SEQ_MOVIE) {
-
- sta= last_seq->startofs;
- end= last_seq->len-1-last_seq->endofs;
-
- sprintf(str, "%s %s%s First: %d at %d Last: %d at %d Cur: %d",
- last_seq->name+2, last_seq->strip->dir, last_seq->strip->stripdata->name,
- sta, last_seq->startdisp, end, last_seq->enddisp-1, (G.scene->r.cfra)-last_seq->startdisp);
-
- glRasterPos3f(xco, yco, 0.0);
- BMF_DrawString(G.font, str);
- }
- else if(last_seq->type==SEQ_SCENE) {
- TStripElem * se= give_tstripelem(last_seq, (G.scene->r.cfra));
- if(se && last_seq->scene) {
- sprintf(str, "Cur: %d First: %d Last: %d", last_seq->sfra+se->nr, last_seq->sfra, last_seq->sfra+last_seq->len-1);
- glRasterPos3f(xco, yco, 0.0);
- BMF_DrawString(G.font, str);
- }
- }
- else if(last_seq->type==SEQ_RAM_SOUND
- || last_seq->type == SEQ_HD_SOUND) {
-
- sta= last_seq->startofs;
- end= last_seq->len-1-last_seq->endofs;
-
- sprintf(str, "%s %s%s First: %d at %d Last: %d at %d Cur: %d Gain: %.2f dB Pan: %.2f",
- last_seq->name+2, last_seq->strip->dir, last_seq->strip->stripdata->name,
- sta, last_seq->startdisp, end, last_seq->enddisp-1, (G.scene->r.cfra)-last_seq->startdisp,
- last_seq->level, last_seq->pan);
-
- glRasterPos3f(xco, yco, 0.0);
- BMF_DrawString(G.font, str);
- }
- else if(last_seq->type == SEQ_SPEED) {
- SpeedControlVars * vars =
- (SpeedControlVars*) last_seq->effectdata;
-
- if (vars) {
- sprintf(str, "Last mapped frame: %d at %d",
- vars->lastValidFrame,
- vars->lastValidFrame
- + last_seq->startdisp);
-
- glRasterPos3f(xco, yco, 0.0);
- BMF_DrawString(G.font, str);
- }
- }
-}
-
void seq_reset_imageofs(SpaceSeq *sseq)
{
sseq->xof = sseq->yof = sseq->zoom = 0;
@@ -1200,8 +1063,6 @@ void drawseqspace(ScrArea *sa, void *spacedata)
}
}
- draw_extra_seqinfo();
-
/* Draw markers */
draw_markers_timespace(1);
diff --git a/source/blender/src/sequence.c b/source/blender/src/sequence.c
index 5faffb38107..3d7ac3021a1 100644
--- a/source/blender/src/sequence.c
+++ b/source/blender/src/sequence.c
@@ -132,7 +132,10 @@ void free_strip(Strip *strip)
void new_tstripdata(Sequence *seq)
{
if(seq->strip) {
- free_tstripdata(seq->strip->len, seq->strip->tstripdata);
+ if (seq->strip->tstripdata) {
+ free_tstripdata(seq->strip->len,
+ seq->strip->tstripdata);
+ }
seq->strip->tstripdata= 0;
seq->strip->len= seq->len;
}
@@ -372,6 +375,58 @@ void calc_sequence(Sequence *seq)
}
}
+void reload_sequence_new_file(Sequence * seq)
+{
+ char str[FILE_MAXDIR+FILE_MAXFILE];
+
+ if (!(seq->type == SEQ_MOVIE || seq->type == SEQ_IMAGE ||
+ seq->type == SEQ_HD_SOUND)) {
+ return;
+ }
+
+ new_tstripdata(seq);
+
+ if (seq->type == SEQ_IMAGE) {
+ return;
+ }
+
+ strncpy(str, seq->strip->dir, FILE_MAXDIR-1);
+ strncat(str, seq->strip->stripdata->name, FILE_MAXFILE-1);
+
+ if (seq->type == SEQ_MOVIE) {
+ if(seq->anim) IMB_free_anim(seq->anim);
+ seq->anim = openanim(str, IB_rect);
+
+ if (!seq->anim) {
+ return;
+ }
+
+ seq->len = IMB_anim_get_duration(seq->anim);
+
+ seq->anim_preseek = IMB_anim_get_preseek(seq->anim);
+
+ seq->len -= seq->anim_startofs;
+ seq->len -= seq->anim_endofs;
+ if (seq->len < 0) {
+ seq->len = 0;
+ }
+ seq->strip->len = seq->len;
+ } else if (seq->type == SEQ_HD_SOUND) {
+ if(seq->hdaudio) sound_close_hdaudio(seq->hdaudio);
+ seq->hdaudio = sound_open_hdaudio(str);
+
+ if (!seq->hdaudio) {
+ return;
+ }
+
+ seq->strip->len = seq->len
+ = sound_hdaudio_get_duration(seq->hdaudio, FPS);
+ }
+
+
+ calc_sequence(seq);
+}
+
void sort_seq()
{
/* all strips together per kind, and in order of y location ("machine") */
@@ -685,7 +740,7 @@ StripElem *give_stripelem(Sequence *seq, int cfra)
if (nr == -1) return 0;
if (se == 0) return 0;
- se += nr;
+ se += nr + seq->anim_startofs;
return se;
}
@@ -991,7 +1046,7 @@ static void do_build_seq_ibuf(Sequence * seq, TStripElem *se, int cfra)
}
if(seq->anim) {
IMB_anim_set_preseek(seq->anim, seq->anim_preseek);
- se->ibuf = IMB_anim_absolute(seq->anim, se->nr);
+ se->ibuf = IMB_anim_absolute(seq->anim, se->nr + seq->anim_startofs);
}
if(se->ibuf == 0) {