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