[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33223] trunk/blender: == Sequencer ==

Peter Schlaile peter at schlaile.de
Sun Nov 21 21:00:33 CET 2010


Revision: 33223
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33223
Author:   schlaile
Date:     2010-11-21 21:00:31 +0100 (Sun, 21 Nov 2010)

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

* documented and rewrote the render interface of the sequencer.
  (now, the geometry / render_type / etc. settings are stored within a
  seperate structure called SeqRenderData that is passed within the code.)

* that fixes
  * cache problems, since the caching system didn't keep track of
    proxy files vs. final renders.
  * is a necessary step, to bring back frame blending in speed effect
    (the SeqRenderData structure elements are already there)
  * will make motion blur render options available within the sequencer!

* this patch also fixes:
  * "easy retiming" using speed effects. (in Blender 2.49, you could 
    add a speed effect and resize the source track to retime it to that
    length)
  * adds labels for the Original dimensions for Image + Movie tracks
    (worked in 2.49, too)

Modified Paths:
--------------
    trunk/blender/release/scripts/ui/space_sequencer.py
    trunk/blender/source/blender/blenkernel/BKE_sequencer.h
    trunk/blender/source/blender/blenkernel/intern/seqcache.c
    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/makesrna/intern/rna_sequencer.c
    trunk/blender/source/blender/render/intern/source/pipeline.c

Modified: trunk/blender/release/scripts/ui/space_sequencer.py
===================================================================
--- trunk/blender/release/scripts/ui/space_sequencer.py	2010-11-21 19:29:08 UTC (rev 33222)
+++ trunk/blender/release/scripts/ui/space_sequencer.py	2010-11-21 20:00:31 UTC (rev 33223)
@@ -384,6 +384,8 @@
 
         col.label(text="Frame Offset %d:%d" % (strip.frame_offset_start, strip.frame_offset_end))
         col.label(text="Frame Still %d:%d" % (strip.frame_still_start, strip.frame_still_end))
+        if strip.type in ('MOVIE', 'IMAGE'):
+            col.label(text="Orig Dim: %dx%d" % (strip.orig_width, strip.orig_height))
 
 
 class SEQUENCER_PT_effect(SequencerButtonsPanel, bpy.types.Panel):
@@ -443,12 +445,14 @@
             row.prop(strip, "use_only_boost")
 
         elif strip.type == 'SPEED':
-            layout.prop(strip, "use_as_speed")
-            if strip.use_as_speed:
-                layout.prop(strip, "speed_factor")
-            else:
-                layout.prop(strip, "speed_factor", text="Frame number")
-                layout.prop(strip, "scale_to_length")
+            layout.prop(strip, "use_default_fade", "Stretch to input strip length")
+            if not strip.use_default_fade:
+                layout.prop(strip, "use_as_speed")
+                if strip.use_as_speed:
+                    layout.prop(strip, "speed_factor")
+                else:
+                    layout.prop(strip, "speed_factor", text="Frame number")
+                    layout.prop(strip, "scale_to_length")
 
             #doesn't work currently
             #layout.prop(strip, "use_frame_blend")
@@ -573,6 +577,7 @@
             col = split.column()
             col.prop(strip, "filepath", text="")
             col.prop(strip, "mpeg_preseek", text="MPEG Preseek")
+
         # TODO, sound???
         # end drawing filename
 

Modified: trunk/blender/source/blender/blenkernel/BKE_sequencer.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_sequencer.h	2010-11-21 19:29:08 UTC (rev 33222)
+++ trunk/blender/source/blender/blenkernel/BKE_sequencer.h	2010-11-21 20:00:31 UTC (rev 33223)
@@ -83,7 +83,23 @@
 		seq_end(&iter); \
 	}
 
+typedef struct SeqRenderData {
+	struct Main *bmain;
+	struct Scene *scene;
+	int rectx;
+	int recty;
+	int preview_render_size;
+	int motion_blur_samples;
+	float motion_blur_shutter;
+} SeqRenderData;
 
+SeqRenderData seq_new_render_data(
+	struct Main * bmain, struct Scene * scene,
+	int rectx, int recty, int preview_render_size);
+
+int seq_cmp_render_data(SeqRenderData * a, SeqRenderData * b);
+unsigned int seq_hash_render_data(SeqRenderData * a);
+
 /* Wipe effect */
 enum {DO_SINGLE_WIPE, DO_DOUBLE_WIPE, DO_BOX_WIPE, DO_CROSS_WIPE,
 	DO_IRIS_WIPE,DO_CLOCK_WIPE};
@@ -129,35 +145,39 @@
            (mixed cases are handled one layer up...) */
 	
 	struct ImBuf* (*execute)(
-		struct Main *bmain,
-		struct Scene *scene, struct Sequence *seq, float cfra,
+		SeqRenderData context,
+		struct Sequence *seq, float cfra,
 		float facf0, float facf1,
-		int x, int y, int preview_render_size,
 		struct ImBuf *ibuf1, struct ImBuf *ibuf2,
 		struct ImBuf *ibuf3);
 };
 
 /* ********************* prototypes *************** */
 
-/* sequence.c */
-void printf_strip(struct Sequence *seq);
+/* **********************************************************************
+   * sequence.c
 
+   * sequencer render functions
+   ********************************************************************** */
+
+struct ImBuf *give_ibuf_seq(SeqRenderData context, float cfra, int chanshown);
+struct ImBuf *give_ibuf_seq_threaded(SeqRenderData context, float cfra, int chanshown);
+struct ImBuf *give_ibuf_seq_direct(SeqRenderData context, float cfra, struct Sequence *seq);
+struct ImBuf *give_ibuf_seqbase(SeqRenderData context, float cfra, int chan_shown, struct ListBase *seqbasep);
+void give_ibuf_prefetch_request(SeqRenderData context, float cfra, int chan_shown);
+
 /* apply functions recursively */
 int seqbase_recursive_apply(struct ListBase *seqbase, int (*apply_func)(struct Sequence *seq, void *), void *arg);
 int seq_recursive_apply(struct Sequence *seq, int (*apply_func)(struct Sequence *, void *), void *arg);
 
-// extern
+/* maintainance functions, mostly for RNA */
+// extern 
 void seq_free_sequence(struct Scene *scene, struct Sequence *seq);
 void seq_free_strip(struct Strip *strip);
 void seq_free_editing(struct Scene *scene);
 void seq_free_clipboard(void);
 struct Editing *seq_give_editing(struct Scene *scene, int alloc);
 char *give_seqname(struct Sequence *seq);
-struct ImBuf *give_ibuf_seq(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int chanshown, int preview_render_size);
-struct ImBuf *give_ibuf_seq_threaded(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int chanshown, int preview_render_size);
-struct ImBuf *give_ibuf_seq_direct(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int preview_render_size, struct Sequence *seq);
-struct ImBuf *give_ibuf_seqbase(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int chan_shown, int preview_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);
 void new_tstripdata(struct Sequence *seq);
@@ -168,15 +188,19 @@
 int evaluate_seq_frame(struct Scene *scene, int cfra);
 struct StripElem *give_stripelem(struct Sequence *seq, int cfra);
 
-// intern?
+// intern
+void printf_strip(struct Sequence *seq); // debugging function (unused)
 void update_changed_seq_and_deps(struct Scene *scene, struct Sequence *changed_seq, int len_change, int ibuf_change);
 
 int input_have_to_preprocess(
-	struct Scene *scene, struct Sequence * seq, 
-	float cfra, int seqrectx, int seqrecty);
+	SeqRenderData context, struct Sequence * seq, float cfra);
 
-/* seqcache.c */
+/* **********************************************************************
+   seqcache.c
 
+   Sequencer memory cache management functions
+   ********************************************************************** */
+
 typedef enum {
 	SEQ_STRIPELEM_IBUF,
 	SEQ_STRIPELEM_IBUF_COMP,
@@ -190,22 +214,33 @@
 void seq_stripelem_cache_cleanup();
 
 struct ImBuf * seq_stripelem_cache_get(
-	struct Sequence * seq, int rectx, int recty, 
+	SeqRenderData context, struct Sequence * seq, 
 	float cfra, seq_stripelem_ibuf_t type);
 void seq_stripelem_cache_put(
-	struct Sequence * seq, int rectx, int recty, 
+	SeqRenderData context, struct Sequence * seq, 
 	float cfra, seq_stripelem_ibuf_t type, struct ImBuf * nval);
 
+/* **********************************************************************
+   seqeffects.c 
 
-/* seqeffects.c */
-// intern?
+   Sequencer effect strip managment functions
+   **********************************************************************
+*/
+
+/* intern */
 struct SeqEffectHandle get_sequence_blend(struct Sequence *seq);
 void sequence_effect_speed_rebuild_map(struct Scene *scene, struct Sequence *seq, int force);
 
-// extern
+/* extern */
 struct SeqEffectHandle get_sequence_effect(struct Sequence *seq);
 int get_sequence_effect_num_inputs(int seq_type);
 
+
+/* **********************************************************************
+   Sequencer editing functions
+   **********************************************************************
+*/
+   
 /* for transform but also could use elsewhere */
 int seq_tx_get_start(struct Sequence *seq);
 int seq_tx_get_end(struct Sequence *seq);

Modified: trunk/blender/source/blender/blenkernel/intern/seqcache.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/seqcache.c	2010-11-21 19:29:08 UTC (rev 33222)
+++ trunk/blender/source/blender/blenkernel/intern/seqcache.c	2010-11-21 20:00:31 UTC (rev 33223)
@@ -42,8 +42,7 @@
 typedef struct seqCacheKey 
 {
 	struct Sequence * seq;
-	int rectx;
-	int recty;
+	SeqRenderData context;
 	float cfra;
 	seq_stripelem_ibuf_t type;
 } seqCacheKey;
@@ -64,7 +63,7 @@
 static unsigned int HashHash(void *key_)
 {
 	seqCacheKey * key = (seqCacheKey*) key_;
-	unsigned int rval = key->rectx + key->recty;
+	unsigned int rval = seq_hash_render_data(&key->context);
 
 	rval ^= *(unsigned int*) &key->cfra;
 	rval += key->type;
@@ -99,21 +98,7 @@
 		return 1;
 	}
 
-	if (a->rectx < b->rectx) {
-		return -1;
-	}
-	if (a->rectx > b->rectx) {
-		return 1;
-	}
-
-	if (a->recty < b->recty) {
-		return -1;
-	}
-	if (a->recty > b->recty) {
-		return 1;
-	}
-
-	return 0;
+	return seq_cmp_render_data(&a->context, &b->context);
 }
 
 static void HashKeyFree(void *key)
@@ -192,7 +177,7 @@
 }
 
 struct ImBuf * seq_stripelem_cache_get(
-	struct Sequence * seq, int rectx, int recty, 
+	SeqRenderData context, struct Sequence * seq, 
 	float cfra, seq_stripelem_ibuf_t type)
 {
 	seqCacheKey key;
@@ -207,8 +192,7 @@
 	}
 
 	key.seq = seq;
-	key.rectx = rectx;
-	key.recty = recty;
+	key.context = context;
 	key.cfra = cfra - seq->start;
 	key.type = type;
 	
@@ -224,7 +208,7 @@
 }
 
 void seq_stripelem_cache_put(
-	struct Sequence * seq, int rectx, int recty, 
+	SeqRenderData context, struct Sequence * seq, 
 	float cfra, seq_stripelem_ibuf_t type, struct ImBuf * i)
 {
 	seqCacheKey * key;
@@ -243,8 +227,7 @@
 	key = (seqCacheKey*) BLI_mempool_alloc(keypool);
 
 	key->seq = seq;
-	key->rectx = rectx;
-	key->recty = recty;
+	key->context = context;
 	key->cfra = cfra - seq->start;
 	key->type = type;
 

Modified: trunk/blender/source/blender/blenkernel/intern/seqeffects.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/seqeffects.c	2010-11-21 19:29:08 UTC (rev 33222)
+++ trunk/blender/source/blender/blenkernel/intern/seqeffects.c	2010-11-21 20:00:31 UTC (rev 33223)
@@ -69,11 +69,13 @@
 };
 
 static struct ImBuf * prepare_effect_imbufs(
-	int x, int y,
+	SeqRenderData context,
 	struct ImBuf *ibuf1, struct ImBuf *ibuf2,
 	struct ImBuf *ibuf3)
 {
 	struct ImBuf * out;
+	int x = context.rectx;
+	int y = context.recty;
 
 	if (!ibuf1 && !ibuf2 && !ibuf3) {
 		/* hmmm, global float option ? */
@@ -273,9 +275,8 @@
 }
 
 static struct ImBuf * do_plugin_effect(
-	Main *UNUSED(bmain), Scene *UNUSED(scene), Sequence *seq, float cfra,

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list