Massive Code cleanup:
[blender-staging.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
105 typedef struct PluginSeq {
106         char name[1024]; /* 1024 = FILE_MAX */
107         void *handle;
108
109         char *pname;
110
111         int vars, version;
112
113         void *varstr;
114         float *cfra;
115
116         float data[32];
117
118         void *instance_private_data;
119         void **current_private_data;
120
121         void (*doit)(void);
122
123         void (*callback)(void);
124 } PluginSeq;
125
126 /* The sequence structure is the basic struct used by any strip. each of the strips uses a different sequence structure.*/
127 /* WATCH IT: first part identical to ID (for use in ipo's) */
128
129 typedef struct Sequence {
130         struct Sequence *next, *prev;
131         void *tmp; /* tmp var for copying, and tagging for linked selection */
132         void *lib; /* needed (to be like ipo), else it will raise libdata warnings, this should never be used */
133         char name[64]; /* SEQ_NAME_MAXSTR - name, set by default and needs to be unique, for RNA paths */
134
135         int flag, type; /*flags bitmap (see below) and the type of sequence*/
136         int len; /* the length of the contents of this strip - before handles are applied */
137         int start, startofs, endofs;
138         int startstill, endstill;
139         int machine, depth; /*machine - the strip channel, depth - the depth in the sequence when dealing with metastrips */
140         int startdisp, enddisp; /*starting and ending points in the sequence*/
141         float sat;
142         float mul, handsize;
143
144         short anim_preseek;
145         short streamindex;   /* streamindex for movie or sound files with several streams */
146         int multicam_source;  /* for multicam source selection */
147         int clip_flag;          /* MOVIECLIP render flags */
148
149         Strip *strip;
150
151         struct Ipo *ipo  DNA_DEPRECATED;  /* old animation system, deprecated for 2.5 */
152         struct Scene *scene;
153         struct Object *scene_camera; /* override scene camera */
154
155         struct anim *anim;      /* for MOVIE strips */
156         struct MovieClip *clip; /* for MOVIECLIP strips */
157
158         float effect_fader;
159         float speed_fader;
160
161         PluginSeq *plugin;
162
163         /* pointers for effects: */
164         struct Sequence *seq1, *seq2, *seq3;
165
166         ListBase seqbase;       /* list of strips for metastrips */
167
168         struct bSound *sound;   /* the linked "bSound" object */
169         void *scene_sound;
170         float volume;
171
172         float pitch, pan;       /* pitch (-0.1..10), pan -2..2 */
173         float strobe;
174
175         void *effectdata;       /* Struct pointer for effect settings */
176
177         int anim_startofs;    /* only use part of animation file */
178         int anim_endofs;      /* is subtle different to startofs / endofs */
179
180
181         int blend_mode;
182         float blend_opacity;
183
184                         /* is sfra needed anymore? - it looks like its only used in one place */
185         int sfra, pad;  /* starting frame according to the timeline of the scene. */
186 } Sequence;
187
188 typedef struct MetaStack {
189         struct MetaStack *next, *prev;
190         ListBase *oldbasep;
191         Sequence *parseq;
192 } MetaStack;
193
194 typedef struct Editing {
195         ListBase *seqbasep; /* pointer to the current list of seq's being edited (can be within a meta strip) */
196         ListBase seqbase;       /* pointer to the top-most seq's */
197         ListBase metastack;
198         
199         /* Context vars, used to be static */
200         Sequence *act_seq;
201         char act_imagedir[1024]; /* 1024 = FILE_MAX */
202         char act_sounddir[1024]; /* 1024 = FILE_MAX */
203
204         int over_ofs, over_cfra;
205         int over_flag, pad;
206         rctf over_border;
207 } Editing;
208
209 /* ************* Effect Variable Structs ********* */
210 typedef struct WipeVars {
211         float edgeWidth, angle;
212         short forward, wipetype;
213 } WipeVars;
214
215 typedef struct GlowVars {       
216         float fMini;    /*      Minimum intensity to trigger a glow */
217         float fClamp;
218         float fBoost;   /*      Amount to multiply glow intensity */
219         float dDist;    /*      Radius of glow blurring */
220         int     dQuality;
221         int     bNoComp;        /*      SHOW/HIDE glow buffer */
222 } GlowVars;
223
224 typedef struct TransformVars {
225         float ScalexIni;
226         float ScaleyIni;
227         float xIni;
228         float yIni;
229         float rotIni;
230         int percent;
231         int interpolation;
232         int uniform_scale; /* preserve aspect/ratio when scaling */
233 } TransformVars;
234
235 typedef struct SolidColorVars {
236         float col[3];
237         float pad;
238 } SolidColorVars;
239
240 typedef struct SpeedControlVars {
241         float * frameMap;
242         float globalSpeed;
243         int flags;
244         int length;
245         int lastValidFrame;
246 } SpeedControlVars;
247
248 #define MAXSEQ          32
249
250 #define SELECT 1
251
252 /* Editor->over_flag */
253 #define SEQ_EDIT_OVERLAY_SHOW                   1
254 #define SEQ_EDIT_OVERLAY_ABS                    2
255
256 #define SEQ_STRIP_OFSBOTTOM             0.2f
257 #define SEQ_STRIP_OFSTOP                0.8f
258
259 /* SpeedControlVars->flags */
260 #define SEQ_SPEED_INTEGRATE      1
261 #define SEQ_SPEED_BLEND          2
262 #define SEQ_SPEED_COMPRESS_IPO_Y 4
263
264 /* ***************** SEQUENCE ****************** */
265 #define SEQ_NAME_MAXSTR                 64
266
267 /* seq->flag */
268 #define SEQ_LEFTSEL                 (1<<1)
269 #define SEQ_RIGHTSEL                (1<<2)
270 #define SEQ_OVERLAP                 (1<<3)
271 #define SEQ_FILTERY                 (1<<4)
272 #define SEQ_MUTE                    (1<<5)
273 #define SEQ_MAKE_PREMUL             (1<<6)
274 #define SEQ_REVERSE_FRAMES          (1<<7)
275 #define SEQ_IPO_FRAME_LOCKED        (1<<8)
276 #define SEQ_EFFECT_NOT_LOADED       (1<<9)
277 #define SEQ_FLAG_DELETE             (1<<10)
278 #define SEQ_FLIPX                   (1<<11)
279 #define SEQ_FLIPY                   (1<<12)
280 #define SEQ_MAKE_FLOAT              (1<<13)
281 #define SEQ_LOCK                    (1<<14)
282 #define SEQ_USE_PROXY               (1<<15)
283 #define SEQ_USE_TRANSFORM           (1<<16)
284 #define SEQ_USE_CROP                (1<<17)
285 #define SEQ_USE_COLOR_BALANCE       (1<<18)
286 #define SEQ_USE_PROXY_CUSTOM_DIR    (1<<19)
287
288 #define SEQ_USE_PROXY_CUSTOM_FILE   (1<<21)
289 #define SEQ_USE_EFFECT_DEFAULT_FADE (1<<22)
290
291 // flags for whether those properties are animated or not
292 #define SEQ_AUDIO_VOLUME_ANIMATED   (1<<24)
293 #define SEQ_AUDIO_PITCH_ANIMATED    (1<<25)
294 #define SEQ_AUDIO_PAN_ANIMATED      (1<<26)
295 #define SEQ_AUDIO_DRAW_WAVEFORM     (1<<27)
296
297 #define SEQ_INVALID_EFFECT          (1<<31)
298
299 /* convenience define for all selection flags */
300 #define SEQ_ALLSEL      (SELECT+SEQ_LEFTSEL+SEQ_RIGHTSEL)
301
302 /* deprecated, don't use a flag anymore*/
303 /*#define SEQ_ACTIVE                            1048576*/
304
305 #define SEQ_COLOR_BALANCE_INVERSE_GAIN 1
306 #define SEQ_COLOR_BALANCE_INVERSE_GAMMA 2
307 #define SEQ_COLOR_BALANCE_INVERSE_LIFT 4
308
309 /* !!! has to be same as IMB_imbuf.h IMB_PROXY_... and IMB_TC_... */
310
311 #define SEQ_PROXY_IMAGE_SIZE_25                 1
312 #define SEQ_PROXY_IMAGE_SIZE_50                 2
313 #define SEQ_PROXY_IMAGE_SIZE_75                 4
314 #define SEQ_PROXY_IMAGE_SIZE_100                8
315
316 #define SEQ_PROXY_TC_NONE                       0
317 #define SEQ_PROXY_TC_RECORD_RUN                 1
318 #define SEQ_PROXY_TC_FREE_RUN                   2
319 #define SEQ_PROXY_TC_INTERP_REC_DATE_FREE_RUN   4
320 #define SEQ_PROXY_TC_RECORD_RUN_NO_GAPS         8
321 #define SEQ_PROXY_TC_ALL                        15
322
323 /* seq->type WATCH IT: SEQ_EFFECT BIT is used to determine if this is an effect strip!!! */
324 #define SEQ_IMAGE               0
325 #define SEQ_META                1
326 #define SEQ_SCENE               2
327 #define SEQ_MOVIE               3
328 #define SEQ_RAM_SOUND           4
329 #define SEQ_HD_SOUND            5
330 #define SEQ_SOUND               4
331 #define SEQ_MOVIECLIP           6
332
333 #define SEQ_EFFECT              8
334 #define SEQ_CROSS               8
335 #define SEQ_ADD                 9
336 #define SEQ_SUB                 10
337 #define SEQ_ALPHAOVER   11
338 #define SEQ_ALPHAUNDER  12
339 #define SEQ_GAMCROSS    13
340 #define SEQ_MUL                 14
341 #define SEQ_OVERDROP    15
342 // #define SEQ_PLUGIN           24 /* Deprecated */
343 #define SEQ_WIPE                25
344 #define SEQ_GLOW                26
345 #define SEQ_TRANSFORM           27
346 #define SEQ_COLOR               28
347 #define SEQ_SPEED               29
348 #define SEQ_MULTICAM            30
349 #define SEQ_ADJUSTMENT          31
350 #define SEQ_EFFECT_MAX          31
351
352 #define STRIPELEM_FAILED       0
353 #define STRIPELEM_OK           1
354
355 #define STRIPELEM_PREVIEW_DONE  1
356
357 #define SEQ_MOVIECLIP_RENDER_UNDISTORTED (1<<0)
358 #define SEQ_MOVIECLIP_RENDER_STABILIZED  (1<<1)
359
360 #define SEQ_BLEND_REPLACE      0
361 /* all other BLEND_MODEs are simple SEQ_EFFECT ids and therefore identical
362  * to the table above. (Only those effects that handle _exactly_ two inputs,
363  * otherwise, you can't really blend, right :) !)
364  */
365
366
367 #define SEQ_HAS_PATH(_seq) (ELEM4((_seq)->type, SEQ_MOVIE, SEQ_IMAGE, SEQ_RAM_SOUND, SEQ_HD_SOUND))
368
369 #endif
370