forked from bartvdbraak/blender
== 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.
This commit is contained in:
parent
e06edeb801
commit
6d13d44734
@ -60,6 +60,7 @@ void build_seqar_cb(struct ListBase *seqbase, struct Sequence ***seqar,
|
|||||||
void free_editing(struct Editing *ed);
|
void free_editing(struct Editing *ed);
|
||||||
void calc_sequence(struct Sequence *seq);
|
void calc_sequence(struct Sequence *seq);
|
||||||
void calc_sequence_disp(struct Sequence *seq);
|
void calc_sequence_disp(struct Sequence *seq);
|
||||||
|
void reload_sequence_new_file(struct Sequence * seq);
|
||||||
void sort_seq(void);
|
void sort_seq(void);
|
||||||
void clear_scene_in_allseqs(struct Scene *sce);
|
void clear_scene_in_allseqs(struct Scene *sce);
|
||||||
|
|
||||||
|
@ -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_EFFECT 1693
|
||||||
#define B_SEQ_BUT_RELOAD_ALL 1694
|
#define B_SEQ_BUT_RELOAD_ALL 1694
|
||||||
#define B_SEQ_BUT_TRANSFORM 1695
|
#define B_SEQ_BUT_TRANSFORM 1695
|
||||||
|
#define B_SEQ_BUT_RELOAD_FILE 1696
|
||||||
|
|
||||||
/* *********************** */
|
/* *********************** */
|
||||||
#define B_ARMATUREBUTS 1800
|
#define B_ARMATUREBUTS 1800
|
||||||
|
@ -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 */
|
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 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 len; /* the length of the contense of this strip - before handles are applied */
|
||||||
int start, startofs, endofs;
|
int start, startofs, endofs;
|
||||||
int startstill, endstill;
|
int startstill, endstill;
|
||||||
@ -128,6 +127,7 @@ typedef struct Sequence {
|
|||||||
float mul, handsize;
|
float mul, handsize;
|
||||||
/* is sfra needed anymore? - it looks like its only used in one place */
|
/* 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 sfra; /* starting frame according to the timeline of the scene. */
|
||||||
|
int anim_preseek;
|
||||||
|
|
||||||
Strip *strip;
|
Strip *strip;
|
||||||
|
|
||||||
@ -151,10 +151,11 @@ typedef struct Sequence {
|
|||||||
|
|
||||||
void *effectdata; /* Struct pointer for effect settings */
|
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;
|
int blend_mode;
|
||||||
float blend_opacity;
|
float blend_opacity;
|
||||||
int pad2;
|
|
||||||
} Sequence;
|
} Sequence;
|
||||||
|
|
||||||
typedef struct MetaStack {
|
typedef struct MetaStack {
|
||||||
|
@ -500,6 +500,10 @@ static void seq_panel_editing()
|
|||||||
"Snd RAM", "Snd HD",
|
"Snd RAM", "Snd HD",
|
||||||
"", "Effect" };
|
"", "Effect" };
|
||||||
uiBlock *block;
|
uiBlock *block;
|
||||||
|
static char strdata[1024];
|
||||||
|
char * str = strdata;
|
||||||
|
char * p;
|
||||||
|
int yco;
|
||||||
|
|
||||||
block = uiNewBlock(&curarea->uiblocks, "seq_panel_editing",
|
block = uiNewBlock(&curarea->uiblocks, "seq_panel_editing",
|
||||||
UI_EMBOSS, UI_HELV, curarea->win);
|
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");
|
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()
|
static void seq_panel_input()
|
||||||
@ -590,7 +678,30 @@ static void seq_panel_input()
|
|||||||
if(uiNewPanel(curarea, block, "Input", "Sequencer",
|
if(uiNewPanel(curarea, block, "Input", "Sequencer",
|
||||||
10, 230, 318, 204) == 0) return;
|
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,
|
uiDefButBitI(block, TOG, SEQ_USE_CROP,
|
||||||
B_SEQ_BUT_RELOAD, "Use Crop",
|
B_SEQ_BUT_RELOAD, "Use Crop",
|
||||||
10,100,240,19, &last_seq->flag,
|
10,100,240,19, &last_seq->flag,
|
||||||
@ -645,8 +756,18 @@ static void seq_panel_input()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uiDefButI(block, NUM, B_SEQ_BUT_RELOAD, "Preseek:",
|
uiDefButI(block, NUM,
|
||||||
10,0,150,19, &last_seq->anim_preseek,
|
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");
|
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:
|
case B_SEQ_BUT_EFFECT:
|
||||||
update_changed_seq_and_deps(last_seq, 0, 1);
|
update_changed_seq_and_deps(last_seq, 0, 1);
|
||||||
break;
|
break;
|
||||||
|
case B_SEQ_BUT_RELOAD_FILE:
|
||||||
|
reload_sequence_new_file(last_seq);
|
||||||
|
break;
|
||||||
case B_SEQ_BUT_RELOAD:
|
case B_SEQ_BUT_RELOAD:
|
||||||
case B_SEQ_BUT_RELOAD_ALL:
|
case B_SEQ_BUT_RELOAD_ALL:
|
||||||
update_seq_ipo_rect(last_seq);
|
update_seq_ipo_rect(last_seq);
|
||||||
|
@ -861,143 +861,6 @@ static void draw_image_seq(ScrArea *sa)
|
|||||||
sa->win_swap= WIN_BACK_OK;
|
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)
|
void seq_reset_imageofs(SpaceSeq *sseq)
|
||||||
{
|
{
|
||||||
sseq->xof = sseq->yof = sseq->zoom = 0;
|
sseq->xof = sseq->yof = sseq->zoom = 0;
|
||||||
@ -1200,8 +1063,6 @@ void drawseqspace(ScrArea *sa, void *spacedata)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
draw_extra_seqinfo();
|
|
||||||
|
|
||||||
/* Draw markers */
|
/* Draw markers */
|
||||||
draw_markers_timespace(1);
|
draw_markers_timespace(1);
|
||||||
|
|
||||||
|
@ -132,7 +132,10 @@ void free_strip(Strip *strip)
|
|||||||
void new_tstripdata(Sequence *seq)
|
void new_tstripdata(Sequence *seq)
|
||||||
{
|
{
|
||||||
if(seq->strip) {
|
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->tstripdata= 0;
|
||||||
seq->strip->len= seq->len;
|
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()
|
void sort_seq()
|
||||||
{
|
{
|
||||||
/* all strips together per kind, and in order of y location ("machine") */
|
/* 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 (nr == -1) return 0;
|
||||||
if (se == 0) return 0;
|
if (se == 0) return 0;
|
||||||
|
|
||||||
se += nr;
|
se += nr + seq->anim_startofs;
|
||||||
|
|
||||||
return se;
|
return se;
|
||||||
}
|
}
|
||||||
@ -991,7 +1046,7 @@ static void do_build_seq_ibuf(Sequence * seq, TStripElem *se, int cfra)
|
|||||||
}
|
}
|
||||||
if(seq->anim) {
|
if(seq->anim) {
|
||||||
IMB_anim_set_preseek(seq->anim, seq->anim_preseek);
|
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) {
|
if(se->ibuf == 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user