79
79
#define snprintf _snprintf
82
/* **** XXX ******** */
83
//static void waitcursor(int val) {}
84
//static int blender_test_break() {return 0;}
83
static ImBuf* seq_render_strip_stack(
84
SeqRenderData context, ListBase *seqbasep, float cfra, int chanshown);
86
static ImBuf * seq_render_strip(
87
SeqRenderData context, Sequence * seq, float cfra);
89
static void seq_free_animdata(Scene *scene, Sequence *seq);
86
92
/* **** XXX ******** */
446
454
* in metastrips!)
447
455
**********************************************************************
450
static void do_seq_count(ListBase *seqbase, int *totseq)
457
if(seq->seqbase.first) do_seq_count(&seq->seqbase, totseq);
462
static void do_build_seqar(ListBase *seqbase, Sequence ***seqar, int depth)
469
if(seq->seqbase.first) do_build_seqar(&seq->seqbase, seqar, depth+1);
476
static void build_seqar(ListBase *seqbase, Sequence ***seqar, int *totseq)
481
do_seq_count(seqbase, totseq);
487
*seqar= MEM_mallocN(sizeof(void *)* *totseq, "seqar");
490
do_build_seqar(seqbase, seqar, 0);
495
458
static void do_seq_count_cb(ListBase *seqbase, int *totseq,
496
459
int (*test_func)(Sequence * seq))
625
588
seq->start= seq->startdisp= MAX3(seq->seq1->startdisp, seq->seq2->startdisp, seq->seq3->startdisp);
626
589
seq->enddisp= MIN3(seq->seq1->enddisp, seq->seq2->enddisp, seq->seq3->enddisp);
590
/* we cant help if strips don't overlap, it wont give useful results.
591
* but at least ensure 'len' is never negative which causes bad bugs elsewhere. */
592
if(seq->enddisp < seq->startdisp) {
593
/* simple start/end swap */
594
seq->start= seq->enddisp;
595
seq->enddisp = seq->startdisp;
596
seq->startdisp= seq->start;
597
seq->flag |= SEQ_INVALID_EFFECT;
600
seq->flag &= ~SEQ_INVALID_EFFECT;
627
603
seq->len= seq->enddisp - seq->startdisp;
629
606
calc_sequence_disp(scene, seq);
1013
991
int sta = seq->start;
1014
992
int end = seq->start+seq->len-1;
1016
if(seq->len == 0) return -1;
994
if (seq->type & SEQ_EFFECT) {
1018
1002
if(seq->flag&SEQ_REVERSE_FRAMES) {
1019
1003
/*reverse frame in this sequence */
1020
if(cfra <= sta) nr= seq->len-1;
1004
if(cfra <= sta) nr= end - sta;
1021
1005
else if(cfra >= end) nr= 0;
1022
1006
else nr= end - cfra;
1024
1008
if(cfra <= sta) nr= 0;
1025
else if(cfra >= end) nr= seq->len-1;
1009
else if(cfra >= end) nr= end - sta;
1026
1010
else nr= cfra - sta;
1897
1882
int doseq_gl= G.rendering ? /*(scene->r.seq_flag & R_SEQ_GL_REND)*/ 0 : /*(scene->r.seq_flag & R_SEQ_GL_PREV)*/ 1;
1898
1883
int have_seq= FALSE;
1899
Scene *sce= seq->scene; /* dont refer to seq->scene above this point!, it can be NULL */
1900
int sce_valid= FALSE;
1903
have_seq= (sce->r.scemode & R_DOSEQ) && sce->ed && sce->ed->seqbase.first;
1904
sce_valid= (sce->camera || have_seq);
1910
oldcfra= seq->scene->r.cfra;
1911
oldcamera= seq->scene->camera;
1886
/* dont refer to seq->scene above this point!, it can be NULL */
1887
if(seq->scene == NULL) {
1893
have_seq= (scene->r.scemode & R_DOSEQ) && scene->ed && scene->ed->seqbase.first;
1895
oldcfra= scene->r.cfra;
1896
scene->r.cfra= frame;
1898
if(seq->scene_camera)
1899
camera= seq->scene_camera;
1901
scene_camera_switch_update(scene);
1902
camera= scene->camera;
1905
if(have_seq==FALSE && camera==NULL) {
1906
scene->r.cfra= oldcfra;
1913
1910
/* prevent eternal loop */
1914
1911
doseq= context.scene->r.scemode & R_DOSEQ;
1915
1912
context.scene->r.scemode &= ~R_DOSEQ;
1917
seq->scene->r.cfra= frame;
1918
if(seq->scene_camera)
1919
seq->scene->camera= seq->scene_camera;
1921
scene_camera_switch_update(seq->scene);
1923
1914
#ifdef DURIAN_CAMERA_SWITCH
1924
1915
/* stooping to new low's in hackyness :( */
1925
oldmarkers= seq->scene->markers;
1926
seq->scene->markers.first= seq->scene->markers.last= NULL;
1916
oldmarkers= scene->markers;
1917
scene->markers.first= scene->markers.last= NULL;
1929
if(sequencer_view3d_cb && BLI_thread_is_main() && doseq_gl && (seq->scene == context.scene || have_seq==0) && seq->scene->camera) {
1920
if(sequencer_view3d_cb && BLI_thread_is_main() && doseq_gl && (scene == context.scene || have_seq==0) && camera) {
1930
1921
char err_out[256]= "unknown";
1931
1922
/* for old scened this can be uninitialized, should probably be added to do_versions at some point if the functionality stays */
1932
1923
if(context.scene->r.seq_prev_type==0)
1933
1924
context.scene->r.seq_prev_type = 3 /* ==OB_SOLID */;
1935
1926
/* opengl offscreen render */
1936
scene_update_for_newframe(context.bmain, seq->scene, seq->scene->lay);
1937
ibuf= sequencer_view3d_cb(seq->scene, context.rectx, context.recty, IB_rect, context.scene->r.seq_prev_type, err_out);
1927
scene_update_for_newframe(context.bmain, scene, scene->lay);
1928
ibuf= sequencer_view3d_cb(scene, camera, context.rectx, context.recty, IB_rect, context.scene->r.seq_prev_type, err_out);
1938
1929
if(ibuf == NULL) {
1939
1930
fprintf(stderr, "seq_render_scene_strip_impl failed to get opengl buffer: %s\n", err_out);
1943
Render *re = RE_GetRender(sce->id.name);
1934
Render *re = RE_GetRender(scene->id.name);
1944
1935
RenderResult rres;
1946
1937
/* XXX: this if can be removed when sequence preview rendering uses the job system */
1947
if(rendering || context.scene != sce) {
1938
if(rendering || context.scene != scene) {
1949
re= RE_NewRender(sce->id.name);
1940
re= RE_NewRender(scene->id.name);
1951
RE_BlenderFrame(re, context.bmain, sce, NULL, sce->lay, frame, FALSE);
1942
RE_BlenderFrame(re, context.bmain, scene, NULL, camera, scene->lay, frame, FALSE);
1953
1944
/* restore previous state after it was toggled on & off by RE_BlenderFrame */
1954
1945
G.rendering = rendering;
1982
1973
context.scene->r.scemode |= doseq;
1984
seq->scene->r.cfra = oldcfra;
1985
seq->scene->camera= oldcamera;
1975
scene->r.cfra = oldcfra;
1986
1977
if(frame != oldcfra)
1987
scene_update_for_newframe(context.bmain, seq->scene, seq->scene->lay);
1978
scene_update_for_newframe(context.bmain, scene, scene->lay);
1989
1980
#ifdef DURIAN_CAMERA_SWITCH
1990
1981
/* stooping to new low's in hackyness :( */
1991
seq->scene->markers= oldmarkers;
1982
scene->markers= oldmarkers;
3211
int seq_swap(Sequence *seq_a, Sequence *seq_b)
3206
Sequence *seq_metastrip(ListBase * seqbase, Sequence * meta, Sequence *seq)
3210
for(iseq = seqbase->first; iseq; iseq = iseq->next) {
3215
} else if(iseq->seqbase.first &&
3216
(rval = seq_metastrip(&iseq->seqbase, iseq, seq))) {
3224
int seq_swap(Sequence *seq_a, Sequence *seq_b, const char **error_str)
3213
3226
char name[sizeof(seq_a->name)];
3215
3228
if(seq_a->len != seq_b->len)
3229
*error_str= "Strips must be the same length";
3218
3232
/* type checking, could be more advanced but disalow sound vs non-sound copy */
3219
3233
if(seq_a->type != seq_b->type) {
3220
3234
if(seq_a->type == SEQ_SOUND || seq_b->type == SEQ_SOUND) {
3235
*error_str= "Strips were not compatible";
3224
3239
/* disallow effects to swap with non-effects strips */
3225
3240
if((seq_a->type & SEQ_EFFECT) != (seq_b->type & SEQ_EFFECT)) {
3241
*error_str= "Strips were not compatible";
3229
3245
if((seq_a->type & SEQ_EFFECT) && (seq_b->type & SEQ_EFFECT)) {
3230
3246
if(get_sequence_effect_num_inputs(seq_a->type) != get_sequence_effect_num_inputs(seq_b->type)) {
3247
*error_str= "Strips must have the same number of inputs";