Sequencer: remove effect mask input
[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
33 #ifndef __DNA_SEQUENCE_TYPES_H__
34 #define __DNA_SEQUENCE_TYPES_H__
35
36 #include "DNA_defs.h"
37 #include "DNA_color_types.h"
38 #include "DNA_listBase.h"
39 #include "DNA_vec_types.h"
40
41 struct Ipo;
42 struct Scene;
43 struct bSound;
44 struct MovieClip;
45
46 /* strlens; 256= FILE_MAXFILE, 768= FILE_MAXDIR */
47
48 typedef struct StripElem {
49         char name[256];
50         int orig_width, orig_height;
51 } StripElem;
52
53 typedef struct StripCrop {
54         int top;
55         int bottom;
56         int left;
57         int right;
58 } StripCrop;
59
60 typedef struct StripTransform {
61         int xofs;
62         int yofs;
63 } StripTransform;
64
65 typedef struct StripColorBalance {
66         float lift[3];
67         float gamma[3];
68         float gain[3];
69         int flag;
70         int pad;
71         // float exposure;
72         // float saturation;
73 } StripColorBalance;
74
75 typedef struct StripProxy {
76         char dir[768];         // custom directory for index and proxy files
77                                // (defaults to BL_proxy)
78
79         char file[256];        // custom file
80         struct anim *anim;     // custom proxy anim file
81
82         short tc;              // time code in use
83
84         short quality;         // proxy build quality
85         short build_size_flags; // size flags (see below) of all proxies
86                                // to build
87         short build_tc_flags;  // time code flags (see below) of all tc indices
88                                // to build
89 } StripProxy;
90
91 typedef struct Strip {
92         struct Strip *next, *prev;
93         int us, done;
94         int startstill, endstill;
95         StripElem *stripdata;  /* only used as an array in IMAGE sequences(!),
96                                 * and as a 1-element array in MOVIE sequences,
97                                 * NULL for all other strip-types */
98         char dir[768];
99         StripProxy *proxy;
100         StripCrop *crop;
101         StripTransform *transform;
102         StripColorBalance *color_balance DNA_DEPRECATED;
103 } Strip;
104
105 /**
106  * The sequence structure is the basic struct used by any strip.
107  * each of the strips uses a different sequence structure.
108  *
109  * \warning The first part identical to ID (for use in ipo's)
110  * the commend above is historic, probably we can drop the ID compatibility,
111  * but take care making this change.
112  *
113  * \warning This is really a 'Strip' in the UI!, name is highly confusing.
114  */
115 typedef struct Sequence {
116         struct Sequence *next, *prev;
117         void *tmp; /* tmp var for copying, and tagging for linked selection */
118         void *lib; /* needed (to be like ipo), else it will raise libdata warnings, this should never be used */
119         char name[64]; /* SEQ_NAME_MAXSTR - name, set by default and needs to be unique, for RNA paths */
120
121         int flag, type; /*flags bitmap (see below) and the type of sequence*/
122         int len; /* the length of the contents of this strip - before handles are applied */
123         int start, startofs, endofs;
124         int startstill, endstill;
125         int machine, depth; /*machine - the strip channel, depth - the depth in the sequence when dealing with metastrips */
126         int startdisp, enddisp; /*starting and ending points in the sequence*/
127         float sat;
128         float mul, handsize;
129
130         short anim_preseek;
131         short streamindex;    /* streamindex for movie or sound files with several streams */
132         int multicam_source;  /* for multicam source selection */
133         int clip_flag;        /* MOVIECLIP render flags */
134
135         Strip *strip;
136
137         struct Ipo *ipo DNA_DEPRECATED;   /* old animation system, deprecated for 2.5 */
138
139         /* these ID vars should never be NULL but can be when linked libs fail to load, so check on access */
140         struct Scene     *scene;
141         struct Object    *scene_camera;  /* override scene camera */
142         struct MovieClip *clip;          /* for MOVIECLIP strips */
143         struct Mask      *mask;          /* for MASK strips */
144
145         struct anim *anim;      /* for MOVIE strips */
146
147         float effect_fader;
148         float speed_fader;
149
150         /* pointers for effects: */
151         struct Sequence *seq1, *seq2, *seq3;
152
153         ListBase seqbase;       /* list of strips for metastrips */
154
155         struct bSound *sound;   /* the linked "bSound" object */
156         void *scene_sound;
157         float volume;
158
159         float pitch, pan;     /* pitch (-0.1..10), pan -2..2 */
160         float strobe;
161
162         void *effectdata;     /* Struct pointer for effect settings */
163
164         int anim_startofs;    /* only use part of animation file */
165         int anim_endofs;      /* is subtle different to startofs / endofs */
166
167
168         int blend_mode;
169         float blend_opacity;
170
171         /* is sfra needed anymore? - it looks like its only used in one place */
172         int sfra, pad;  /* starting frame according to the timeline of the scene. */
173
174         /* modifiers */
175         ListBase modifiers;
176 } Sequence;
177
178 typedef struct MetaStack {
179         struct MetaStack *next, *prev;
180         ListBase *oldbasep;
181         Sequence *parseq;
182 } MetaStack;
183
184 typedef struct Editing {
185         ListBase *seqbasep; /* pointer to the current list of seq's being edited (can be within a meta strip) */
186         ListBase seqbase;   /* pointer to the top-most seq's */
187         ListBase metastack;
188         
189         /* Context vars, used to be static */
190         Sequence *act_seq;
191         char act_imagedir[1024]; /* 1024 = FILE_MAX */
192         char act_sounddir[1024]; /* 1024 = FILE_MAX */
193
194         int over_ofs, over_cfra;
195         int over_flag, pad;
196         rctf over_border;
197 } Editing;
198
199 /* ************* Effect Variable Structs ********* */
200 typedef struct WipeVars {
201         float edgeWidth, angle;
202         short forward, wipetype;
203 } WipeVars;
204
205 typedef struct GlowVars {       
206         float fMini;    /*      Minimum intensity to trigger a glow */
207         float fClamp;
208         float fBoost;   /*      Amount to multiply glow intensity */
209         float dDist;    /*      Radius of glow blurring */
210         int dQuality;
211         int bNoComp;    /*      SHOW/HIDE glow buffer */
212 } GlowVars;
213
214 typedef struct TransformVars {
215         float ScalexIni;
216         float ScaleyIni;
217         float xIni;
218         float yIni;
219         float rotIni;
220         int percent;
221         int interpolation;
222         int uniform_scale; /* preserve aspect/ratio when scaling */
223 } TransformVars;
224
225 typedef struct SolidColorVars {
226         float col[3];
227         float pad;
228 } SolidColorVars;
229
230 typedef struct SpeedControlVars {
231         float *frameMap;
232         float globalSpeed;
233         int flags;
234         int length;
235         int lastValidFrame;
236 } SpeedControlVars;
237
238 /* ***************** Sequence modifiers ****************** */
239
240 typedef struct SequenceModifierData {
241         struct SequenceModifierData *next, *prev;
242         int type, flag;
243         char name[64]; /* MAX_NAME */
244
245         /* mask input, either sequence or maks ID */
246         int mask_input_type, pad;
247
248         struct Sequence *mask_sequence;
249         struct Mask     *mask_id;
250 } SequenceModifierData;
251
252 typedef struct ColorBalanceModifierData {
253         SequenceModifierData modifier;
254
255         StripColorBalance color_balance;
256         float color_multiply;
257 } ColorBalanceModifierData;
258
259 typedef struct CurvesModifierData {
260         SequenceModifierData modifier;
261
262         struct CurveMapping curve_mapping;
263 } CurvesModifierData;
264
265 typedef struct HueCorrectModifierData {
266         SequenceModifierData modifier;
267
268         struct CurveMapping curve_mapping;
269 } HueCorrectModifierData;
270
271 typedef struct BrightContrastModifierData {
272         SequenceModifierData modifier;
273
274         float bright;
275         float contrast;
276 } BrightContrastModifierData;
277
278 #define MAXSEQ          32
279
280 #define SELECT 1
281
282 /* Editor->over_flag */
283 #define SEQ_EDIT_OVERLAY_SHOW           1
284 #define SEQ_EDIT_OVERLAY_ABS            2
285
286 #define SEQ_STRIP_OFSBOTTOM     0.2f
287 #define SEQ_STRIP_OFSTOP        0.8f
288
289 /* SpeedControlVars->flags */
290 #define SEQ_SPEED_INTEGRATE      1
291 #define SEQ_SPEED_BLEND          2
292 #define SEQ_SPEED_COMPRESS_IPO_Y 4
293
294 /* ***************** SEQUENCE ****************** */
295 #define SEQ_NAME_MAXSTR         64
296
297 /* seq->flag */
298 #define SEQ_LEFTSEL                 (1 << 1)
299 #define SEQ_RIGHTSEL                (1 << 2)
300 #define SEQ_OVERLAP                 (1 << 3)
301 #define SEQ_FILTERY                 (1 << 4)
302 #define SEQ_MUTE                    (1 << 5)
303 #define SEQ_MAKE_PREMUL             (1 << 6)
304 #define SEQ_REVERSE_FRAMES          (1 << 7)
305 #define SEQ_IPO_FRAME_LOCKED        (1 << 8)
306 #define SEQ_EFFECT_NOT_LOADED       (1 << 9)
307 #define SEQ_FLAG_DELETE             (1 << 10)
308 #define SEQ_FLIPX                   (1 << 11)
309 #define SEQ_FLIPY                   (1 << 12)
310 #define SEQ_MAKE_FLOAT              (1 << 13)
311 #define SEQ_LOCK                    (1 << 14)
312 #define SEQ_USE_PROXY               (1 << 15)
313 #define SEQ_USE_TRANSFORM           (1 << 16)
314 #define SEQ_USE_CROP                (1 << 17)
315 /* #define SEQ_USE_COLOR_BALANCE       (1 << 18) */ /* DEPRECATED */
316 #define SEQ_USE_PROXY_CUSTOM_DIR    (1 << 19)
317
318 #define SEQ_USE_PROXY_CUSTOM_FILE   (1 << 21)
319 #define SEQ_USE_EFFECT_DEFAULT_FADE (1 << 22)
320
321 // flags for whether those properties are animated or not
322 #define SEQ_AUDIO_VOLUME_ANIMATED   (1 << 24)
323 #define SEQ_AUDIO_PITCH_ANIMATED    (1 << 25)
324 #define SEQ_AUDIO_PAN_ANIMATED      (1 << 26)
325 #define SEQ_AUDIO_DRAW_WAVEFORM     (1 << 27)
326
327 #define SEQ_INVALID_EFFECT          (1 << 31)
328
329 /* convenience define for all selection flags */
330 #define SEQ_ALLSEL  (SELECT + SEQ_LEFTSEL + SEQ_RIGHTSEL)
331
332 /* deprecated, don't use a flag anymore*/
333 /*#define SEQ_ACTIVE                            1048576*/
334
335 #define SEQ_COLOR_BALANCE_INVERSE_GAIN 1
336 #define SEQ_COLOR_BALANCE_INVERSE_GAMMA 2
337 #define SEQ_COLOR_BALANCE_INVERSE_LIFT 4
338
339 /* !!! has to be same as IMB_imbuf.h IMB_PROXY_... and IMB_TC_... */
340
341 #define SEQ_PROXY_IMAGE_SIZE_25                 1
342 #define SEQ_PROXY_IMAGE_SIZE_50                 2
343 #define SEQ_PROXY_IMAGE_SIZE_75                 4
344 #define SEQ_PROXY_IMAGE_SIZE_100                8
345
346 #define SEQ_PROXY_TC_NONE                       0
347 #define SEQ_PROXY_TC_RECORD_RUN                 1
348 #define SEQ_PROXY_TC_FREE_RUN                   2
349 #define SEQ_PROXY_TC_INTERP_REC_DATE_FREE_RUN   4
350 #define SEQ_PROXY_TC_RECORD_RUN_NO_GAPS         8
351 #define SEQ_PROXY_TC_ALL                        15
352
353 /* seq->type WATCH IT: SEQ_TYPE_EFFECT BIT is used to determine if this is an effect strip!!! */
354 enum {
355         SEQ_TYPE_IMAGE       = 0,
356         SEQ_TYPE_META        = 1,
357         SEQ_TYPE_SCENE       = 2,
358         SEQ_TYPE_MOVIE       = 3,
359         SEQ_TYPE_SOUND_RAM   = 4,
360         SEQ_TYPE_SOUND_HD    = 5,
361         SEQ_TYPE_MOVIECLIP   = 6,
362         SEQ_TYPE_MASK        = 7,
363
364         SEQ_TYPE_EFFECT      = 8,
365         SEQ_TYPE_CROSS       = 8,
366         SEQ_TYPE_ADD         = 9,
367         SEQ_TYPE_SUB         = 10,
368         SEQ_TYPE_ALPHAOVER   = 11,
369         SEQ_TYPE_ALPHAUNDER  = 12,
370         SEQ_TYPE_GAMCROSS    = 13,
371         SEQ_TYPE_MUL         = 14,
372         SEQ_TYPE_OVERDROP    = 15,
373         /* SEQ_TYPE_PLUGIN      = 24, */ /* Deprecated */
374         SEQ_TYPE_WIPE        = 25,
375         SEQ_TYPE_GLOW        = 26,
376         SEQ_TYPE_TRANSFORM   = 27,
377         SEQ_TYPE_COLOR       = 28,
378         SEQ_TYPE_SPEED       = 29,
379         SEQ_TYPE_MULTICAM    = 30,
380         SEQ_TYPE_ADJUSTMENT  = 31,
381         SEQ_TYPE_EFFECT_MAX  = 31
382 };
383
384 #define STRIPELEM_FAILED       0
385 #define STRIPELEM_OK           1
386
387 #define STRIPELEM_PREVIEW_DONE  1
388
389 #define SEQ_MOVIECLIP_RENDER_UNDISTORTED (1 << 0)
390 #define SEQ_MOVIECLIP_RENDER_STABILIZED  (1 << 1)
391
392 #define SEQ_BLEND_REPLACE      0
393 /* all other BLEND_MODEs are simple SEQ_TYPE_EFFECT ids and therefore identical
394  * to the table above. (Only those effects that handle _exactly_ two inputs,
395  * otherwise, you can't really blend, right :) !)
396  */
397
398
399 #define SEQ_HAS_PATH(_seq) (ELEM4((_seq)->type, SEQ_TYPE_MOVIE, SEQ_TYPE_IMAGE, SEQ_TYPE_SOUND_RAM, SEQ_TYPE_SOUND_HD))
400
401 /* modifiers */
402
403 /* SequenceModifierData->type */
404 enum {
405         seqModifierType_ColorBalance   = 1,
406         seqModifierType_Curves         = 2,
407         seqModifierType_HueCorrect     = 3,
408         seqModifierType_BrightContrast = 4,
409
410         NUM_SEQUENCE_MODIFIER_TYPES
411 };
412
413 /* SequenceModifierData->flag */
414 enum {
415         SEQUENCE_MODIFIER_MUTE      = (1 << 0),
416         SEQUENCE_MODIFIER_EXPANDED  = (1 << 1),
417 };
418
419 enum {
420         SEQUENCE_MASK_INPUT_STRIP   = 0,
421         SEQUENCE_MASK_INPUT_ID      = 1
422 };
423
424 #endif