From 03fc5696dc154259dea599b805c94c82b58e70b6 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Mon, 12 Jan 2009 19:02:08 +0000 Subject: 2.5 12k lines of sequencer back! Only seqaudio.c skipped for now. Notes: - it only draws now, nothing refreshes or edits. - fixed bug in view2d.c with vertical grid step being 0.0f - render code and fileselect code is #ifdeffed out - sequence evaluation code moved to blenkernel, so it can be used for render without bad level calls General note; sequencer code is very untidy, mixing styles too much. Tried to clean it some, but it would be nice if formatting is kept consistant from now on. --- source/blender/blenkernel/BKE_sequence.h | 111 +++++++++++++++++++++++++++++-- 1 file changed, 104 insertions(+), 7 deletions(-) (limited to 'source/blender/blenkernel/BKE_sequence.h') diff --git a/source/blender/blenkernel/BKE_sequence.h b/source/blender/blenkernel/BKE_sequence.h index 2c4daf7fce5..bd56b100fc0 100644 --- a/source/blender/blenkernel/BKE_sequence.h +++ b/source/blender/blenkernel/BKE_sequence.h @@ -33,11 +33,17 @@ struct Editing; struct Sequence; +struct Strip; +struct StripElem; +struct ImBuf; +struct Scene; -/* free */ +#define MAXSEQ 32 + +#define BUILD_SEQAR_COUNT_NOTHING 0 +#define BUILD_SEQAR_COUNT_CURRENT 1 +#define BUILD_SEQAR_COUNT_CHILDREN 2 -void seq_free_sequence(struct Sequence *seq); -void seq_free_editing(struct Editing *ed); /* sequence iterator */ @@ -49,16 +55,21 @@ typedef struct SeqIterator { int valid; } SeqIterator; -void seq_begin(struct Editing *ed, SeqIterator *iter); +void seq_begin(struct Editing *ed, SeqIterator *iter, int use_pointer); void seq_next(SeqIterator *iter); void seq_end(SeqIterator *iter); +void seq_array(struct Editing *ed, struct Sequence ***seqarray, int *tot, int use_pointer); -void seq_array(struct Editing *ed, struct Sequence ***array, int *tot); - +#define SEQP_BEGIN(ed, seq) \ +{ \ + SeqIterator iter;\ + for(seq_begin(ed, &iter, 1); iter.valid; seq_next(&iter)) { \ + seq= iter.seq; + #define SEQ_BEGIN(ed, seq) \ { \ SeqIterator iter;\ - for(seq_begin(ed, &iter); iter.valid; seq_next(&iter)) { \ + for(seq_begin(ed, &iter, 0); iter.valid; seq_next(&iter)) { \ seq= iter.seq; #define SEQ_END \ @@ -68,3 +79,89 @@ void seq_array(struct Editing *ed, struct Sequence ***array, int *tot); #endif + +/* Wipe effect */ +enum {DO_SINGLE_WIPE, DO_DOUBLE_WIPE, DO_BOX_WIPE, DO_CROSS_WIPE, + DO_IRIS_WIPE,DO_CLOCK_WIPE}; + + +struct SeqEffectHandle { + /* constructors & destructor */ + /* init & init_plugin are _only_ called on first creation */ + void (*init)(struct Sequence *seq); + void (*init_plugin)(struct Sequence *seq, const char *fname); + + /* number of input strips needed + (called directly after construction) */ + int (*num_inputs)(); + + /* load is called first time after readblenfile in + get_sequence_effect automatically */ + void (*load)(struct Sequence *seq); + + /* duplicate */ + void (*copy)(struct Sequence *dst, struct Sequence *src); + + /* destruct */ + void (*free)(struct Sequence *seq); + + /* returns: -1: no input needed, + 0: no early out, + 1: out = ibuf1, + 2: out = ibuf2 */ + int (*early_out)(struct Sequence *seq, + float facf0, float facf1); + + /* stores the y-range of the effect IPO */ + void (*store_icu_yrange)(struct Sequence * seq, + 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); + + /* execute the effect + sequence effects are only required to either support + float-rects or byte-rects + (mixed cases are handled one layer up...) */ + + void (*execute)(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); +}; + +/* ********************* prototypes *************** */ + +/* sequence.c */ + +// extern +void seq_free_sequence(struct Sequence *seq); +void seq_free_strip(struct Strip *strip); +void seq_free_editing(struct Editing *ed); +char *give_seqname(struct Sequence *seq); +struct ImBuf *give_ibuf_seq(struct Scene *scene, int rectx, int recty, int cfra, int chanshown); +struct ImBuf *give_ibuf_seq_threaded(struct Scene *scene, int rectx, int recty, int cfra, int chanshown); +struct ImBuf *give_ibuf_seq_direct(struct Scene *scene, int rectx, int recty, int cfra, struct Sequence *seq); +void give_ibuf_prefetch_request(int rectx, int recty, int cfra, int chanshown); +void calc_sequence(struct Sequence *seq); +void new_tstripdata(struct Sequence *seq); +void reload_sequence_new_file(struct Scene *scene, struct Sequence * seq); +void sort_seq(struct Scene *scene); +void build_seqar_cb(struct ListBase *seqbase, struct Sequence ***seqar, int *totseq, + int (*test_func)(struct Sequence * seq)); +int evaluate_seq_frame(struct Scene *scene, int cfra); +struct StripElem *give_stripelem(struct Sequence *seq, int cfra); + +// intern? +void update_changed_seq_and_deps(struct Scene *scene, struct Sequence *changed_seq, int len_change, int ibuf_change); + +/* seqeffects.c */ +// intern? +struct SeqEffectHandle get_sequence_blend(struct Sequence *seq); +void sequence_effect_speed_rebuild_map(struct Scene *scene, struct Sequence *seq, int force); + +// extern +struct SeqEffectHandle get_sequence_effect(struct Sequence *seq); +int get_sequence_effect_num_inputs(int seq_type); -- cgit v1.2.3