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