138
144
int (*early_out)(struct Sequence *seq, float facf0, float facf1);
140
146
/* stores the y-range of the effect IPO */
141
void (*store_icu_yrange)(struct Sequence * seq, short adrcode, float *ymin, float *ymax);
147
void (*store_icu_yrange)(struct Sequence *seq, short adrcode, float *ymin, float *ymax);
143
149
/* stores the default facf0 and facf1 if no IPO is present */
144
void (*get_default_fac)(struct Sequence *seq, float cfra, float * facf0, float * facf1);
150
void (*get_default_fac)(struct Sequence *seq, float cfra, float *facf0, float *facf1);
146
152
/* execute the effect
147
153
* sequence effects are only required to either support
148
154
* float-rects or byte-rects
149
155
* (mixed cases are handled one layer up...) */
151
struct ImBuf* (*execute)(
152
SeqRenderData context,
153
struct Sequence *seq, float cfra,
154
float facf0, float facf1,
155
struct ImBuf *ibuf1, struct ImBuf *ibuf2,
156
struct ImBuf *ibuf3);
157
struct ImBuf * (*execute)(SeqRenderData context, struct Sequence *seq, float cfra, float facf0, float facf1,
158
struct ImBuf *ibuf1, struct ImBuf *ibuf2, struct ImBuf *ibuf3);
160
struct ImBuf * (*init_execution)(SeqRenderData context, struct ImBuf *ibuf1, struct ImBuf *ibuf2,
161
struct ImBuf *ibuf3);
163
void (*execute_slice)(SeqRenderData context, struct Sequence *seq, float cfra, float facf0, float facf1,
164
struct ImBuf *ibuf1, struct ImBuf *ibuf2, struct ImBuf *ibuf3,
165
int start_line, int total_lines, struct ImBuf *out);
159
168
/* ********************* prototypes *************** */
161
170
/* **********************************************************************
164
173
* sequencer render functions
165
174
* ********************************************************************** */
167
struct ImBuf *give_ibuf_seq(SeqRenderData context, float cfra, int chanshown);
168
struct ImBuf *give_ibuf_seq_threaded(SeqRenderData context, float cfra, int chanshown);
169
struct ImBuf *give_ibuf_seq_direct(SeqRenderData context, float cfra, struct Sequence *seq);
170
struct ImBuf *give_ibuf_seqbase(SeqRenderData context, float cfra, int chan_shown, struct ListBase *seqbasep);
171
void give_ibuf_prefetch_request(SeqRenderData context, float cfra, int chan_shown);
176
struct ImBuf *BKE_sequencer_give_ibuf(SeqRenderData context, float cfra, int chanshown);
177
struct ImBuf *BKE_sequencer_give_ibuf_threaded(SeqRenderData context, float cfra, int chanshown);
178
struct ImBuf *BKE_sequencer_give_ibuf_direct(SeqRenderData context, float cfra, struct Sequence *seq);
179
struct ImBuf *BKE_sequencer_give_ibuf_seqbase(SeqRenderData context, float cfra, int chan_shown, struct ListBase *seqbasep);
180
void BKE_sequencer_give_ibuf_prefetch_request(SeqRenderData context, float cfra, int chan_shown);
182
/* **********************************************************************
185
* sequencer color space functions
186
* ********************************************************************** */
188
void BKE_sequencer_imbuf_to_sequencer_space(struct Scene *scene, struct ImBuf *ibuf, int make_float);
189
void BKE_sequencer_imbuf_from_sequencer_space(struct Scene *scene, struct ImBuf *ibuf);
190
void BKE_sequencer_pixel_from_sequencer_space_v4(struct Scene *scene, float pixel[4]);
192
/* **********************************************************************
193
* sequencer scene functions
194
* ********************************************************************** */
195
struct Editing *BKE_sequencer_editing_get(struct Scene *scene, int alloc);
196
struct Editing *BKE_sequencer_editing_ensure(struct Scene *scene);
197
void BKE_sequencer_editing_free(struct Scene *scene);
199
void BKE_sequencer_sort(struct Scene *scene);
201
struct Sequence *BKE_sequencer_active_get(struct Scene *scene);
202
int BKE_sequencer_active_get_pair(struct Scene *scene, struct Sequence **seq_act, struct Sequence **seq_other);
203
void BKE_sequencer_active_set(struct Scene *scene, struct Sequence *seq);
204
struct Mask *BKE_sequencer_mask_get(struct Scene *scene);
173
206
/* apply functions recursively */
174
int seqbase_recursive_apply(struct ListBase *seqbase, int (*apply_func)(struct Sequence *seq, void *), void *arg);
175
int seq_recursive_apply(struct Sequence *seq, int (*apply_func)(struct Sequence *, void *), void *arg);
207
int BKE_sequencer_base_recursive_apply(struct ListBase *seqbase, int (*apply_func)(struct Sequence *seq, void *), void *arg);
208
int BKE_sequencer_recursive_apply(struct Sequence *seq, int (*apply_func)(struct Sequence *, void *), void *arg);
177
210
/* maintenance functions, mostly for RNA */
179
void seq_free_sequence(struct Scene *scene, struct Sequence *seq);
180
void seq_free_sequence_recurse(struct Scene *scene, struct Sequence *seq);
181
void seq_free_strip(struct Strip *strip);
182
void seq_free_editing(struct Scene *scene);
183
void seq_free_clipboard(void);
184
struct Editing *seq_give_editing(struct Scene *scene, int alloc);
185
const char *give_seqname(struct Sequence *seq);
186
void calc_sequence(struct Scene *scene, struct Sequence *seq);
187
void calc_sequence_disp(struct Scene *scene, struct Sequence *seq);
188
void reload_sequence_new_file(struct Scene *scene, struct Sequence * seq, int lock_range);
189
void sort_seq(struct Scene *scene);
190
void build_seqar_cb(struct ListBase *seqbase, struct Sequence ***seqar, int *totseq,
191
int (*test_func)(struct Sequence * seq));
192
int evaluate_seq_frame(struct Scene *scene, int cfra);
193
struct StripElem *give_stripelem(struct Sequence *seq, int cfra);
196
void printf_strip(struct Sequence *seq); // debugging function (unused)
197
void update_changed_seq_and_deps(struct Scene *scene, struct Sequence *changed_seq, int len_change, int ibuf_change);
199
int input_have_to_preprocess(
200
SeqRenderData context, struct Sequence * seq, float cfra);
202
struct SeqIndexBuildContext *seq_proxy_rebuild_context(struct Main *bmain, struct Scene *scene, struct Sequence *seq);
203
void seq_proxy_rebuild(struct SeqIndexBuildContext *context,
204
short *stop, short *do_update, float *progress);
205
void seq_proxy_rebuild_finish(struct SeqIndexBuildContext *context, short stop);
213
void BKE_sequencer_free_clipboard(void);
215
void BKE_sequence_free(struct Scene *scene, struct Sequence *seq);
216
const char *BKE_sequence_give_name(struct Sequence *seq);
217
void BKE_sequence_calc(struct Scene *scene, struct Sequence *seq);
218
void BKE_sequence_calc_disp(struct Scene *scene, struct Sequence *seq);
219
void BKE_sequence_reload_new_file(struct Scene *scene, struct Sequence *seq, int lock_range);
220
int BKE_sequencer_evaluate_frame(struct Scene *scene, int cfra);
222
struct StripElem *BKE_sequencer_give_stripelem(struct Sequence *seq, int cfra);
225
void BKE_sequencer_update_changed_seq_and_deps(struct Scene *scene, struct Sequence *changed_seq, int len_change, int ibuf_change);
226
int BKE_sequencer_input_have_to_preprocess(SeqRenderData context, struct Sequence *seq, float cfra);
228
struct SeqIndexBuildContext *BKE_sequencer_proxy_rebuild_context(struct Main *bmain, struct Scene *scene, struct Sequence *seq);
229
void BKE_sequencer_proxy_rebuild(struct SeqIndexBuildContext *context, short *stop, short *do_update, float *progress);
230
void BKE_sequencer_proxy_rebuild_finish(struct SeqIndexBuildContext *context, short stop);
208
232
/* **********************************************************************
259
286
/* for transform but also could use elsewhere */
260
int seq_tx_get_start(struct Sequence *seq);
261
int seq_tx_get_end(struct Sequence *seq);
262
int seq_tx_get_final_left(struct Sequence *seq, int metaclip);
263
int seq_tx_get_final_right(struct Sequence *seq, int metaclip);
264
void seq_tx_set_final_left(struct Sequence *seq, int val);
265
void seq_tx_set_final_right(struct Sequence *seq, int val);
266
void seq_tx_handle_xlimits(struct Sequence *seq, int leftflag, int rightflag);
267
int seq_tx_test(struct Sequence * seq);
268
int seq_single_check(struct Sequence *seq);
269
void seq_single_fix(struct Sequence *seq);
270
int seq_test_overlap(struct ListBase * seqbasep, struct Sequence *test);
271
void seq_translate(struct Scene *scene, struct Sequence *seq, int delta);
272
void seq_sound_init(struct Scene *scene, struct Sequence *seq);
273
struct Sequence *seq_foreground_frame_get(struct Scene *scene, int frame);
274
struct ListBase *seq_seqbase(struct ListBase *seqbase, struct Sequence *seq);
275
struct Sequence *seq_metastrip(
276
ListBase * seqbase /* = ed->seqbase */,
277
struct Sequence * meta /* = NULL */, struct Sequence *seq);
279
void seq_offset_animdata(struct Scene *scene, struct Sequence *seq, int ofs);
280
void seq_dupe_animdata(struct Scene *scene, const char *name_src, const char *name_dst);
281
int shuffle_seq(struct ListBase * seqbasep, struct Sequence *test, struct Scene *evil_scene);
282
int shuffle_seq_time(ListBase * seqbasep, struct Scene *evil_scene);
283
int seqbase_isolated_sel_check(struct ListBase *seqbase);
284
void free_imbuf_seq(struct Scene *scene, struct ListBase * seqbasep, int check_mem_usage, int keep_file_handles);
285
struct Sequence *seq_dupli_recursive(struct Scene *scene, struct Scene *scene_to, struct Sequence * seq, int dupe_flag);
286
int seq_swap(struct Sequence *seq_a, struct Sequence *seq_b, const char **error_str);
288
void seq_update_sound_bounds_all(struct Scene *scene);
289
void seq_update_sound_bounds(struct Scene* scene, struct Sequence *seq);
290
void seq_update_muting(struct Editing *ed);
291
void seq_update_sound(struct Scene *scene, struct bSound *sound);
292
void seqbase_unique_name_recursive(ListBase *seqbasep, struct Sequence *seq);
293
void seqbase_dupli_recursive(struct Scene *scene, struct Scene *scene_to, ListBase *nseqbase, ListBase *seqbase, int dupe_flag);
295
void clear_scene_in_allseqs(struct Main *bmain, struct Scene *sce);
297
struct Sequence *get_seq_by_name(struct ListBase *seqbase, const char *name, int recursive);
299
struct Sequence *seq_active_get(struct Scene *scene);
300
void seq_active_set(struct Scene *scene, struct Sequence *seq);
301
int seq_active_pair_get(struct Scene *scene, struct Sequence **seq_act, struct Sequence **seq_other);
287
int BKE_sequence_tx_get_final_left(struct Sequence *seq, int metaclip);
288
int BKE_sequence_tx_get_final_right(struct Sequence *seq, int metaclip);
289
void BKE_sequence_tx_set_final_left(struct Sequence *seq, int val);
290
void BKE_sequence_tx_set_final_right(struct Sequence *seq, int val);
291
void BKE_sequence_tx_handle_xlimits(struct Sequence *seq, int leftflag, int rightflag);
292
int BKE_sequence_tx_test(struct Sequence *seq);
293
int BKE_sequence_single_check(struct Sequence *seq);
294
void BKE_sequence_single_fix(struct Sequence *seq);
295
int BKE_sequence_test_overlap(struct ListBase *seqbasep, struct Sequence *test);
296
void BKE_sequence_translate(struct Scene *scene, struct Sequence *seq, int delta);
297
void BKE_sequence_sound_init(struct Scene *scene, struct Sequence *seq);
298
struct Sequence *BKE_sequencer_foreground_frame_get(struct Scene *scene, int frame);
299
struct ListBase *BKE_sequence_seqbase(struct ListBase *seqbase, struct Sequence *seq);
300
struct Sequence *BKE_sequence_metastrip(ListBase *seqbase /* = ed->seqbase */, struct Sequence *meta /* = NULL */, struct Sequence *seq);
302
void BKE_sequencer_offset_animdata(struct Scene *scene, struct Sequence *seq, int ofs);
303
void BKE_sequencer_dupe_animdata(struct Scene *scene, const char *name_src, const char *name_dst);
304
int BKE_sequence_base_shuffle(struct ListBase *seqbasep, struct Sequence *test, struct Scene *evil_scene);
305
int BKE_sequence_base_shuffle_time(ListBase *seqbasep, struct Scene *evil_scene);
306
int BKE_sequence_base_isolated_sel_check(struct ListBase *seqbase);
307
void BKE_sequencer_free_imbuf(struct Scene *scene, struct ListBase *seqbasep, int for_render);
308
struct Sequence *BKE_sequence_dupli_recursive(struct Scene *scene, struct Scene *scene_to, struct Sequence *seq, int dupe_flag);
309
int BKE_sequence_swap(struct Sequence *seq_a, struct Sequence *seq_b, const char **error_str);
311
int BKE_sequence_check_depend(struct Sequence *seq, struct Sequence *cur);
312
void BKE_sequence_invalidate_cache(struct Scene *scene, struct Sequence *seq);
313
void BKE_sequence_invalidate_dependent(struct Scene *scene, struct Sequence *seq);
314
void BKE_sequence_invalidate_cache_for_modifier(struct Scene *scene, struct Sequence *seq);
316
void BKE_sequencer_update_sound_bounds_all(struct Scene *scene);
317
void BKE_sequencer_update_sound_bounds(struct Scene *scene, struct Sequence *seq);
318
void BKE_sequencer_update_muting(struct Editing *ed);
319
void BKE_sequencer_update_sound(struct Scene *scene, struct bSound *sound);
321
void BKE_sequence_base_unique_name_recursive(ListBase *seqbasep, struct Sequence *seq);
322
void BKE_sequence_base_dupli_recursive(struct Scene *scene, struct Scene *scene_to, ListBase *nseqbase, ListBase *seqbase, int dupe_flag);
323
int BKE_sequence_is_valid_check(struct Sequence *seq);
325
void BKE_sequencer_clear_scene_in_allseqs(struct Main *bmain, struct Scene *sce);
326
void BKE_sequencer_clear_movieclip_in_clipboard(struct MovieClip *clip);
327
void BKE_sequencer_clear_mask_in_clipboard(struct Mask *mask);
329
struct Sequence *BKE_sequence_get_by_name(struct ListBase *seqbase, const char *name, int recursive);
303
331
/* api for adding new sequence strips */
304
332
typedef struct SeqLoadInfo {
308
int flag; /* use sound, replace sel */
336
int flag; /* use sound, replace sel */
312
int len; /* only for image strips */
340
int len; /* only for image strips */
317
345
/* SeqLoadInfo.flag */
318
#define SEQ_LOAD_REPLACE_SEL (1<<0)
319
#define SEQ_LOAD_FRAME_ADVANCE (1<<1)
320
#define SEQ_LOAD_MOVIE_SOUND (1<<2)
321
#define SEQ_LOAD_SOUND_CACHE (1<<3)
346
#define SEQ_LOAD_REPLACE_SEL (1 << 0)
347
#define SEQ_LOAD_FRAME_ADVANCE (1 << 1)
348
#define SEQ_LOAD_MOVIE_SOUND (1 << 2)
349
#define SEQ_LOAD_SOUND_CACHE (1 << 3)
324
352
/* seq_dupli' flags */
325
#define SEQ_DUPE_UNIQUE_NAME (1<<0)
326
#define SEQ_DUPE_CONTEXT (1<<1)
327
#define SEQ_DUPE_ANIM (1<<2)
328
#define SEQ_DUPE_ALL (1<<3) /* otherwise only selected are copied */
353
#define SEQ_DUPE_UNIQUE_NAME (1 << 0)
354
#define SEQ_DUPE_CONTEXT (1 << 1)
355
#define SEQ_DUPE_ANIM (1 << 2)
356
#define SEQ_DUPE_ALL (1 << 3) /* otherwise only selected are copied */
330
358
/* use as an api function */
331
359
typedef struct Sequence *(*SeqLoadFunc)(struct bContext *, ListBase *, struct SeqLoadInfo *);
333
struct Sequence *alloc_sequence(ListBase *lb, int cfra, int machine);
335
void seq_load_apply(struct Scene *scene, struct Sequence *seq, struct SeqLoadInfo *seq_load);
337
struct Sequence *sequencer_add_image_strip(struct bContext *C, ListBase *seqbasep, struct SeqLoadInfo *seq_load);
338
struct Sequence *sequencer_add_sound_strip(struct bContext *C, ListBase *seqbasep, struct SeqLoadInfo *seq_load);
339
struct Sequence *sequencer_add_movie_strip(struct bContext *C, ListBase *seqbasep, struct SeqLoadInfo *seq_load);
361
struct Sequence *BKE_sequence_alloc(ListBase *lb, int cfra, int machine);
363
void BKE_sequence_alpha_mode_from_extension(struct Sequence *seq);
364
void BKE_sequence_init_colorspace(struct Sequence *seq);
366
struct Sequence *BKE_sequencer_add_image_strip(struct bContext *C, ListBase *seqbasep, struct SeqLoadInfo *seq_load);
367
struct Sequence *BKE_sequencer_add_sound_strip(struct bContext *C, ListBase *seqbasep, struct SeqLoadInfo *seq_load);
368
struct Sequence *BKE_sequencer_add_movie_strip(struct bContext *C, ListBase *seqbasep, struct SeqLoadInfo *seq_load);
341
370
/* view3d draw callback, run when not in background view */
342
typedef struct ImBuf *(*SequencerDrawView)(struct Scene *, struct Object *, int, int, unsigned int, int, int, char[256]);
371
typedef struct ImBuf *(*SequencerDrawView)(struct Scene *, struct Object *, int, int, unsigned int, int, int, int, int, char[256]);
343
372
extern SequencerDrawView sequencer_view3d_cb;
346
375
extern ListBase seqbase_clipboard;
347
376
extern int seqbase_clipboard_frame;
349
#endif // __BKE_SEQUENCER_H__
379
typedef struct SequenceModifierTypeInfo {
380
/* default name for the modifier */
381
char name[64]; /* MAX_NAME */
383
/* DNA structure name used on load/save filed */
384
char struct_name[64]; /* MAX_NAME */
386
/* size of modifier data structure, used by allocation */
389
/* data initialization */
390
void (*init_data) (struct SequenceModifierData *smd);
392
/* free data used by modifier,
393
* only modifier-specific data should be freed, modifier descriptor would
394
* be freed outside of this callback
396
void (*free_data) (struct SequenceModifierData *smd);
398
/* copy data from one modifier to another */
399
void (*copy_data) (struct SequenceModifierData *smd, struct SequenceModifierData *target);
401
/* apply modifier on a given image buffer */
402
void (*apply) (struct SequenceModifierData *smd, struct ImBuf *ibuf, struct ImBuf *mask);
403
} SequenceModifierTypeInfo;
405
struct SequenceModifierTypeInfo *BKE_sequence_modifier_type_info_get(int type);
407
struct SequenceModifierData *BKE_sequence_modifier_new(struct Sequence *seq, const char *name, int type);
408
int BKE_sequence_modifier_remove(struct Sequence *seq, struct SequenceModifierData *smd);
409
void BKE_sequence_modifier_clear(struct Sequence *seq);
410
void BKE_sequence_modifier_free(struct SequenceModifierData *smd);
411
void BKE_sequence_modifier_unique_name(struct Sequence *seq, struct SequenceModifierData *smd);
412
struct SequenceModifierData *BKE_sequence_modifier_find_by_name(struct Sequence *seq, char *name);
413
struct ImBuf *BKE_sequence_modifier_apply_stack(SeqRenderData context, struct Sequence *seq, struct ImBuf *ibuf, int cfra);
414
void BKE_sequence_modifier_list_copy(struct Sequence *seqn, struct Sequence *seq);
416
int BKE_sequence_supports_modifiers(struct Sequence *seq);
418
/* internal filters */
419
struct ImBuf *BKE_sequencer_render_mask_input(SeqRenderData context, int mask_input_type, struct Sequence *mask_sequence, struct Mask *mask_id, int cfra, int make_float);
420
void BKE_sequencer_color_balance_apply(struct StripColorBalance *cb, struct ImBuf *ibuf, float mul, short make_float, struct ImBuf *mask_input);
422
#endif /* __BKE_SEQUENCER_H__ */