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