[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