Fix sculpt not updating on undo with EEVEE enabled
[blender.git] / source / blender / makesdna / DNA_tracking_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) 2011 Blender Foundation.
17  * All rights reserved.
18  */
19
20 /** \file
21  * \ingroup DNA
22  *
23  * Structs used for camera tracking and the movie-clip editor.
24  */
25
26 #ifndef __DNA_TRACKING_TYPES_H__
27 #define __DNA_TRACKING_TYPES_H__
28
29 #include "DNA_defs.h"
30 #include "DNA_listBase.h"
31
32 /* match-moving data */
33
34 struct Image;
35 struct MovieReconstructedCamera;
36 struct MovieTracking;
37 struct MovieTrackingCamera;
38 struct MovieTrackingMarker;
39 struct MovieTrackingTrack;
40 struct bGPdata;
41
42 typedef struct MovieReconstructedCamera {
43   int framenr;
44   float error;
45   float mat[4][4];
46 } MovieReconstructedCamera;
47
48 typedef struct MovieTrackingCamera {
49   /** Intrinsics handle. */
50   void *intrinsics;
51
52   short distortion_model;
53   char _pad[2];
54
55   /** Width of CCD sensor. */
56   float sensor_width;
57   /** Pixel aspect ratio. */
58   float pixel_aspect;
59   /** Focal length. */
60   float focal;
61   /** Units of focal length user is working with. */
62   short units;
63   char _pad1[2];
64   /** Principal point. */
65   float principal[2];
66
67   /* Polynomial distortion */
68   /** Polynomial radial distortion. */
69   float k1, k2, k3;
70
71   /* Division distortion model coefficients */
72   float division_k1, division_k2;
73 } MovieTrackingCamera;
74
75 typedef struct MovieTrackingMarker {
76   /** 2d position of marker on frame (in unified 0..1 space). */
77   float pos[2];
78
79   /* corners of pattern in the following order:
80    *
81    *       Y
82    *       ^
83    *       | (3) --- (2)
84    *       |  |       |
85    *       |  |       |
86    *       |  |       |
87    *       | (0) --- (1)
88    *       +-------------> X
89    *
90    * the coordinates are stored relative to pos.
91    */
92   float pattern_corners[4][2];
93
94   /* positions of left-bottom and right-top corners of search area (in unified 0..1 units,
95    * relative to marker->pos
96    */
97   float search_min[2], search_max[2];
98
99   /** Number of frame marker is associated with. */
100   int framenr;
101   /** Marker's flag (alive, ...). */
102   int flag;
103 } MovieTrackingMarker;
104
105 typedef struct MovieTrackingTrack {
106   struct MovieTrackingTrack *next, *prev;
107
108   /** MAX_NAME. */
109   char name[64];
110
111   /* ** settings ** */
112
113   /* positions of left-bottom and right-top corners of pattern (in unified 0..1 units,
114    * relative to marker->pos)
115    * moved to marker's corners since planar tracking implementation
116    */
117   float pat_min[2] DNA_DEPRECATED, pat_max[2] DNA_DEPRECATED;
118
119   /* positions of left-bottom and right-top corners of search area (in unified 0..1 units,
120    * relative to marker->pos
121    * moved to marker since affine tracking implementation
122    */
123   float search_min[2] DNA_DEPRECATED, search_max[2] DNA_DEPRECATED;
124
125   /** Offset to "parenting" point. */
126   float offset[2];
127
128   /* ** track ** */
129   /** Count of markers in track. */
130   int markersnr;
131   /** Most recently used marker. */
132   int last_marker;
133   /** Markers in track. */
134   MovieTrackingMarker *markers;
135
136   /* ** reconstruction data ** */
137   /** Reconstructed position. */
138   float bundle_pos[3];
139   /** Average track reprojection error. */
140   float error;
141
142   /* ** UI editing ** */
143   /** Flags (selection, ...). */
144   int flag, pat_flag, search_flag;
145   /** Custom color for track. */
146   float color[3];
147
148   /* ** control how tracking happens */
149   /**
150    * Number of frames to be tarcked during single tracking session
151    * (if TRACKING_FRAMES_LIMIT is set).
152    */
153   short frames_limit;
154   /** Margin from frame boundaries. */
155   short margin;
156   /** Re-adjust every N frames. */
157   short pattern_match;
158
159   /* tracking parameters */
160   /** Model of the motion for this track. */
161   short motion_model;
162   /** Flags for the tracking algorithm (use brute, use esm, use pyramid, etc. */
163   int algorithm_flag;
164   /** Minimal correlation which is still treated as successful tracking. */
165   float minimum_correlation;
166
167   /** Grease-pencil data. */
168   struct bGPdata *gpd;
169
170   /* Weight of this track.
171    *
172    * Weight defines how much the track affects on the final reconstruction,
173    * usually gets animated in a way so when track has just appeared it's
174    * weight is zero and then it gets faded up.
175    *
176    * Used to prevent jumps of the camera when tracks are appearing or
177    * disappearing.
178    */
179   float weight;
180
181   /* track weight especially for 2D stabilization */
182   float weight_stab;
183 } MovieTrackingTrack;
184
185 typedef struct MovieTrackingPlaneMarker {
186   /* Corners of the plane in the following order:
187    *
188    *       Y
189    *       ^
190    *       | (3) --- (2)
191    *       |  |       |
192    *       |  |       |
193    *       |  |       |
194    *       | (0) --- (1)
195    *       +-------------> X
196    *
197    * The coordinates are stored in frame normalized coordinates.
198    */
199   float corners[4][2];
200
201   /** Number of frame plane marker is associated with. */
202   int framenr;
203   /** Marker's flag (alive, ...). */
204   int flag;
205 } MovieTrackingPlaneMarker;
206
207 typedef struct MovieTrackingPlaneTrack {
208   struct MovieTrackingPlaneTrack *next, *prev;
209
210   /** MAX_NAME. */
211   char name[64];
212
213   /**
214    * Array of point tracks used to define this pla.ne.
215    * Each element is a pointer to MovieTrackingTrack.
216    */
217   MovieTrackingTrack **point_tracks;
218   /** Number of tracks in point_tracks array. */
219   int point_tracksnr;
220   char _pad[4];
221
222   /** Markers in the plane track. */
223   MovieTrackingPlaneMarker *markers;
224   /** Count of markers in track (size of markers array). */
225   int markersnr;
226
227   /** Flags (selection, ...). */
228   int flag;
229
230   /** Image displaying during editing. */
231   struct Image *image;
232   /** Opacity of the image. */
233   float image_opacity;
234
235   /* Runtime data */
236   /** Most recently used marker. */
237   int last_marker;
238 } MovieTrackingPlaneTrack;
239
240 typedef struct MovieTrackingSettings {
241   int flag;
242
243   /* ** default tracker settings */
244   /** Model of the motion for this track. */
245   short default_motion_model;
246   /** Flags for the tracking algorithm (use brute, use esm, use pyramid, etc. */
247   short default_algorithm_flag;
248   /** Minimal correlation which is still treated as successful tracking. */
249   float default_minimum_correlation;
250   /** Size of pattern area for new tracks. */
251   short default_pattern_size;
252   /** Size of search area for new tracks. */
253   short default_search_size;
254   /** Number of frames to be tarcked during single tracking session
255    * (if TRACKING_FRAMES_LIMIT is set). */
256   short default_frames_limit;
257   /** Margin from frame boundaries. */
258   short default_margin;
259   /** Re-adjust every N frames. */
260   short default_pattern_match;
261   /** Default flags like color channels used by default. */
262   short default_flag;
263   /** Default weight of the track. */
264   float default_weight;
265
266   /** Flags describes motion type. */
267   short motion_flag;
268
269   /* ** common tracker settings ** */
270   /** Speed of tracking. */
271   short speed;
272
273   /* ** reconstruction settings ** */
274   /* two keyframes for reconstruction initialization
275    * were moved to per-tracking object settings
276    */
277   int keyframe1 DNA_DEPRECATED;
278   int keyframe2 DNA_DEPRECATED;
279
280   int reconstruction_flag;
281
282   /* which camera intrinsics to refine. uses on the REFINE_* flags */
283   short refine_camera_intrinsics;
284   char _pad2[2];
285
286   /* ** tool settings ** */
287
288   /* set scale */
289   /** Distance between two bundles used for scene scaling. */
290   float dist;
291
292   /* cleanup */
293   int clean_frames, clean_action;
294   float clean_error;
295
296   /* set object scale */
297   /** Distance between two bundles used for object scaling. */
298   float object_distance;
299
300   char _pad3[4];
301 } MovieTrackingSettings;
302
303 typedef struct MovieTrackingStabilization {
304   int flag;
305   /** Total number of translation tracks and index of active track in list. */
306   int tot_track, act_track;
307   /** Total number of rotation tracks and index of active track in list. */
308   int tot_rot_track, act_rot_track;
309
310   /* 2d stabilization */
311   /** Max auto-scale factor. */
312   float maxscale;
313   /** Use TRACK_USE_2D_STAB_ROT on individual tracks instead. */
314   MovieTrackingTrack *rot_track DNA_DEPRECATED;
315
316   /** Reference point to anchor stabilization offset. */
317   int anchor_frame;
318   /** Expected target position of frame after raw stabilization, will be subtracted. */
319   float target_pos[2];
320   /** Expected target rotation of frame after raw stabilization, will be compensated. */
321   float target_rot;
322   /** Zoom factor known to be present on original footage. Also used for autoscale. */
323   float scale;
324
325   /** Influence on location, scale and rotation. */
326   float locinf, scaleinf, rotinf;
327
328   /** Filter used for pixel interpolation. */
329   int filter;
330
331   /* initialization and run-time data */
332   /** Without effect now, we initialize on every frame.
333    * Formerly used for caching of init values. */
334   int ok DNA_DEPRECATED;
335 } MovieTrackingStabilization;
336
337 typedef struct MovieTrackingReconstruction {
338   int flag;
339
340   /** Average error of reconstruction. */
341   float error;
342
343   /** Most recently used camera. */
344   int last_camera;
345   /** Number of reconstructed cameras. */
346   int camnr;
347   /** Reconstructed cameras. */
348   struct MovieReconstructedCamera *cameras;
349 } MovieTrackingReconstruction;
350
351 typedef struct MovieTrackingObject {
352   struct MovieTrackingObject *next, *prev;
353
354   /** Name of tracking object, MAX_NAME. */
355   char name[64];
356   int flag;
357   /** Scale of object solution in amera space. */
358   float scale;
359
360   /** List of tracks use to tracking this object. */
361   ListBase tracks;
362   /** List of plane tracks used by this object. */
363   ListBase plane_tracks;
364   /** Reconstruction data for this object. */
365   MovieTrackingReconstruction reconstruction;
366
367   /* reconstruction options */
368   /** Two keyframes for reconstruction initialization. */
369   int keyframe1, keyframe2;
370 } MovieTrackingObject;
371
372 typedef struct MovieTrackingStats {
373   char message[256];
374 } MovieTrackingStats;
375
376 typedef struct MovieTrackingDopesheetChannel {
377   struct MovieTrackingDopesheetChannel *next, *prev;
378
379   /** Motion track for which channel is created. */
380   MovieTrackingTrack *track;
381   char _pad[4];
382
383   /** Name of channel. */
384   char name[64];
385
386   /** Total number of segments. */
387   int tot_segment;
388   /** Tracked segments. */
389   int *segments;
390   /** Longest segment length and total number of tracked frames. */
391   int max_segment, total_frames;
392 } MovieTrackingDopesheetChannel;
393
394 typedef struct MovieTrackingDopesheetCoverageSegment {
395   struct MovieTrackingDopesheetCoverageSegment *next, *prev;
396
397   int coverage;
398   int start_frame;
399   int end_frame;
400
401   char _pad[4];
402 } MovieTrackingDopesheetCoverageSegment;
403
404 typedef struct MovieTrackingDopesheet {
405   /** Flag if dopesheet information is still relevant. */
406   int ok;
407
408   /** Method to be used to sort tracks. */
409   short sort_method;
410   /** Dopesheet building flag such as inverted order of sort. */
411   short flag;
412
413   /* ** runtime stuff ** */
414
415   /* summary */
416   ListBase coverage_segments;
417
418   /* detailed */
419   ListBase channels;
420   int tot_channel;
421
422   char _pad[4];
423 } MovieTrackingDopesheet;
424
425 typedef struct MovieTracking {
426   /** Different tracking-related settings. */
427   MovieTrackingSettings settings;
428   /** Camera intrinsics. */
429   MovieTrackingCamera camera;
430   /** List of tracks used for camera object. */
431   ListBase tracks;
432   /** List of plane tracks used by camera object. */
433   ListBase plane_tracks;
434   /** Reconstruction data for camera object. */
435   MovieTrackingReconstruction reconstruction;
436   /** Stabilization data. */
437   MovieTrackingStabilization stabilization;
438   /** Active track. */
439   MovieTrackingTrack *act_track;
440   /** Active plane track. */
441   MovieTrackingPlaneTrack *act_plane_track;
442
443   ListBase objects;
444   /** Index of active object and total number of objects. */
445   int objectnr, tot_object;
446
447   /** Statistics displaying in clip editor. */
448   MovieTrackingStats *stats;
449
450   /** Dopesheet data. */
451   MovieTrackingDopesheet dopesheet;
452 } MovieTracking;
453
454 /* MovieTrackingCamera->distortion_model */
455 enum {
456   TRACKING_DISTORTION_MODEL_POLYNOMIAL = 0,
457   TRACKING_DISTORTION_MODEL_DIVISION = 1,
458 };
459
460 /* MovieTrackingCamera->units */
461 enum {
462   CAMERA_UNITS_PX = 0,
463   CAMERA_UNITS_MM = 1,
464 };
465
466 /* MovieTrackingMarker->flag */
467 enum {
468   MARKER_DISABLED = (1 << 0),
469   MARKER_TRACKED = (1 << 1),
470   MARKER_GRAPH_SEL_X = (1 << 2),
471   MARKER_GRAPH_SEL_Y = (1 << 3),
472   MARKER_GRAPH_SEL = (MARKER_GRAPH_SEL_X | MARKER_GRAPH_SEL_Y),
473 };
474
475 /* MovieTrackingTrack->flag */
476 enum {
477   TRACK_HAS_BUNDLE = (1 << 1),
478   TRACK_DISABLE_RED = (1 << 2),
479   TRACK_DISABLE_GREEN = (1 << 3),
480   TRACK_DISABLE_BLUE = (1 << 4),
481   TRACK_HIDDEN = (1 << 5),
482   TRACK_LOCKED = (1 << 6),
483   TRACK_CUSTOMCOLOR = (1 << 7),
484   TRACK_USE_2D_STAB = (1 << 8),
485   TRACK_PREVIEW_GRAYSCALE = (1 << 9),
486   TRACK_DOPE_SEL = (1 << 10),
487   TRACK_PREVIEW_ALPHA = (1 << 11),
488   TRACK_USE_2D_STAB_ROT = (1 << 12),
489 };
490
491 /* MovieTrackingTrack->motion_model */
492 enum {
493   TRACK_MOTION_MODEL_TRANSLATION = 0,
494   TRACK_MOTION_MODEL_TRANSLATION_ROTATION = 1,
495   TRACK_MOTION_MODEL_TRANSLATION_SCALE = 2,
496   TRACK_MOTION_MODEL_TRANSLATION_ROTATION_SCALE = 3,
497   TRACK_MOTION_MODEL_AFFINE = 4,
498   TRACK_MOTION_MODEL_HOMOGRAPHY = 5,
499 };
500
501 /* MovieTrackingTrack->algorithm_flag */
502 enum {
503   TRACK_ALGORITHM_FLAG_USE_BRUTE = (1 << 0),
504   TRACK_ALGORITHM_FLAG_USE_NORMALIZATION = (1 << 2),
505   TRACK_ALGORITHM_FLAG_USE_MASK = (1 << 3),
506 };
507
508 /* MovieTrackingTrack->adjframes */
509 enum {
510   TRACK_MATCH_KEYFRAME = 0,
511   TRACK_MATCH_PREVFRAME = 1,
512 };
513
514 /* MovieTrackingSettings->flag */
515 enum {
516   TRACKING_SETTINGS_SHOW_DEFAULT_EXPANDED = (1 << 0),
517   TRACKING_SETTINGS_SHOW_EXTRA_EXPANDED = (1 << 1),
518 };
519
520 /* MovieTrackingSettings->motion_flag */
521 enum {
522   TRACKING_MOTION_TRIPOD = (1 << 0),
523
524   TRACKING_MOTION_MODAL = (TRACKING_MOTION_TRIPOD),
525 };
526
527 /* MovieTrackingSettings->speed */
528 enum {
529   TRACKING_SPEED_FASTEST = 0,
530   TRACKING_SPEED_REALTIME = 1,
531   TRACKING_SPEED_HALF = 2,
532   TRACKING_SPEED_QUARTER = 4,
533   TRACKING_SPEED_DOUBLE = 5,
534 };
535
536 /* MovieTrackingSettings->reconstruction_flag */
537 enum {
538   /* TRACKING_USE_FALLBACK_RECONSTRUCTION = (1 << 0), */ /* DEPRECATED */
539   TRACKING_USE_KEYFRAME_SELECTION = (1 << 1),
540 };
541
542 /* MovieTrackingSettings->refine_camera_intrinsics */
543 enum {
544   REFINE_FOCAL_LENGTH = (1 << 0),
545   REFINE_PRINCIPAL_POINT = (1 << 1),
546   REFINE_RADIAL_DISTORTION_K1 = (1 << 2),
547   REFINE_RADIAL_DISTORTION_K2 = (1 << 4),
548 };
549
550 /* MovieTrackingStrabilization->flag */
551 enum {
552   TRACKING_2D_STABILIZATION = (1 << 0),
553   TRACKING_AUTOSCALE = (1 << 1),
554   TRACKING_STABILIZE_ROTATION = (1 << 2),
555   TRACKING_STABILIZE_SCALE = (1 << 3),
556   TRACKING_SHOW_STAB_TRACKS = (1 << 5),
557 };
558
559 /* MovieTrackingStrabilization->filter */
560 enum {
561   TRACKING_FILTER_NEAREST = 0,
562   TRACKING_FILTER_BILINEAR = 1,
563   TRACKING_FILTER_BICUBIC = 2,
564 };
565
566 /* MovieTrackingReconstruction->flag */
567 enum {
568   TRACKING_RECONSTRUCTED = (1 << 0),
569 };
570
571 /* MovieTrackingObject->flag */
572 enum {
573   TRACKING_OBJECT_CAMERA = (1 << 0),
574 };
575
576 enum {
577   TRACKING_CLEAN_SELECT = 0,
578   TRACKING_CLEAN_DELETE_TRACK = 1,
579   TRACKING_CLEAN_DELETE_SEGMENT = 2,
580 };
581
582 /* MovieTrackingDopesheet->sort_method */
583 enum {
584   TRACKING_DOPE_SORT_NAME = 0,
585   TRACKING_DOPE_SORT_LONGEST = 1,
586   TRACKING_DOPE_SORT_TOTAL = 2,
587   TRACKING_DOPE_SORT_AVERAGE_ERROR = 3,
588 };
589
590 /* MovieTrackingDopesheet->flag */
591 enum {
592   TRACKING_DOPE_SORT_INVERSE = (1 << 0),
593   TRACKING_DOPE_SELECTED_ONLY = (1 << 1),
594   TRACKING_DOPE_SHOW_HIDDEN = (1 << 2),
595 };
596
597 /* MovieTrackingDopesheetCoverageSegment->trackness */
598 enum {
599   TRACKING_COVERAGE_BAD = 0,
600   TRACKING_COVERAGE_ACCEPTABLE = 1,
601   TRACKING_COVERAGE_OK = 2,
602 };
603
604 /* MovieTrackingPlaneMarker->flag */
605 enum {
606   PLANE_MARKER_DISABLED = (1 << 0),
607   PLANE_MARKER_TRACKED = (1 << 1),
608 };
609
610 /* MovieTrackingPlaneTrack->flag */
611 enum {
612   PLANE_TRACK_HIDDEN = (1 << 1),
613   PLANE_TRACK_LOCKED = (1 << 2),
614   PLANE_TRACK_AUTOKEY = (1 << 3),
615 };
616
617 #endif /* __DNA_TRACKING_TYPES_H__ */