Fix T63828, T62005: copy/paste or append loses rigid body object
[blender.git] / source / blender / makesdna / DNA_sequence_types.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
17  * All rights reserved.
18  */
19 /** \file
20  * \ingroup DNA
21  *
22  * Structs for use by the 'Sequencer' (Video Editor)
23  *
24  * Note on terminology
25  * - #Sequence: video/effect/audio data you can select and manipulate in the sequencer.
26  * - #Sequence.machine: Strange name for the channel.
27  * - #Strip: The data referenced by the #Sequence
28  * - Meta Strip (SEQ_TYPE_META): Support for nesting Sequences.
29  */
30
31 #ifndef __DNA_SEQUENCE_TYPES_H__
32 #define __DNA_SEQUENCE_TYPES_H__
33
34 #include "DNA_defs.h"
35 #include "DNA_color_types.h"
36 #include "DNA_listBase.h"
37 #include "DNA_vec_types.h"
38 #include "DNA_vfont_types.h"
39
40 struct Ipo;
41 struct MovieClip;
42 struct Scene;
43 struct bSound;
44
45 /* strlens; 256= FILE_MAXFILE, 768= FILE_MAXDIR */
46
47 typedef struct StripAnim {
48   struct StripAnim *next, *prev;
49   struct anim *anim;
50 } StripAnim;
51
52 typedef struct StripElem {
53   char name[256];
54   int orig_width, orig_height;
55 } StripElem;
56
57 typedef struct StripCrop {
58   int top;
59   int bottom;
60   int left;
61   int right;
62 } StripCrop;
63
64 typedef struct StripTransform {
65   int xofs;
66   int yofs;
67 } StripTransform;
68
69 typedef struct StripColorBalance {
70   float lift[3];
71   float gamma[3];
72   float gain[3];
73   int flag;
74   char _pad[4];
75   // float exposure;
76   // float saturation;
77 } StripColorBalance;
78
79 typedef struct StripProxy {
80   char dir[768];  // custom directory for index and proxy files
81                   // (defaults to BL_proxy)
82
83   char file[256];     // custom file
84   struct anim *anim;  // custom proxy anim file
85
86   short tc;  // time code in use
87
88   short quality;           // proxy build quality
89   short build_size_flags;  // size flags (see below) of all proxies
90                            // to build
91   short build_tc_flags;    // time code flags (see below) of all tc indices
92                            // to build
93   short build_flags;
94   char storage;
95   char _pad[5];
96 } StripProxy;
97
98 typedef struct Strip {
99   struct Strip *next, *prev;
100   int us, done;
101   int startstill, endstill;
102   /**
103    * Only used as an array in IMAGE sequences(!),
104    * and as a 1-element array in MOVIE sequences,
105    * NULL for all other strip-types.
106    */
107   StripElem *stripdata;
108   char dir[768];
109   StripProxy *proxy;
110   StripCrop *crop;
111   StripTransform *transform;
112   StripColorBalance *color_balance DNA_DEPRECATED;
113
114   /* color management */
115   ColorManagedColorspaceSettings colorspace_settings;
116 } Strip;
117
118 /**
119  * The sequence structure is the basic struct used by any strip.
120  * each of the strips uses a different sequence structure.
121  *
122  * \warning The first part identical to ID (for use in ipo's)
123  * the comment above is historic, probably we can drop the ID compatibility,
124  * but take care making this change.
125  *
126  * \warning This is really a 'Strip' in the UI!, name is highly confusing.
127  */
128 typedef struct Sequence {
129   struct Sequence *next, *prev;
130   /** Tmp var for copying, and tagging for linked selection. */
131   void *tmp;
132   /** Needed (to be like ipo), else it will raise libdata warnings, this should never be used. */
133   void *lib;
134   /** SEQ_NAME_MAXSTR - name, set by default and needs to be unique, for RNA paths. */
135   char name[64];
136
137   /** Flags bitmap (see below) and the type of sequence. */
138   int flag, type;
139   /** The length of the contents of this strip - before handles are applied. */
140   int len;
141   /**
142    * Start frame of contents of strip in absolute frame coordinates.
143    * For metastrips start of first strip startdisp.
144    */
145   int start;
146   /**
147    * Frames after the first frame where display starts,
148    * frames before the last frame where display ends.
149    */
150   int startofs, endofs;
151   /**
152    * Frames that use the first frame before data begins,
153    * frames that use the last frame after data ends.
154    */
155   int startstill, endstill;
156   /** Machine: the strip channel, depth the depth in the sequence when dealing with metastrips. */
157   int machine, depth;
158   /** Starting and ending points of the strip in the sequence. */
159   int startdisp, enddisp;
160   float sat;
161   float mul, handsize;
162
163   short anim_preseek;
164   /** Streamindex for movie or sound files with several streams. */
165   short streamindex;
166   /** For multicam source selection. */
167   int multicam_source;
168   /** MOVIECLIP render flags. */
169   int clip_flag;
170
171   Strip *strip;
172
173   /** Old animation system, deprecated for 2.5. */
174   struct Ipo *ipo DNA_DEPRECATED;
175
176   /** these ID vars should never be NULL but can be when linked libs fail to load,
177    * so check on access */
178   struct Scene *scene;
179   /** Override scene camera. */
180   struct Object *scene_camera;
181   /** For MOVIECLIP strips. */
182   struct MovieClip *clip;
183   /** For MASK strips. */
184   struct Mask *mask;
185   /** For MOVIE strips. */
186   ListBase anims;
187
188   float effect_fader;
189   float speed_fader;
190
191   /* pointers for effects: */
192   struct Sequence *seq1, *seq2, *seq3;
193
194   /** List of strips for metastrips. */
195   ListBase seqbase;
196
197   /** The linked "bSound" object. */
198   struct bSound *sound;
199   void *scene_sound;
200   float volume;
201
202   /** Pitch (-0.1..10), pan -2..2. */
203   float pitch, pan;
204   float strobe;
205
206   /** Struct pointer for effect settings. */
207   void *effectdata;
208
209   /** Only use part of animation file. */
210   int anim_startofs;
211   /** Is subtle different to startofs / endofs. */
212   int anim_endofs;
213
214   int blend_mode;
215   float blend_opacity;
216
217   /* is sfra needed anymore? - it looks like its only used in one place */
218   /** Starting frame according to the timeline of the scene. */
219   int sfra;
220
221   char alpha_mode;
222   char _pad[2];
223
224   /* Multiview */
225   char views_format;
226   struct Stereo3dFormat *stereo3d_format;
227
228   struct IDProperty *prop;
229
230   /* modifiers */
231   ListBase modifiers;
232
233   int cache_flag;
234   int _pad2[3];
235
236   struct Sequence *orig_sequence;
237   void *_pad3;
238 } Sequence;
239
240 typedef struct MetaStack {
241   struct MetaStack *next, *prev;
242   ListBase *oldbasep;
243   Sequence *parseq;
244   /* the startdisp/enddisp when entering the meta */
245   int disp_range[2];
246 } MetaStack;
247
248 typedef struct Editing {
249   /** Pointer to the current list of seq's being edited (can be within a meta strip). */
250   ListBase *seqbasep;
251   /** Pointer to the top-most seq's. */
252   ListBase seqbase;
253   ListBase metastack;
254
255   /* Context vars, used to be static */
256   Sequence *act_seq;
257   /** 1024 = FILE_MAX. */
258   char act_imagedir[1024];
259   /** 1024 = FILE_MAX. */
260   char act_sounddir[1024];
261   /** 1024 = FILE_MAX. */
262   char proxy_dir[1024];
263
264   int over_ofs, over_cfra;
265   int over_flag, proxy_storage;
266   rctf over_border;
267
268   struct SeqCache *cache;
269
270   /* Cache control */
271   float recycle_max_cost;
272   int cache_flag;
273 } Editing;
274
275 /* ************* Effect Variable Structs ********* */
276 typedef struct WipeVars {
277   float edgeWidth, angle;
278   short forward, wipetype;
279 } WipeVars;
280
281 typedef struct GlowVars {
282   /** Minimum intensity to trigger a glow. */
283   float fMini;
284   float fClamp;
285   /** Amount to multiply glow intensity. */
286   float fBoost;
287   /** Radius of glow blurring. */
288   float dDist;
289   int dQuality;
290   /** SHOW/HIDE glow buffer. */
291   int bNoComp;
292 } GlowVars;
293
294 typedef struct TransformVars {
295   float ScalexIni;
296   float ScaleyIni;
297   float xIni;
298   float yIni;
299   float rotIni;
300   int percent;
301   int interpolation;
302   /** Preserve aspect/ratio when scaling. */
303   int uniform_scale;
304 } TransformVars;
305
306 typedef struct SolidColorVars {
307   float col[3];
308   char _pad[4];
309 } SolidColorVars;
310
311 typedef struct SpeedControlVars {
312   float *frameMap;
313   float globalSpeed;
314   int flags;
315   int length;
316   int lastValidFrame;
317 } SpeedControlVars;
318
319 typedef struct GaussianBlurVars {
320   float size_x;
321   float size_y;
322 } GaussianBlurVars;
323
324 typedef struct TextVars {
325   char text[512];
326   VFont *text_font;
327   int text_blf_id;
328   int text_size;
329   float color[4], shadow_color[4];
330   float loc[2];
331   float wrap_width;
332   char flag;
333   char align, align_y;
334   char _pad[1];
335 } TextVars;
336
337 /* TextVars.flag */
338 enum {
339   SEQ_TEXT_SHADOW = (1 << 0),
340 };
341
342 /* TextVars.align */
343 enum {
344   SEQ_TEXT_ALIGN_X_LEFT = 0,
345   SEQ_TEXT_ALIGN_X_CENTER = 1,
346   SEQ_TEXT_ALIGN_X_RIGHT = 2,
347 };
348
349 /* TextVars.align_y */
350 enum {
351   SEQ_TEXT_ALIGN_Y_TOP = 0,
352   SEQ_TEXT_ALIGN_Y_CENTER = 1,
353   SEQ_TEXT_ALIGN_Y_BOTTOM = 2,
354 };
355
356 #define SEQ_FONT_NOT_LOADED -2
357
358 typedef struct ColorMixVars {
359   /** Value from SEQ_TYPE_XXX enumeration. */
360   int blend_effect;
361   /** Blend factor [0.0f, 1.0f]. */
362   float factor;
363 } ColorMixVars;
364
365 /* ***************** Sequence modifiers ****************** */
366
367 typedef struct SequenceModifierData {
368   struct SequenceModifierData *next, *prev;
369   int type, flag;
370   /** MAX_NAME. */
371   char name[64];
372
373   /* mask input, either sequence or mask ID */
374   int mask_input_type;
375   int mask_time;
376
377   struct Sequence *mask_sequence;
378   struct Mask *mask_id;
379 } SequenceModifierData;
380
381 typedef struct ColorBalanceModifierData {
382   SequenceModifierData modifier;
383
384   StripColorBalance color_balance;
385   float color_multiply;
386 } ColorBalanceModifierData;
387
388 typedef struct CurvesModifierData {
389   SequenceModifierData modifier;
390
391   struct CurveMapping curve_mapping;
392 } CurvesModifierData;
393
394 typedef struct HueCorrectModifierData {
395   SequenceModifierData modifier;
396
397   struct CurveMapping curve_mapping;
398 } HueCorrectModifierData;
399
400 typedef struct BrightContrastModifierData {
401   SequenceModifierData modifier;
402
403   float bright;
404   float contrast;
405 } BrightContrastModifierData;
406
407 typedef struct SequencerMaskModifierData {
408   SequenceModifierData modifier;
409 } SequencerMaskModifierData;
410
411 typedef struct WhiteBalanceModifierData {
412   SequenceModifierData modifier;
413
414   float white_value[3];
415   char _pad[4];
416 } WhiteBalanceModifierData;
417
418 typedef struct SequencerTonemapModifierData {
419   SequenceModifierData modifier;
420
421   float key, offset, gamma;
422   float intensity, contrast, adaptation, correction;
423   int type;
424 } SequencerTonemapModifierData;
425
426 enum {
427   SEQ_TONEMAP_RH_SIMPLE = 0,
428   SEQ_TONEMAP_RD_PHOTORECEPTOR = 1,
429 };
430
431 /* ***************** Scopes ****************** */
432
433 typedef struct SequencerScopes {
434   struct ImBuf *reference_ibuf;
435
436   struct ImBuf *zebra_ibuf;
437   struct ImBuf *waveform_ibuf;
438   struct ImBuf *sep_waveform_ibuf;
439   struct ImBuf *vector_ibuf;
440   struct ImBuf *histogram_ibuf;
441 } SequencerScopes;
442
443 #define MAXSEQ 32
444
445 #define SELECT 1
446
447 /* Editor->over_flag */
448 #define SEQ_EDIT_OVERLAY_SHOW 1
449 #define SEQ_EDIT_OVERLAY_ABS 2
450
451 #define SEQ_STRIP_OFSBOTTOM 0.05f
452 #define SEQ_STRIP_OFSTOP 0.95f
453
454 /* Editor->proxy_storage */
455 /* store proxies in project directory */
456 #define SEQ_EDIT_PROXY_DIR_STORAGE 1
457
458 /* SpeedControlVars->flags */
459 #define SEQ_SPEED_INTEGRATE (1 << 0)
460 #define SEQ_SPEED_UNUSED_1 (1 << 1) /* cleared */
461 #define SEQ_SPEED_COMPRESS_IPO_Y (1 << 2)
462
463 /* ***************** SEQUENCE ****************** */
464 #define SEQ_NAME_MAXSTR 64
465
466 /* seq->flag */
467 enum {
468   /* SELECT */
469   SEQ_LEFTSEL = (1 << 1),
470   SEQ_RIGHTSEL = (1 << 2),
471   SEQ_OVERLAP = (1 << 3),
472   SEQ_FILTERY = (1 << 4),
473   SEQ_MUTE = (1 << 5),
474   SEQ_FLAG_UNUSED_6 = (1 << 6), /* cleared */
475   SEQ_REVERSE_FRAMES = (1 << 7),
476   SEQ_IPO_FRAME_LOCKED = (1 << 8),
477   SEQ_EFFECT_NOT_LOADED = (1 << 9),
478   SEQ_FLAG_DELETE = (1 << 10),
479   SEQ_FLIPX = (1 << 11),
480   SEQ_FLIPY = (1 << 12),
481   SEQ_MAKE_FLOAT = (1 << 13),
482   SEQ_LOCK = (1 << 14),
483   SEQ_USE_PROXY = (1 << 15),
484   SEQ_USE_TRANSFORM = (1 << 16),
485   SEQ_USE_CROP = (1 << 17),
486   SEQ_FLAG_UNUSED_18 = (1 << 18), /* cleared */
487   SEQ_FLAG_UNUSED_19 = (1 << 19), /* cleared */
488   SEQ_FLAG_UNUSED_21 = (1 << 21), /* cleared */
489
490   SEQ_USE_EFFECT_DEFAULT_FADE = (1 << 22),
491   SEQ_USE_LINEAR_MODIFIERS = (1 << 23),
492
493   /* flags for whether those properties are animated or not */
494   SEQ_AUDIO_VOLUME_ANIMATED = (1 << 24),
495   SEQ_AUDIO_PITCH_ANIMATED = (1 << 25),
496   SEQ_AUDIO_PAN_ANIMATED = (1 << 26),
497   SEQ_AUDIO_DRAW_WAVEFORM = (1 << 27),
498
499   /* don't include Grease Pencil in OpenGL previews of Scene strips */
500   SEQ_SCENE_NO_GPENCIL = (1 << 28),
501   SEQ_USE_VIEWS = (1 << 29),
502
503   /* access scene strips directly (like a metastrip) */
504   SEQ_SCENE_STRIPS = (1 << 30),
505
506   SEQ_INVALID_EFFECT = (1u << 31),
507 };
508
509 /* StripProxy->storage */
510 enum {
511   SEQ_STORAGE_PROXY_CUSTOM_FILE = (1 << 1), /* store proxy in custom directory */
512   SEQ_STORAGE_PROXY_CUSTOM_DIR = (1 << 2),  /* store proxy in custom file */
513 };
514
515 /* convenience define for all selection flags */
516 #define SEQ_ALLSEL (SELECT + SEQ_LEFTSEL + SEQ_RIGHTSEL)
517
518 /* deprecated, don't use a flag anymore*/
519 /*#define SEQ_ACTIVE                            1048576*/
520
521 #define SEQ_COLOR_BALANCE_INVERSE_GAIN 1
522 #define SEQ_COLOR_BALANCE_INVERSE_GAMMA 2
523 #define SEQ_COLOR_BALANCE_INVERSE_LIFT 4
524
525 /* !!! has to be same as IMB_imbuf.h IMB_PROXY_... and IMB_TC_... */
526
527 #define SEQ_PROXY_IMAGE_SIZE_25 1
528 #define SEQ_PROXY_IMAGE_SIZE_50 2
529 #define SEQ_PROXY_IMAGE_SIZE_75 4
530 #define SEQ_PROXY_IMAGE_SIZE_100 8
531
532 #define SEQ_PROXY_TC_NONE 0
533 #define SEQ_PROXY_TC_RECORD_RUN 1
534 #define SEQ_PROXY_TC_FREE_RUN 2
535 #define SEQ_PROXY_TC_INTERP_REC_DATE_FREE_RUN 4
536 #define SEQ_PROXY_TC_RECORD_RUN_NO_GAPS 8
537 #define SEQ_PROXY_TC_ALL 15
538
539 /* SeqProxy->build_flags */
540 enum {
541   SEQ_PROXY_SKIP_EXISTING = 1,
542 };
543
544 /* seq->alpha_mode */
545 enum {
546   SEQ_ALPHA_STRAIGHT = 0,
547   SEQ_ALPHA_PREMUL = 1,
548 };
549
550 /* seq->type WATCH IT: SEQ_TYPE_EFFECT BIT is used to determine if this is an effect strip!!! */
551 enum {
552   SEQ_TYPE_IMAGE = 0,
553   SEQ_TYPE_META = 1,
554   SEQ_TYPE_SCENE = 2,
555   SEQ_TYPE_MOVIE = 3,
556   SEQ_TYPE_SOUND_RAM = 4,
557   SEQ_TYPE_SOUND_HD = 5,
558   SEQ_TYPE_MOVIECLIP = 6,
559   SEQ_TYPE_MASK = 7,
560
561   SEQ_TYPE_EFFECT = 8,
562   SEQ_TYPE_CROSS = 8,
563   SEQ_TYPE_ADD = 9,
564   SEQ_TYPE_SUB = 10,
565   SEQ_TYPE_ALPHAOVER = 11,
566   SEQ_TYPE_ALPHAUNDER = 12,
567   SEQ_TYPE_GAMCROSS = 13,
568   SEQ_TYPE_MUL = 14,
569   SEQ_TYPE_OVERDROP = 15,
570   /* SEQ_TYPE_PLUGIN      = 24, */ /* Deprecated */
571   SEQ_TYPE_WIPE = 25,
572   SEQ_TYPE_GLOW = 26,
573   SEQ_TYPE_TRANSFORM = 27,
574   SEQ_TYPE_COLOR = 28,
575   SEQ_TYPE_SPEED = 29,
576   SEQ_TYPE_MULTICAM = 30,
577   SEQ_TYPE_ADJUSTMENT = 31,
578   SEQ_TYPE_GAUSSIAN_BLUR = 40,
579   SEQ_TYPE_TEXT = 41,
580   SEQ_TYPE_COLORMIX = 42,
581
582   /* Blend modes */
583   SEQ_TYPE_SCREEN = 43,
584   SEQ_TYPE_LIGHTEN = 44,
585   SEQ_TYPE_DODGE = 45,
586   SEQ_TYPE_DARKEN = 46,
587   SEQ_TYPE_BURN = 47,
588   SEQ_TYPE_LINEAR_BURN = 48,
589   SEQ_TYPE_OVERLAY = 49,
590   SEQ_TYPE_HARD_LIGHT = 50,
591   SEQ_TYPE_SOFT_LIGHT = 51,
592   SEQ_TYPE_PIN_LIGHT = 52,
593   SEQ_TYPE_LIN_LIGHT = 53,
594   SEQ_TYPE_VIVID_LIGHT = 54,
595   SEQ_TYPE_HUE = 55,
596   SEQ_TYPE_SATURATION = 56,
597   SEQ_TYPE_VALUE = 57,
598   SEQ_TYPE_BLEND_COLOR = 58,
599   SEQ_TYPE_DIFFERENCE = 59,
600   SEQ_TYPE_EXCLUSION = 60,
601
602   SEQ_TYPE_MAX = 60,
603 };
604
605 #define SEQ_MOVIECLIP_RENDER_UNDISTORTED (1 << 0)
606 #define SEQ_MOVIECLIP_RENDER_STABILIZED (1 << 1)
607
608 #define SEQ_BLEND_REPLACE 0
609 /* all other BLEND_MODEs are simple SEQ_TYPE_EFFECT ids and therefore identical
610  * to the table above. (Only those effects that handle _exactly_ two inputs,
611  * otherwise, you can't really blend, right :) !)
612  */
613
614 #define SEQ_HAS_PATH(_seq) \
615   (ELEM((_seq)->type, SEQ_TYPE_MOVIE, SEQ_TYPE_IMAGE, SEQ_TYPE_SOUND_RAM, SEQ_TYPE_SOUND_HD))
616
617 /* modifiers */
618
619 /* SequenceModifierData->type */
620 enum {
621   seqModifierType_ColorBalance = 1,
622   seqModifierType_Curves = 2,
623   seqModifierType_HueCorrect = 3,
624   seqModifierType_BrightContrast = 4,
625   seqModifierType_Mask = 5,
626   seqModifierType_WhiteBalance = 6,
627   seqModifierType_Tonemap = 7,
628
629   NUM_SEQUENCE_MODIFIER_TYPES,
630 };
631
632 /* SequenceModifierData->flag */
633 enum {
634   SEQUENCE_MODIFIER_MUTE = (1 << 0),
635   SEQUENCE_MODIFIER_EXPANDED = (1 << 1),
636 };
637
638 enum {
639   SEQUENCE_MASK_INPUT_STRIP = 0,
640   SEQUENCE_MASK_INPUT_ID = 1,
641 };
642
643 enum {
644   /* Mask animation will be remapped relative to the strip start frame. */
645   SEQUENCE_MASK_TIME_RELATIVE = 0,
646   /* Global (scene) frame number will be used to access the mask. */
647   SEQUENCE_MASK_TIME_ABSOLUTE = 1,
648 };
649
650 /* Sequence->cache_flag
651  * SEQ_CACHE_STORE_RAW
652  * SEQ_CACHE_STORE_PREPROCESSED
653  * SEQ_CACHE_STORE_COMPOSITE
654  * FINAL_OUT is ignored
655  *
656  * Editing->cache_flag
657  * all entries
658  */
659 enum {
660   SEQ_CACHE_STORE_RAW = (1 << 0),
661   SEQ_CACHE_STORE_PREPROCESSED = (1 << 1),
662   SEQ_CACHE_STORE_COMPOSITE = (1 << 2),
663   SEQ_CACHE_STORE_FINAL_OUT = (1 << 3),
664
665   /* For lookup purposes */
666   SEQ_CACHE_ALL_TYPES = SEQ_CACHE_STORE_RAW | SEQ_CACHE_STORE_PREPROCESSED |
667                         SEQ_CACHE_STORE_COMPOSITE | SEQ_CACHE_STORE_FINAL_OUT,
668
669   SEQ_CACHE_OVERRIDE = (1 << 4),
670
671   /* enable cache visualization overlay in timeline UI */
672   SEQ_CACHE_VIEW_ENABLE = (1 << 5),
673   SEQ_CACHE_VIEW_RAW = (1 << 6),
674   SEQ_CACHE_VIEW_PREPROCESSED = (1 << 7),
675   SEQ_CACHE_VIEW_COMPOSITE = (1 << 8),
676   SEQ_CACHE_VIEW_FINAL_OUT = (1 << 9),
677 };
678
679 #endif /* __DNA_SEQUENCE_TYPES_H__ */