Revision: 28412
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28412
Author:   schlaile
Date:     2010-04-25 14:53:39 +0200 (Sun, 25 Apr 2010)

Log Message:
-----------
== Sequencer ==

This adds MULTICAM-editing support for blender. (Well, the beginning of.)

There is now a new effect track, named MULTICAM, which just selects
one of the lower tracks.

Doesn't sound that exciting, but if you combine this with A/B-Trim (moving
split points of two directly connected tracks around, while magically
resizing both strips, something to be added), you just do:

* add several tracks for your camera angles
* (optionally) sync those tracks
* add one multicam track on top

Use that multicam-track to edit your movie. (Either using fcurves on the
multicam source selector or using knife-tool and A/B-Trim.)

Compare that to:

* add several tracks
* add cross fades between them
* do some python scripting to add several fcurves to make that beast
  somewhat work.
* cry out loud, using it, if you have to move cut points around

Alternatively, even harder:

* just edit the old way and put strip after strip

You might think, that this isn't really helpfull for animators, but
consider using scene-strips (in OpenGL-mode) for input, that are set for
different camera angles and can now be intercut a lot more easily...

Also: small fix on the way: the speed effect can now be used in cascade.
(Don't know, if anyone used it that way, but now it works.)

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_sequencer.h
    trunk/blender/source/blender/blenkernel/intern/seqeffects.c
    trunk/blender/source/blender/blenkernel/intern/sequencer.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_draw.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c
    trunk/blender/source/blender/makesdna/DNA_sequence_types.h
    trunk/blender/source/blender/makesrna/RNA_access.h
    trunk/blender/source/blender/makesrna/intern/rna_sequencer.c

Modified: trunk/blender/source/blender/blenkernel/BKE_sequencer.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_sequencer.h     2010-04-25 
10:49:13 UTC (rev 28411)
+++ trunk/blender/source/blender/blenkernel/BKE_sequencer.h     2010-04-25 
12:53:39 UTC (rev 28412)
@@ -112,22 +112,22 @@
        
        /* stores the y-range of the effect IPO */
        void (*store_icu_yrange)(struct Sequence * seq,
-                                                        short adrcode, float 
*ymin, float *ymax);
+                                 short adrcode, float *ymin, float *ymax);
        
        /* stores the default facf0 and facf1 if no IPO is present */
        void (*get_default_fac)(struct Sequence *seq, int cfra,
-                                                       float * facf0, float * 
facf1);
+                                float * facf0, float * facf1);
        
        /* execute the effect
-               sequence effects are only required to either support
-               float-rects or byte-rects 
-               (mixed cases are handled one layer up...) */
+           sequence effects are only required to either support
+           float-rects or byte-rects 
+           (mixed cases are handled one layer up...) */
        
        void (*execute)(struct Scene *scene, struct Sequence *seq, int cfra,
-                                       float facf0, float facf1,
-                                       int x, int y,
-                                       struct ImBuf *ibuf1, struct ImBuf 
*ibuf2,
-                                       struct ImBuf *ibuf3, struct ImBuf *out);
+                        float facf0, float facf1,
+                        int x, int y, int preview_render_size,
+                        struct ImBuf *ibuf1, struct ImBuf *ibuf2,
+                        struct ImBuf *ibuf3, struct ImBuf *out);
 };
 
 /* ********************* prototypes *************** */
@@ -149,6 +149,7 @@
 struct ImBuf *give_ibuf_seq(struct Scene *scene, int rectx, int recty, int 
cfra, int chanshown, int render_size);
 struct ImBuf *give_ibuf_seq_threaded(struct Scene *scene, int rectx, int 
recty, int cfra, int chanshown, int render_size);
 struct ImBuf *give_ibuf_seq_direct(struct Scene *scene, int rectx, int recty, 
int cfra, int render_size, struct Sequence *seq);
+struct ImBuf *give_ibuf_seqbase(struct Scene *scene, int rectx, int recty, int 
cfra, int chan_shown, int render_size, struct ListBase *seqbasep);
 void give_ibuf_prefetch_request(int rectx, int recty, int cfra, int chanshown, 
int render_size);
 void calc_sequence(struct Scene *scene, struct Sequence *seq);
 void calc_sequence_disp(struct Scene *scene, struct Sequence *seq);

Modified: trunk/blender/source/blender/blenkernel/intern/seqeffects.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/seqeffects.c 2010-04-25 
10:49:13 UTC (rev 28411)
+++ trunk/blender/source/blender/blenkernel/intern/seqeffects.c 2010-04-25 
12:53:39 UTC (rev 28412)
@@ -230,9 +230,10 @@
 }
 
 static void do_plugin_effect(Scene *scene, Sequence *seq, int cfra,
-                                float facf0, float facf1, int x, int y, 
-                                struct ImBuf *ibuf1, struct ImBuf *ibuf2, 
-                                struct ImBuf *ibuf3, struct ImBuf *out)
+                            float facf0, float facf1, int x, int y, 
+                            int preview_render_size,
+                            struct ImBuf *ibuf1, struct ImBuf *ibuf2, 
+                            struct ImBuf *ibuf3, struct ImBuf *out)
 {
        char *cp;
        int float_rendering;
@@ -477,6 +478,7 @@
 
 static void do_alphaover_effect(Scene *scene, Sequence *seq, int cfra,
                                float facf0, float facf1, int x, int y, 
+                               int preview_render_size,
                                struct ImBuf *ibuf1, struct ImBuf *ibuf2, 
                                struct ImBuf *ibuf3, struct ImBuf *out)
 {
@@ -644,6 +646,7 @@
 
 static void do_alphaunder_effect(Scene *scene, Sequence *seq, int cfra,
                                float facf0, float facf1, int x, int y, 
+                                int preview_render_size,
                                struct ImBuf *ibuf1, struct ImBuf *ibuf2, 
                                struct ImBuf *ibuf3, struct ImBuf *out)
 {
@@ -763,9 +766,10 @@
 /* carefull: also used by speed effect! */
 
 static void do_cross_effect(Scene *scene, Sequence *seq, int cfra,
-                               float facf0, float facf1, int x, int y, 
-                               struct ImBuf *ibuf1, struct ImBuf *ibuf2, 
-                               struct ImBuf *ibuf3, struct ImBuf *out)
+                           float facf0, float facf1, int x, int y, 
+                           int preview_render_size,
+                           struct ImBuf *ibuf1, struct ImBuf *ibuf2, 
+                           struct ImBuf *ibuf3, struct ImBuf *out)
 {
        if (out->rect_float) {
                do_cross_effect_float(
@@ -1026,6 +1030,7 @@
 
 static void do_gammacross_effect(Scene *scene, Sequence *seq, int cfra,
                                 float facf0, float facf1, int x, int y, 
+                                int preview_render_size,
                                 struct ImBuf *ibuf1, struct ImBuf *ibuf2, 
                                 struct ImBuf *ibuf3, struct ImBuf *out)
 {
@@ -1140,6 +1145,7 @@
 
 static void do_add_effect(Scene *scene, Sequence *seq, int cfra,
                          float facf0, float facf1, int x, int y, 
+                         int preview_render_size,
                          struct ImBuf *ibuf1, struct ImBuf *ibuf2, 
                          struct ImBuf *ibuf3, struct ImBuf *out)
 {
@@ -1251,7 +1257,8 @@
 }
 
 static void do_sub_effect(Scene *scene, Sequence *seq, int cfra,
-                         float facf0, float facf1, int x, int y, 
+                         float facf0, float facf1, int x, int y,
+                         int preview_render_size,
                          struct ImBuf *ibuf1, struct ImBuf *ibuf2, 
                          struct ImBuf *ibuf3, struct ImBuf *out)
 {
@@ -1360,6 +1367,7 @@
 
 static void do_drop_effect(Scene *scene, Sequence *seq, int cfra,
                           float facf0, float facf1, int x, int y, 
+                          int preview_render_size,
                           struct ImBuf *ibuf1, struct ImBuf *ibuf2, 
                           struct ImBuf * ibuf3,
                           struct ImBuf *out)
@@ -1481,6 +1489,7 @@
 
 static void do_mul_effect(Scene *scene, Sequence *seq, int cfra,
                          float facf0, float facf1, int x, int y, 
+                         int preview_render_size,
                          struct ImBuf *ibuf1, struct ImBuf *ibuf2, 
                          struct ImBuf *ibuf3, struct ImBuf *out)
 {
@@ -1931,6 +1940,7 @@
 
 static void do_wipe_effect(Scene *scene, Sequence *seq, int cfra,
                           float facf0, float facf1, int x, int y, 
+                          int preview_render_size,
                           struct ImBuf *ibuf1, struct ImBuf *ibuf2, 
                           struct ImBuf *ibuf3, struct ImBuf *out)
 {
@@ -2075,9 +2085,10 @@
 
 
 static void do_transform_effect(Scene *scene, Sequence *seq,int cfra,
-                          float facf0, float facf1, int x, int y, 
-                          struct ImBuf *ibuf1, struct ImBuf *ibuf2, 
-                          struct ImBuf *ibuf3, struct ImBuf *out)
+                               float facf0, float facf1, int x, int y, 
+                               int preview_render_size,
+                               struct ImBuf *ibuf1, struct ImBuf *ibuf2, 
+                               struct ImBuf *ibuf3, struct ImBuf *out)
 {
        do_transform(scene, seq, facf0, x, y, ibuf1, out);
 }
@@ -2588,6 +2599,7 @@
 
 static void do_glow_effect(Scene *scene, Sequence *seq, int cfra,
                           float facf0, float facf1, int x, int y, 
+                          int preview_render_size,
                           struct ImBuf *ibuf1, struct ImBuf *ibuf2, 
                           struct ImBuf *ibuf3, struct ImBuf *out)
 {
@@ -2643,6 +2655,7 @@
 
 static void do_solid_color(Scene *scene, Sequence *seq, int cfra,
                           float facf0, float facf1, int x, int y, 
+                          int preview_render_size,
                           struct ImBuf *ibuf1, struct ImBuf *ibuf2, 
                           struct ImBuf *ibuf3, struct ImBuf *out)
 {
@@ -2718,6 +2731,64 @@
 }
 
 /* **********************************************************************
+   MULTICAM
+   ********************************************************************** */
+
+/* no effect inputs for multicam, we use give_ibuf_seq */
+static int num_inputs_multicam()
+{
+       return 0;
+}
+
+static int early_out_multicam(struct Sequence *seq, float facf0, float facf1)
+{
+       return -1;
+}
+
+static void do_multicam(Scene *scene, Sequence *seq, int cfra,
+                       float facf0, float facf1, int x, int y, 
+                       int preview_render_size,
+                       struct ImBuf *ibuf1, struct ImBuf *ibuf2, 
+                       struct ImBuf *ibuf3, struct ImBuf *out)
+{
+       struct ImBuf * i;
+       Editing * ed;
+       ListBase * seqbasep;
+
+       if (seq->multicam_source == 0 || seq->multicam_source >= seq->machine) {
+               return;
+       }
+
+       ed = scene->ed;
+       if (!ed) {
+               return;
+       }
+       seqbasep = seq_seqbase(&ed->seqbase, seq);
+       if (!seqbasep) {
+               return;
+       }
+
+       i = give_ibuf_seqbase(scene, 
+                             out->x, out->y, cfra, seq->multicam_source, 
+                             preview_render_size, seqbasep);
+       if (!i) {
+               return;
+       }
+
+       if (out->rect && i->rect) {
+               memcpy(out->rect, i->rect, out->x * out->y * 4);
+       } else if (out->rect_float && i->rect_float) {
+               memcpy(out->rect_float, i->rect_float, out->x * out->y 
*4*sizeof(float));
+       } else if (out->rect && i->rect_float) { 
+               IMB_rect_from_float(i);
+               memcpy(out->rect, i->rect, out->x * out->y * 4);
+       } else if (out->rect_float && i->rect) {
+               IMB_float_from_rect(i);
+               memcpy(out->rect_float, i->rect_float, out->x * out->y 
*4*sizeof(float));
+       }
+}
+
+/* **********************************************************************
    SPEED
    ********************************************************************** */
 static void init_speed_effect(Sequence *seq)
@@ -2854,16 +2925,16 @@
 
                for (cfra = 1; cfra < v->length; cfra++) {
                        if(fcu) {
-                                                          if((seq->flag & 
SEQ_IPO_FRAME_LOCKED) != 0) {
-                                                                          
ctime = seq->startdisp + cfra;
-                                          div = 1.0;
-                                                          } else {
-                                                                          
ctime= cfra;
-                                                                          div= 
v->length / 100.0f;
-                                                                          
if(div==0.0) return;
-                                                          }
-                              
-                                  facf = evaluate_fcurve(fcu, ctime/div);
+                               if((seq->flag & SEQ_IPO_FRAME_LOCKED) != 0) {
+                                       ctime = seq->startdisp + cfra;
+                                       div = 1.0;
+                               } else {
+                                       ctime= cfra;
+                                       div= v->length / 100.0f;
+                                       if(div==0.0) return;
+                               }
+                               
+                               facf = evaluate_fcurve(fcu, ctime/div);
                        } else {
                                facf = fallback_fac;
                        }
@@ -2885,19 +2956,19 @@
                for (cfra = 0; cfra < v->length; cfra++) {
 
                        if(fcu) {
-                                                          if((seq->flag & 
SEQ_IPO_FRAME_LOCKED) != 0) {
-                                                                          
ctime = seq->startdisp + cfra;
-                                                                          div 
= 1.0;
-                                                          } else {
-                                                                          
ctime= cfra;
-                                                                          div= 
v->length / 100.0f;
-                                                                          
if(div==0.0) return;
-                                                          }
-               
-                                  facf = evaluate_fcurve(fcu, ctime / div);
-                                  if (v->flags & SEQ_SPEED_COMPRESS_IPO_Y) {
-                                          facf *= v->length;
-                                  }
+                               if((seq->flag & SEQ_IPO_FRAME_LOCKED) != 0) {
+                                       ctime = seq->startdisp + cfra;
+                                       div = 1.0;
+                               } else {
+                                       ctime= cfra;
+                                       div= v->length / 100.0f;
+                                       if(div==0.0) return;
+                               }
+                               
+                               facf = evaluate_fcurve(fcu, ctime / div);
+                               if (v->flags & SEQ_SPEED_COMPRESS_IPO_Y) {
+                                       facf *= v->length;
+                               }
                        }
                        
                        if (!fcu) {
@@ -3005,16 +3076,20 @@
 }
 
 static void do_overdrop_effect(Scene *scene, Sequence *seq, int cfra,
-                                  float fac, float facf, 
-                                  int x, int y, struct ImBuf * ibuf1, 
-                                  struct ImBuf * ibuf2, 
-                                  struct ImBuf * ibuf3, 
-                                  struct ImBuf * out)

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to