fix for blend_render_info.py not closing file & some edits to comments.
[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;
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         /* maks input for effects */
154         struct Sequence *mask_sequence;
155
156         ListBase seqbase;       /* list of strips for metastrips */
157
158         struct bSound *sound;   /* the linked "bSound" object */
159         void *scene_sound;
160         float volume;
161
162         float pitch, pan;     /* pitch (-0.1..10), pan -2..2 */
163         float strobe;
164
165         void *effectdata;     /* Struct pointer for effect settings */
166
167         int anim_startofs;    /* only use part of animation file */
168         int anim_endofs;      /* is subtle different to startofs / endofs */
169
170
171         int blend_mode;
172         float blend_opacity;
173
174         /* is sfra needed anymore? - it looks like its only used in one place */
175         int sfra, pad;  /* starting frame according to the timeline of the scene. */
176
177         /* modifiers */
178         ListBase modifiers;
179 } Sequence;
180
181 typedef struct MetaStack {
182         struct MetaStack *next, *prev;
183         ListBase *oldbasep;
184         Sequence *parseq;
185 } MetaStack;
186
187 typedef struct Editing {
188         ListBase *seqbasep; /* pointer to the current list of seq's being edited (can be within a meta strip) */
189         ListBase seqbase;   /* pointer to the top-most seq's */
190         ListBase metastack;
191         
192         /* Context vars, used to be static */
193         Sequence *act_seq;
194         char act_imagedir[1024]; /* 1024 = FILE_MAX */
195         char act_sounddir[1024]; /* 1024 = FILE_MAX */
196
197         int over_ofs, over_cfra;
198         int over_flag, pad;
199         rctf over_border;
200 } Editing;
201
202 /* ************* Effect Variable Structs ********* */
203 typedef struct WipeVars {
204         float edgeWidth, angle;
205         short forward, wipetype;
206 } WipeVars;
207
208 typedef struct GlowVars {       
209         float fMini;    /*      Minimum intensity to trigger a glow */
210         float fClamp;
211         float fBoost;   /*      Amount to multiply glow intensity */
212         float dDist;    /*      Radius of glow blurring */
213         int dQuality;
214         int bNoComp;    /*      SHOW/HIDE glow buffer */
215 } GlowVars;
216
217 typedef struct TransformVars {
218         float ScalexIni;
219         float ScaleyIni;
220         float xIni;
221         float yIni;
222         float rotIni;
223         int percent;
224         int interpolation;
225         int uniform_scale; /* preserve aspect/ratio when scaling */
226 } TransformVars;
227
228 typedef struct SolidColorVars {
229         float col[3];
230         float pad;
231 } SolidColorVars;
232
233 typedef struct SpeedControlVars {
234         float *frameMap;
235         float globalSpeed;
236         int flags;
237         int length;
238         int lastValidFrame;
239 } SpeedControlVars;
240
241 /* ***************** Sequence modifiers ****************** */
242
243 typedef struct SequenceModifierData {
244         struct SequenceModifierData *next, *prev;
245         int type, flag;
246         char name[64]; /* MAX_NAME */
247
248         /* mask input, either sequence or maks ID */
249         int mask_input_type, pad;
250
251         struct Sequence *mask_sequence;
252         struct Mask     *mask_id;
253 } SequenceModifierData;
254
255 typedef struct ColorBalanceModifierData {
256         SequenceModifierData modifier;
257
258         StripColorBalance color_balance;
259         float color_multiply;
260 } ColorBalanceModifierData;
261
262 typedef struct CurvesModifierData {
263         SequenceModifierData modifier;
264
265         struct CurveMapping curve_mapping;
266 } CurvesModifierData;
267
268 typedef struct HueCorrectModifierData {
269         SequenceModifierData modifier;
270
271         struct CurveMapping curve_mapping;
272 } HueCorrectModifierData;
273
274 #define MAXSEQ          32
275
276 #define SELECT 1
277
278 /* Editor->over_flag */
279 #define SEQ_EDIT_OVERLAY_SHOW           1
280 #define SEQ_EDIT_OVERLAY_ABS            2
281
282 #define SEQ_STRIP_OFSBOTTOM     0.2f
283 #define SEQ_STRIP_OFSTOP        0.8f
284
285 /* SpeedControlVars->flags */
286 #define SEQ_SPEED_INTEGRATE      1
287 #define SEQ_SPEED_BLEND          2
288 #define SEQ_SPEED_COMPRESS_IPO_Y 4
289
290 /* ***************** SEQUENCE ****************** */
291 #define SEQ_NAME_MAXSTR         64
292
293 /* seq->flag */
294 #define SEQ_LEFTSEL                 (1 << 1)
295 #define SEQ_RIGHTSEL                (1 << 2)
296 #define SEQ_OVERLAP                 (1 << 3)
297 #define SEQ_FILTERY                 (1 << 4)
298 #define SEQ_MUTE                    (1 << 5)
299 #define SEQ_MAKE_PREMUL             (1 << 6)
300 #define SEQ_REVERSE_FRAMES          (1 << 7)
301 #define SEQ_IPO_FRAME_LOCKED        (1 << 8)
302 #define SEQ_EFFECT_NOT_LOADED       (1 << 9)
303 #define SEQ_FLAG_DELETE             (1 << 10)
304 #define SEQ_FLIPX                   (1 << 11)
305 #define SEQ_FLIPY                   (1 << 12)
306 #define SEQ_MAKE_FLOAT              (1 << 13)
307 #define SEQ_LOCK                    (1 << 14)
308 #define SEQ_USE_PROXY               (1 << 15)
309 #define SEQ_USE_TRANSFORM           (1 << 16)
310 #define SEQ_USE_CROP                (1 << 17)
311 #define SEQ_USE_COLOR_BALANCE       (1 << 18)
312 #define SEQ_USE_PROXY_CUSTOM_DIR    (1 << 19)
313
314 #define SEQ_USE_PROXY_CUSTOM_FILE   (1 << 21)
315 #define SEQ_USE_EFFECT_DEFAULT_FADE (1 << 22)
316
317 // flags for whether those properties are animated or not
318 #define SEQ_AUDIO_VOLUME_ANIMATED   (1 << 24)
319 #define SEQ_AUDIO_PITCH_ANIMATED    (1 << 25)
320 #define SEQ_AUDIO_PAN_ANIMATED      (1 << 26)
321 #define SEQ_AUDIO_DRAW_WAVEFORM     (1 << 27)
322
323 #define SEQ_INVALID_EFFECT          (1 << 31)
324
325 /* convenience define for all selection flags */
326 #define SEQ_ALLSEL  (SELECT + SEQ_LEFTSEL + SEQ_RIGHTSEL)
327
328 /* deprecated, don't use a flag anymore*/
329 /*#define SEQ_ACTIVE                            1048576*/
330
331 #define SEQ_COLOR_BALANCE_INVERSE_GAIN 1
332 #define SEQ_COLOR_BALANCE_INVERSE_GAMMA 2
333 #define SEQ_COLOR_BALANCE_INVERSE_LIFT 4
334
335 /* !!! has to be same as IMB_imbuf.h IMB_PROXY_... and IMB_TC_... */
336
337 #define SEQ_PROXY_IMAGE_SIZE_25                 1
338 #define SEQ_PROXY_IMAGE_SIZE_50                 2
339 #define SEQ_PROXY_IMAGE_SIZE_75                 4
340 #define SEQ_PROXY_IMAGE_SIZE_100                8
341
342 #define SEQ_PROXY_TC_NONE                       0
343 #define SEQ_PROXY_TC_RECORD_RUN                 1
344 #define SEQ_PROXY_TC_FREE_RUN                   2
345 #define SEQ_PROXY_TC_INTERP_REC_DATE_FREE_RUN   4
346 #define SEQ_PROXY_TC_RECORD_RUN_NO_GAPS         8
347 #define SEQ_PROXY_TC_ALL                        15
348
349 /* seq->type WATCH IT: SEQ_TYPE_EFFECT BIT is used to determine if this is an effect strip!!! */
350 enum {
351         SEQ_TYPE_IMAGE       = 0,
352         SEQ_TYPE_META        = 1,
353         SEQ_TYPE_SCENE       = 2,
354         SEQ_TYPE_MOVIE       = 3,
355         SEQ_TYPE_SOUND_RAM   = 4,
356         SEQ_TYPE_SOUND_HD    = 5,
357         SEQ_TYPE_MOVIECLIP   = 6,
358         SEQ_TYPE_MASK        = 7,
359
360         SEQ_TYPE_EFFECT      = 8,
361         SEQ_TYPE_CROSS       = 8,
362         SEQ_TYPE_ADD         = 9,
363         SEQ_TYPE_SUB         = 10,
364         SEQ_TYPE_ALPHAOVER   = 11,
365         SEQ_TYPE_ALPHAUNDER  = 12,
366         SEQ_TYPE_GAMCROSS    = 13,
367         SEQ_TYPE_MUL         = 14,
368         SEQ_TYPE_OVERDROP    = 15,
369         /* SEQ_TYPE_PLUGIN      = 24, */ /* Deprecated */
370         SEQ_TYPE_WIPE        = 25,
371         SEQ_TYPE_GLOW        = 26,
372         SEQ_TYPE_TRANSFORM   = 27,
373         SEQ_TYPE_COLOR       = 28,
374         SEQ_TYPE_SPEED       = 29,
375         SEQ_TYPE_MULTICAM    = 30,
376         SEQ_TYPE_ADJUSTMENT  = 31,
377         SEQ_TYPE_EFFECT_MAX  = 31
378 };
379
380 #define STRIPELEM_FAILED       0
381 #define STRIPELEM_OK           1
382
383 #define STRIPELEM_PREVIEW_DONE  1
384
385 #define SEQ_MOVIECLIP_RENDER_UNDISTORTED (1 << 0)
386 #define SEQ_MOVIECLIP_RENDER_STABILIZED  (1 << 1)
387
388 #define SEQ_BLEND_REPLACE      0
389 /* all other BLEND_MODEs are simple SEQ_TYPE_EFFECT ids and therefore identical
390  * to the table above. (Only those effects that handle _exactly_ two inputs,
391  * otherwise, you can't really blend, right :) !)
392  */
393
394
395 #define SEQ_HAS_PATH(_seq) (ELEM4((_seq)->type, SEQ_TYPE_MOVIE, SEQ_TYPE_IMAGE, SEQ_TYPE_SOUND_RAM, SEQ_TYPE_SOUND_HD))
396
397 /* modifiers */
398
399 /* SequenceModifierData->type */
400 enum {
401         seqModifierType_ColorBalance   = 1,
402         seqModifierType_Curves         = 2,
403         seqModifierType_HueCorrect     = 3,
404
405         NUM_SEQUENCE_MODIFIER_TYPES
406 };
407
408 /* SequenceModifierData->flag */
409 enum {
410         SEQUENCE_MODIFIER_MUTE      = (1 << 0),
411         SEQUENCE_MODIFIER_EXPANDED  = (1 << 1),
412 };
413
414 enum {
415         SEQUENCE_MASK_INPUT_STRIP   = 0,
416         SEQUENCE_MASK_INPUT_ID      = 1
417 };
418
419 #endif