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