Merge branch 'blender2.7'
[blender.git] / source / blender / makesdna / DNA_sequence_types.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
17  * All rights reserved.
18  */
19 /** \file
20  * \ingroup DNA
21  *
22  * Structs for use by the 'Sequencer' (Video Editor)
23  *
24  * Note on terminology
25  * - #Sequence: video/effect/audio data you can select and manipulate in the sequencer.
26  * - #Sequence.machine: Strange name for the channel.
27  * - #Strip: The data referenced by the #Sequence
28  * - Meta Strip (SEQ_TYPE_META): Support for nesting Sequences.
29  */
30
31 #ifndef __DNA_SEQUENCE_TYPES_H__
32 #define __DNA_SEQUENCE_TYPES_H__
33
34 #include "DNA_defs.h"
35 #include "DNA_color_types.h"
36 #include "DNA_listBase.h"
37 #include "DNA_vec_types.h"
38 #include "DNA_vfont_types.h"
39
40 struct Ipo;
41 struct MovieClip;
42 struct Scene;
43 struct bSound;
44
45 /* strlens; 256= FILE_MAXFILE, 768= FILE_MAXDIR */
46
47 typedef struct StripAnim {
48         struct StripAnim *next, *prev;
49         struct anim *anim;
50 } StripAnim;
51
52 typedef struct StripElem {
53         char name[256];
54         int orig_width, orig_height;
55 } StripElem;
56
57 typedef struct StripCrop {
58         int top;
59         int bottom;
60         int left;
61         int right;
62 } StripCrop;
63
64 typedef struct StripTransform {
65         int xofs;
66         int yofs;
67 } StripTransform;
68
69 typedef struct StripColorBalance {
70         float lift[3];
71         float gamma[3];
72         float gain[3];
73         int flag;
74         int pad;
75         // float exposure;
76         // float saturation;
77 } StripColorBalance;
78
79 typedef struct StripProxy {
80         char dir[768];         // custom directory for index and proxy files
81                                // (defaults to BL_proxy)
82
83         char file[256];        // custom file
84         struct anim *anim;     // custom proxy anim file
85
86         short tc;              // time code in use
87
88         short quality;         // proxy build quality
89         short build_size_flags; // size flags (see below) of all proxies
90                                // to build
91         short build_tc_flags;  // time code flags (see below) of all tc indices
92                                // to build
93         short build_flags;
94         char storage;
95         char pad[5];
96 } StripProxy;
97
98 typedef struct Strip {
99         struct Strip *next, *prev;
100         int us, done;
101         int startstill, endstill;
102         /**
103          * Only used as an array in IMAGE sequences(!),
104          * and as a 1-element array in MOVIE sequences,
105          * NULL for all other strip-types.
106          */
107         StripElem *stripdata;
108         char dir[768];
109         StripProxy *proxy;
110         StripCrop *crop;
111         StripTransform *transform;
112         StripColorBalance *color_balance DNA_DEPRECATED;
113
114         /* color management */
115         ColorManagedColorspaceSettings colorspace_settings;
116 } Strip;
117
118 /**
119  * The sequence structure is the basic struct used by any strip.
120  * each of the strips uses a different sequence structure.
121  *
122  * \warning The first part identical to ID (for use in ipo's)
123  * the comment above is historic, probably we can drop the ID compatibility,
124  * but take care making this change.
125  *
126  * \warning This is really a 'Strip' in the UI!, name is highly confusing.
127  */
128 typedef struct Sequence {
129         struct Sequence *next, *prev;
130         /** Tmp var for copying, and tagging for linked selection. */
131         void *tmp;
132         /** Needed (to be like ipo), else it will raise libdata warnings, this should never be used. */
133         void *lib;
134         /** SEQ_NAME_MAXSTR - name, set by default and needs to be unique, for RNA paths. */
135         char name[64];
136
137         /**fLags bitmap (see below) and the type of sequenc.e*/
138         int flag, type;
139         /** The length of the contents of this strip - before handles are applied. */
140         int len;
141         /**
142          * Start frame of contents of strip in absolute frame coordinates.
143          * For metastrips start of first strip startdisp.
144          */
145         int start;
146         /**
147          * Frames after the first frame where display starts,
148          * frames before the last frame where display ends.
149          */
150         int startofs, endofs;
151         /**
152          * Frames that use the first frame before data begins,
153          * frames that use the last frame after data ends.
154          */
155         int startstill, endstill;
156         /** Machine: the strip channel, depth the depth in the sequence when dealing with metastrips. */
157         int machine, depth;
158         /** Starting and ending points of the strip in the sequenc.e*/
159         int startdisp, enddisp;
160         float sat;
161         float mul, handsize;
162
163         short anim_preseek;
164         /** Streamindex for movie or sound files with several streams. */
165         short streamindex;
166         /** For multicam source selection. */
167         int multicam_source;
168         /** MOVIECLIP render flags. */
169         int clip_flag;
170
171         Strip *strip;
172
173         /** Old animation system, deprecated for 2.5. */
174         struct Ipo *ipo DNA_DEPRECATED;
175
176         /** these ID vars should never be NULL but can be when linked libs fail to load,
177          * so check on access */
178         struct Scene     *scene;
179         /** Override scene camera. */
180         struct Object    *scene_camera;
181         /** For MOVIECLIP strips. */
182         struct MovieClip *clip;
183         /** For MASK strips. */
184         struct Mask      *mask;
185         /** For MOVIE strips. */
186         ListBase anims;
187
188         float effect_fader;
189         float speed_fader;
190
191         /* pointers for effects: */
192         struct Sequence *seq1, *seq2, *seq3;
193
194         /** List of strips for metastrips. */
195         ListBase seqbase;
196
197         /** The linked "bSound" object. */
198         struct bSound *sound;
199         void *scene_sound;
200         float volume;
201
202         /** Pitch (-0.1..10), pan -2..2. */
203         float pitch, pan;
204         float strobe;
205
206         /** Struct pointer for effect settings. */
207         void *effectdata;
208
209         /** Only use part of animation file. */
210         int anim_startofs;
211         /** Is subtle different to startofs / endofs. */
212         int anim_endofs;
213
214
215         int blend_mode;
216         float blend_opacity;
217
218         /* is sfra needed anymore? - it looks like its only used in one place */
219         /** Starting frame according to the timeline of the scene. */
220         int sfra;
221
222         char alpha_mode;
223         char pad[2];
224
225         /* Multiview */
226         char views_format;
227         struct Stereo3dFormat *stereo3d_format;
228
229         struct IDProperty *prop;
230
231         /* modifiers */
232         ListBase modifiers;
233 } Sequence;
234
235 typedef struct MetaStack {
236         struct MetaStack *next, *prev;
237         ListBase *oldbasep;
238         Sequence *parseq;
239         /* the startdisp/enddisp when entering the meta */
240         int disp_range[2];
241 } MetaStack;
242
243 typedef struct Editing {
244         /** Pointer to the current list of seq's being edited (can be within a meta strip). */
245         ListBase *seqbasep;
246         /** Pointer to the top-most seq's. */
247         ListBase seqbase;
248         ListBase metastack;
249
250         /* Context vars, used to be static */
251         Sequence *act_seq;
252         /** 1024 = FILE_MAX. */
253         char act_imagedir[1024];
254         /** 1024 = FILE_MAX. */
255         char act_sounddir[1024];
256         /** 1024 = FILE_MAX. */
257         char proxy_dir[1024];
258
259         int over_ofs, over_cfra;
260         int over_flag, proxy_storage;
261         rctf over_border;
262 } Editing;
263
264 /* ************* Effect Variable Structs ********* */
265 typedef struct WipeVars {
266         float edgeWidth, angle;
267         short forward, wipetype;
268 } WipeVars;
269
270 typedef struct GlowVars {
271         /**     Minimum intensity to trigger a glow. */
272         float fMini;
273         float fClamp;
274         /**     Amount to multiply glow intensity. */
275         float fBoost;
276         /**     Radius of glow blurring. */
277         float dDist;
278         int dQuality;
279         /**     SHOW/HIDE glow buffer. */
280         int bNoComp;
281 } GlowVars;
282
283 typedef struct TransformVars {
284         float ScalexIni;
285         float ScaleyIni;
286         float xIni;
287         float yIni;
288         float rotIni;
289         int percent;
290         int interpolation;
291         /** Preserve aspect/ratio when scaling. */
292         int uniform_scale;
293 } TransformVars;
294
295 typedef struct SolidColorVars {
296         float col[3];
297         float pad;
298 } SolidColorVars;
299
300 typedef struct SpeedControlVars {
301         float *frameMap;
302         float globalSpeed;
303         int flags;
304         int length;
305         int lastValidFrame;
306 } SpeedControlVars;
307
308 typedef struct GaussianBlurVars {
309         float size_x;
310         float size_y;
311 } GaussianBlurVars;
312
313 typedef struct TextVars {
314         char text[512];
315         VFont *text_font;
316         int text_blf_id;
317         int text_size;
318         float color[4], shadow_color[4];
319         float loc[2];
320         float wrap_width;
321         char flag;
322         char align, align_y;
323         char pad[1];
324 } TextVars;
325
326 /* TextVars.flag */
327 enum {
328         SEQ_TEXT_SHADOW =       (1 << 0),
329 };
330
331 /* TextVars.align */
332 enum {
333         SEQ_TEXT_ALIGN_X_LEFT = 0,
334         SEQ_TEXT_ALIGN_X_CENTER = 1,
335         SEQ_TEXT_ALIGN_X_RIGHT = 2,
336 };
337
338 /* TextVars.align_y */
339 enum {
340         SEQ_TEXT_ALIGN_Y_TOP = 0,
341         SEQ_TEXT_ALIGN_Y_CENTER = 1,
342         SEQ_TEXT_ALIGN_Y_BOTTOM = 2,
343 };
344
345 #define SEQ_FONT_NOT_LOADED -2
346
347 typedef struct ColorMixVars {
348         /** Value from SEQ_TYPE_XXX enumeration. */
349         int blend_effect;
350         /** Blend factor [0.0f, 1.0f]. */
351         float factor;
352 } ColorMixVars;
353
354 /* ***************** Sequence modifiers ****************** */
355
356 typedef struct SequenceModifierData {
357         struct SequenceModifierData *next, *prev;
358         int type, flag;
359         /** MAX_NAME. */
360         char name[64];
361
362         /* mask input, either sequence or mask ID */
363         int mask_input_type;
364         int mask_time;
365
366         struct Sequence *mask_sequence;
367         struct Mask     *mask_id;
368 } SequenceModifierData;
369
370 typedef struct ColorBalanceModifierData {
371         SequenceModifierData modifier;
372
373         StripColorBalance color_balance;
374         float color_multiply;
375 } ColorBalanceModifierData;
376
377 typedef struct CurvesModifierData {
378         SequenceModifierData modifier;
379
380         struct CurveMapping curve_mapping;
381 } CurvesModifierData;
382
383 typedef struct HueCorrectModifierData {
384         SequenceModifierData modifier;
385
386         struct CurveMapping curve_mapping;
387 } HueCorrectModifierData;
388
389 typedef struct BrightContrastModifierData {
390         SequenceModifierData modifier;
391
392         float bright;
393         float contrast;
394 } BrightContrastModifierData;
395
396 typedef struct SequencerMaskModifierData {
397         SequenceModifierData modifier;
398 } SequencerMaskModifierData;
399
400 typedef struct WhiteBalanceModifierData {
401         SequenceModifierData modifier;
402
403         float white_value[3];
404         float pad;
405 } WhiteBalanceModifierData;
406
407 typedef struct SequencerTonemapModifierData {
408         SequenceModifierData modifier;
409
410         float key, offset, gamma;
411         float intensity, contrast, adaptation, correction;
412         int type;
413 } SequencerTonemapModifierData;
414
415 enum {
416         SEQ_TONEMAP_RH_SIMPLE = 0,
417         SEQ_TONEMAP_RD_PHOTORECEPTOR = 1,
418 };
419
420 /* ***************** Scopes ****************** */
421
422 typedef struct SequencerScopes {
423         struct ImBuf *reference_ibuf;
424
425         struct ImBuf *zebra_ibuf;
426         struct ImBuf *waveform_ibuf;
427         struct ImBuf *sep_waveform_ibuf;
428         struct ImBuf *vector_ibuf;
429         struct ImBuf *histogram_ibuf;
430 } SequencerScopes;
431
432 #define MAXSEQ          32
433
434 #define SELECT 1
435
436 /* Editor->over_flag */
437 #define SEQ_EDIT_OVERLAY_SHOW           1
438 #define SEQ_EDIT_OVERLAY_ABS            2
439
440 #define SEQ_STRIP_OFSBOTTOM     0.05f
441 #define SEQ_STRIP_OFSTOP        0.95f
442
443 /* Editor->proxy_storage */
444 /* store proxies in project directory */
445 #define SEQ_EDIT_PROXY_DIR_STORAGE 1
446
447 /* SpeedControlVars->flags */
448 #define SEQ_SPEED_INTEGRATE      (1 << 0)
449 #define SEQ_SPEED_DEPRECATED_1   (1 << 1)  /* cleared */
450 #define SEQ_SPEED_COMPRESS_IPO_Y (1 << 2)
451
452 /* ***************** SEQUENCE ****************** */
453 #define SEQ_NAME_MAXSTR         64
454
455 /* seq->flag */
456 enum {
457         /* SELECT */
458         SEQ_LEFTSEL                 = (1 << 1),
459         SEQ_RIGHTSEL                = (1 << 2),
460         SEQ_OVERLAP                 = (1 << 3),
461         SEQ_FILTERY                 = (1 << 4),
462         SEQ_MUTE                    = (1 << 5),
463         SEQ_FLAG_DEPRECATED_6       = (1 << 6),  /* cleared */
464         SEQ_REVERSE_FRAMES          = (1 << 7),
465         SEQ_IPO_FRAME_LOCKED        = (1 << 8),
466         SEQ_EFFECT_NOT_LOADED       = (1 << 9),
467         SEQ_FLAG_DELETE             = (1 << 10),
468         SEQ_FLIPX                   = (1 << 11),
469         SEQ_FLIPY                   = (1 << 12),
470         SEQ_MAKE_FLOAT              = (1 << 13),
471         SEQ_LOCK                    = (1 << 14),
472         SEQ_USE_PROXY               = (1 << 15),
473         SEQ_USE_TRANSFORM           = (1 << 16),
474         SEQ_USE_CROP                = (1 << 17),
475         SEQ_FLAG_DEPRECATED_18      = (1 << 18),  /* cleared */
476         SEQ_FLAG_DEPRECATED_19      = (1 << 19),  /* cleared */
477         SEQ_FLAG_DEPRECATED_21      = (1 << 21),  /* cleared */
478
479         SEQ_USE_EFFECT_DEFAULT_FADE = (1 << 22),
480         SEQ_USE_LINEAR_MODIFIERS    = (1 << 23),
481
482         /* flags for whether those properties are animated or not */
483         SEQ_AUDIO_VOLUME_ANIMATED   = (1 << 24),
484         SEQ_AUDIO_PITCH_ANIMATED    = (1 << 25),
485         SEQ_AUDIO_PAN_ANIMATED      = (1 << 26),
486         SEQ_AUDIO_DRAW_WAVEFORM     = (1 << 27),
487
488         /* don't include Grease Pencil in OpenGL previews of Scene strips */
489         SEQ_SCENE_NO_GPENCIL        = (1 << 28),
490         SEQ_USE_VIEWS               = (1 << 29),
491
492         /* access scene strips directly (like a metastrip) */
493         SEQ_SCENE_STRIPS            = (1 << 30),
494
495         SEQ_INVALID_EFFECT          = (1u << 31),
496 };
497
498 /* StripProxy->storage */
499 enum {
500         SEQ_STORAGE_PROXY_CUSTOM_FILE   = (1 << 1), /* store proxy in custom directory */
501         SEQ_STORAGE_PROXY_CUSTOM_DIR    = (1 << 2), /* store proxy in custom file */
502 };
503
504 /* convenience define for all selection flags */
505 #define SEQ_ALLSEL  (SELECT + SEQ_LEFTSEL + SEQ_RIGHTSEL)
506
507 /* deprecated, don't use a flag anymore*/
508 /*#define SEQ_ACTIVE                            1048576*/
509
510 #define SEQ_COLOR_BALANCE_INVERSE_GAIN 1
511 #define SEQ_COLOR_BALANCE_INVERSE_GAMMA 2
512 #define SEQ_COLOR_BALANCE_INVERSE_LIFT 4
513
514 /* !!! has to be same as IMB_imbuf.h IMB_PROXY_... and IMB_TC_... */
515
516 #define SEQ_PROXY_IMAGE_SIZE_25                 1
517 #define SEQ_PROXY_IMAGE_SIZE_50                 2
518 #define SEQ_PROXY_IMAGE_SIZE_75                 4
519 #define SEQ_PROXY_IMAGE_SIZE_100                8
520
521 #define SEQ_PROXY_TC_NONE                       0
522 #define SEQ_PROXY_TC_RECORD_RUN                 1
523 #define SEQ_PROXY_TC_FREE_RUN                   2
524 #define SEQ_PROXY_TC_INTERP_REC_DATE_FREE_RUN   4
525 #define SEQ_PROXY_TC_RECORD_RUN_NO_GAPS         8
526 #define SEQ_PROXY_TC_ALL                        15
527
528 /* SeqProxy->build_flags */
529 enum {
530         SEQ_PROXY_SKIP_EXISTING = 1,
531 };
532
533 /* seq->alpha_mode */
534 enum {
535         SEQ_ALPHA_STRAIGHT = 0,
536         SEQ_ALPHA_PREMUL   = 1,
537 };
538
539 /* seq->type WATCH IT: SEQ_TYPE_EFFECT BIT is used to determine if this is an effect strip!!! */
540 enum {
541         SEQ_TYPE_IMAGE       = 0,
542         SEQ_TYPE_META        = 1,
543         SEQ_TYPE_SCENE       = 2,
544         SEQ_TYPE_MOVIE       = 3,
545         SEQ_TYPE_SOUND_RAM   = 4,
546         SEQ_TYPE_SOUND_HD    = 5,
547         SEQ_TYPE_MOVIECLIP   = 6,
548         SEQ_TYPE_MASK        = 7,
549
550         SEQ_TYPE_EFFECT      = 8,
551         SEQ_TYPE_CROSS       = 8,
552         SEQ_TYPE_ADD         = 9,
553         SEQ_TYPE_SUB         = 10,
554         SEQ_TYPE_ALPHAOVER   = 11,
555         SEQ_TYPE_ALPHAUNDER  = 12,
556         SEQ_TYPE_GAMCROSS    = 13,
557         SEQ_TYPE_MUL         = 14,
558         SEQ_TYPE_OVERDROP    = 15,
559         /* SEQ_TYPE_PLUGIN      = 24, */ /* Deprecated */
560         SEQ_TYPE_WIPE        = 25,
561         SEQ_TYPE_GLOW        = 26,
562         SEQ_TYPE_TRANSFORM   = 27,
563         SEQ_TYPE_COLOR       = 28,
564         SEQ_TYPE_SPEED       = 29,
565         SEQ_TYPE_MULTICAM    = 30,
566         SEQ_TYPE_ADJUSTMENT  = 31,
567         SEQ_TYPE_GAUSSIAN_BLUR = 40,
568         SEQ_TYPE_TEXT = 41,
569         SEQ_TYPE_COLORMIX    = 42,
570
571         /* Blend modes */
572         SEQ_TYPE_SCREEN      = 43,
573         SEQ_TYPE_LIGHTEN     = 44,
574         SEQ_TYPE_DODGE       = 45,
575         SEQ_TYPE_DARKEN      = 46,
576         SEQ_TYPE_BURN        = 47,
577         SEQ_TYPE_LINEAR_BURN = 48,
578         SEQ_TYPE_OVERLAY     = 49,
579         SEQ_TYPE_HARD_LIGHT  = 50,
580         SEQ_TYPE_SOFT_LIGHT  = 51,
581         SEQ_TYPE_PIN_LIGHT   = 52,
582         SEQ_TYPE_LIN_LIGHT   = 53,
583         SEQ_TYPE_VIVID_LIGHT = 54,
584         SEQ_TYPE_HUE         = 55,
585         SEQ_TYPE_SATURATION  = 56,
586         SEQ_TYPE_VALUE       = 57,
587         SEQ_TYPE_BLEND_COLOR = 58,
588         SEQ_TYPE_DIFFERENCE  = 59,
589         SEQ_TYPE_EXCLUSION   = 60,
590
591         SEQ_TYPE_MAX         = 60,
592 };
593
594 #define SEQ_MOVIECLIP_RENDER_UNDISTORTED (1 << 0)
595 #define SEQ_MOVIECLIP_RENDER_STABILIZED  (1 << 1)
596
597 #define SEQ_BLEND_REPLACE      0
598 /* all other BLEND_MODEs are simple SEQ_TYPE_EFFECT ids and therefore identical
599  * to the table above. (Only those effects that handle _exactly_ two inputs,
600  * otherwise, you can't really blend, right :) !)
601  */
602
603
604 #define SEQ_HAS_PATH(_seq) (ELEM((_seq)->type, SEQ_TYPE_MOVIE, SEQ_TYPE_IMAGE, SEQ_TYPE_SOUND_RAM, SEQ_TYPE_SOUND_HD))
605
606 /* modifiers */
607
608 /* SequenceModifierData->type */
609 enum {
610         seqModifierType_ColorBalance   = 1,
611         seqModifierType_Curves         = 2,
612         seqModifierType_HueCorrect     = 3,
613         seqModifierType_BrightContrast = 4,
614         seqModifierType_Mask           = 5,
615         seqModifierType_WhiteBalance   = 6,
616         seqModifierType_Tonemap        = 7,
617
618         NUM_SEQUENCE_MODIFIER_TYPES,
619 };
620
621 /* SequenceModifierData->flag */
622 enum {
623         SEQUENCE_MODIFIER_MUTE      = (1 << 0),
624         SEQUENCE_MODIFIER_EXPANDED  = (1 << 1),
625 };
626
627 enum {
628         SEQUENCE_MASK_INPUT_STRIP   = 0,
629         SEQUENCE_MASK_INPUT_ID      = 1,
630 };
631
632 enum {
633         /* Mask animation will be remapped relative to the strip start frame. */
634         SEQUENCE_MASK_TIME_RELATIVE = 0,
635         /* Global (scene) frame number will be used to access the mask. */
636         SEQUENCE_MASK_TIME_ABSOLUTE = 1,
637 };
638
639 #endif  /* __DNA_SEQUENCE_TYPES_H__ */