2 * ***** BEGIN GPL LICENSE BLOCK *****
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.
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.
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.
18 * The Original Code is Copyright (C) 2011 Blender Foundation.
19 * All rights reserved.
21 * The Original Code is: all of this file.
23 * Contributor(s): Blender Foundation,
26 * ***** END GPL LICENSE BLOCK *****
29 /** \file DNA_tracking_types.h
32 * \author Sergey Sharybin
34 * Structs used for camera tracking and the movie-clip editor.
37 #ifndef __DNA_TRACKING_TYPES_H__
38 #define __DNA_TRACKING_TYPES_H__
41 #include "DNA_listBase.h"
43 /* match-moving data */
47 struct MovieReconstructedCamera;
48 struct MovieTrackingCamera;
49 struct MovieTrackingBundle;
50 struct MovieTrackingMarker;
51 struct MovieTrackingTrack;
54 typedef struct MovieReconstructedCamera {
58 } MovieReconstructedCamera;
60 typedef struct MovieTrackingCamera {
61 void *intrinsics; /* intrinsics handle */
63 float sensor_width; /* width of CCD sensor */
64 float pixel_aspect; /* pixel aspect ratio */
66 float focal; /* focal length */
67 short units; /* units of focal length user is working with */
69 float principal[2]; /* principal point */
70 float k1, k2, k3; /* radial distortion */
71 } MovieTrackingCamera;
73 typedef struct MovieTrackingMarker {
74 float pos[2]; /* 2d position of marker on frame (in unified 0..1 space) */
76 /* corners of pattern in the following order:
87 * the coordinates are stored relative to pos.
89 float pattern_corners[4][2];
91 /* positions of left-bottom and right-top corners of search area (in unified 0..1 units,
92 * relative to marker->pos
94 float search_min[2], search_max[2];
96 int framenr; /* number of frame marker is associated with */
97 int flag; /* Marker's flag (alive, ...) */
98 } MovieTrackingMarker;
100 typedef struct MovieTrackingTrack {
101 struct MovieTrackingTrack *next, *prev;
103 char name[64]; /* MAX_NAME */
107 /* positions of left-bottom and right-top corners of pattern (in unified 0..1 units,
108 * relative to marker->pos)
109 * moved to marker's corners since planar tracking implementation
111 float pat_min[2] DNA_DEPRECATED, pat_max[2] DNA_DEPRECATED;
113 /* positions of left-bottom and right-top corners of search area (in unified 0..1 units,
114 * relative to marker->pos
115 * moved to marker since affine tracking implementation
117 float search_min[2] DNA_DEPRECATED, search_max[2] DNA_DEPRECATED;
119 float offset[2]; /* offset to "parenting" point */
122 int markersnr; /* count of markers in track */
123 int last_marker; /* most recently used marker */
124 MovieTrackingMarker *markers; /* markers in track */
126 /* ** reconstruction data ** */
127 float bundle_pos[3]; /* reconstructed position */
128 float error; /* average track reprojection error */
130 /* ** UI editing ** */
131 int flag, pat_flag, search_flag; /* flags (selection, ...) */
132 float color[3]; /* custom color for track */
134 /* ** control how tracking happens */
135 short frames_limit; /* number of frames to be tarcked during single tracking session (if TRACKING_FRAMES_LIMIT is set) */
136 short margin; /* margin from frame boundaries */
137 short pattern_match; /* re-adjust every N frames */
139 /* tracking parameters */
140 short motion_model; /* model of the motion for this track */
141 int algorithm_flag; /* flags for the tracking algorithm (use brute, use esm, use pyramid, etc */
142 float minimum_correlation; /* minimal correlation which is still treated as successful tracking */
144 struct bGPdata *gpd; /* grease-pencil data */
145 } MovieTrackingTrack;
147 typedef struct MovieTrackingPlaneMarker {
148 /* Corners of the plane in the following order:
159 * The coordinates are stored in frame normalized coordinates.
163 int framenr; /* Number of frame plane marker is associated with */
164 int flag; /* Marker's flag (alive, ...) */
165 } MovieTrackingPlaneMarker;
167 typedef struct MovieTrackingPlaneTrack {
168 struct MovieTrackingPlaneTrack *next, *prev;
170 char name[64]; /* MAX_NAME */
172 MovieTrackingTrack **point_tracks; /* Array of point tracks used to define this plane.
173 * Each element is a pointer to MovieTrackingTrack. */
174 int point_tracksnr, pad; /* Number of tracks in point_tracks array. */
176 MovieTrackingPlaneMarker *markers; /* Markers in the plane track */
177 int markersnr; /* Count of markers in track (size of markers array) */
179 int flag; /* flags (selection, ...) */
182 int last_marker, pad2; /* Most recently used marker */
183 } MovieTrackingPlaneTrack;
185 typedef struct MovieTrackingSettings {
188 /* ** default tracker settings */
189 short default_motion_model; /* model of the motion for this track */
190 short default_algorithm_flag; /* flags for the tracking algorithm (use brute, use esm, use pyramid, etc */
191 float default_minimum_correlation; /* minimal correlation which is still treated as successful tracking */
192 short default_pattern_size; /* size of pattern area for new tracks */
193 short default_search_size; /* size of search area for new tracks */
194 short default_frames_limit; /* number of frames to be tarcked during single tracking session (if TRACKING_FRAMES_LIMIT is set) */
195 short default_margin; /* margin from frame boundaries */
196 short default_pattern_match; /* re-adjust every N frames */
197 short default_flag; /* default flags like color channels used by default */
199 short motion_flag; /* flags describes motion type */
201 /* ** common tracker settings ** */
202 short speed; /* speed of tracking */
204 /* ** reconstruction settings ** */
205 int keyframe1 DNA_DEPRECATED,
206 keyframe2 DNA_DEPRECATED; /* two keyframes for reconstruction initialization
207 * were moved to per-tracking object settings
210 int reconstruction_flag, pad;
212 /* which camera intrinsics to refine. uses on the REFINE_* flags */
213 short refine_camera_intrinsics, pad2;
215 /* ** tool settings ** */
218 float dist; /* distance between two bundles used for scene scaling */
221 int clean_frames, clean_action;
224 /* set object scale */
225 float object_distance; /* distance between two bundles used for object scaling */
228 } MovieTrackingSettings;
230 typedef struct MovieTrackingStabilization {
232 int tot_track, act_track; /* total number and index of active track in list */
234 /* 2d stabilization */
235 float maxscale; /* max auto-scale factor */
236 MovieTrackingTrack *rot_track; /* track used to stabilize rotation */
238 float locinf, scaleinf, rotinf; /* influence on location, scale and rotation */
240 int filter; /* filter used for pixel interpolation */
242 /* some pre-computing run-time variables */
243 int ok; /* are precomputed values and scaled buf relevant? */
244 float scale; /* autoscale factor */
245 } MovieTrackingStabilization;
247 typedef struct MovieTrackingReconstruction {
250 float error; /* average error of reconstruction */
252 int last_camera; /* most recently used camera */
253 int camnr; /* number of reconstructed cameras */
254 struct MovieReconstructedCamera *cameras; /* reconstructed cameras */
255 } MovieTrackingReconstruction;
257 typedef struct MovieTrackingObject {
258 struct MovieTrackingObject *next, *prev;
260 char name[64]; /* Name of tracking object, MAX_NAME */
262 float scale; /* scale of object solution in amera space */
264 ListBase tracks; /* list of tracks use to tracking this object */
265 ListBase plane_tracks; /* list of plane tracks used by this object */
266 MovieTrackingReconstruction reconstruction; /* reconstruction data for this object */
268 /* reconstruction options */
269 int keyframe1, keyframe2; /* two keyframes for reconstruction initialization */
270 } MovieTrackingObject;
272 typedef struct MovieTrackingStats {
274 } MovieTrackingStats;
276 typedef struct MovieTrackingDopesheetChannel {
277 struct MovieTrackingDopesheetChannel *next, *prev;
279 MovieTrackingTrack *track; /* motion track for which channel is created */
282 char name[64]; /* name of channel */
284 int tot_segment; /* total number of segments */
285 int *segments; /* tracked segments */
286 int max_segment, total_frames; /* longest segment length and total number of tracked frames */
287 } MovieTrackingDopesheetChannel;
289 typedef struct MovieTrackingDopesheetCoverageSegment {
290 struct MovieTrackingDopesheetCoverageSegment *next, *prev;
297 } MovieTrackingDopesheetCoverageSegment;
299 typedef struct MovieTrackingDopesheet {
300 int ok; /* flag if dopesheet information is still relevant */
302 short sort_method; /* method to be used to sort tracks */
303 short flag; /* dopesheet building flag such as inverted order of sort */
305 /* ** runtime stuff ** */
308 ListBase coverage_segments;
315 } MovieTrackingDopesheet;
317 typedef struct MovieTracking {
318 MovieTrackingSettings settings; /* different tracking-related settings */
319 MovieTrackingCamera camera; /* camera intrinsics */
320 ListBase tracks; /* list of tracks used for camera object */
321 ListBase plane_tracks; /* list of plane tracks used by camera object */
322 MovieTrackingReconstruction reconstruction; /* reconstruction data for camera object */
323 MovieTrackingStabilization stabilization; /* stabilization data */
324 MovieTrackingTrack *act_track; /* active track */
325 MovieTrackingPlaneTrack *act_plane_track; /* active plane track */
328 int objectnr, tot_object; /* index of active object and total number of objects */
330 MovieTrackingStats *stats; /* statistics displaying in clip editor */
332 MovieTrackingDopesheet dopesheet; /* dopesheet data */
335 /* MovieTrackingCamera->units */
341 /* MovieTrackingMarker->flag */
343 MARKER_DISABLED = (1 << 0),
344 MARKER_TRACKED = (1 << 1),
345 MARKER_GRAPH_SEL_X = (1 << 2),
346 MARKER_GRAPH_SEL_Y = (1 << 3),
347 MARKER_GRAPH_SEL = (MARKER_GRAPH_SEL_X | MARKER_GRAPH_SEL_Y)
350 /* MovieTrackingTrack->flag */
352 TRACK_HAS_BUNDLE = (1 << 1),
353 TRACK_DISABLE_RED = (1 << 2),
354 TRACK_DISABLE_GREEN = (1 << 3),
355 TRACK_DISABLE_BLUE = (1 << 4),
356 TRACK_HIDDEN = (1 << 5),
357 TRACK_LOCKED = (1 << 6),
358 TRACK_CUSTOMCOLOR = (1 << 7),
359 TRACK_USE_2D_STAB = (1 << 8),
360 TRACK_PREVIEW_GRAYSCALE = (1 << 9),
361 TRACK_DOPE_SEL = (1 << 10),
362 TRACK_PREVIEW_ALPHA = (1 << 11)
365 /* MovieTrackingTrack->motion_model */
367 TRACK_MOTION_MODEL_TRANSLATION = 0,
368 TRACK_MOTION_MODEL_TRANSLATION_ROTATION = 1,
369 TRACK_MOTION_MODEL_TRANSLATION_SCALE = 2,
370 TRACK_MOTION_MODEL_TRANSLATION_ROTATION_SCALE = 3,
371 TRACK_MOTION_MODEL_AFFINE = 4,
372 TRACK_MOTION_MODEL_HOMOGRAPHY = 5
375 /* MovieTrackingTrack->algorithm_flag */
377 TRACK_ALGORITHM_FLAG_USE_BRUTE = (1 << 0),
378 TRACK_ALGORITHM_FLAG_USE_NORMALIZATION = (1 << 2),
379 TRACK_ALGORITHM_FLAG_USE_MASK = (1 << 3)
382 /* MovieTrackingTrack->adjframes */
384 TRACK_MATCH_KEYFRAME = 0,
385 TRACK_MATCH_PREVFRAME = 1
388 /* MovieTrackingSettings->flag */
390 TRACKING_SETTINGS_SHOW_DEFAULT_EXPANDED = (1 << 0)
393 /* MovieTrackingSettings->motion_flag */
395 TRACKING_MOTION_TRIPOD = (1 << 0),
397 TRACKING_MOTION_MODAL = (TRACKING_MOTION_TRIPOD)
400 /* MovieTrackingSettings->speed */
402 TRACKING_SPEED_FASTEST = 0,
403 TRACKING_SPEED_REALTIME = 1,
404 TRACKING_SPEED_HALF = 2,
405 TRACKING_SPEED_QUARTER = 4,
406 TRACKING_SPEED_DOUBLE = 5
409 /* MovieTrackingSettings->reconstruction_flag */
411 /* TRACKING_USE_FALLBACK_RECONSTRUCTION = (1 << 0), */ /* DEPRECATED */
412 TRACKING_USE_KEYFRAME_SELECTION = (1 << 1)
415 /* MovieTrackingSettings->refine_camera_intrinsics */
417 REFINE_FOCAL_LENGTH = (1 << 0),
418 REFINE_PRINCIPAL_POINT = (1 << 1),
419 REFINE_RADIAL_DISTORTION_K1 = (1 << 2),
420 REFINE_RADIAL_DISTORTION_K2 = (1 << 4)
423 /* MovieTrackingStrabilization->flag */
425 TRACKING_2D_STABILIZATION = (1 << 0),
426 TRACKING_AUTOSCALE = (1 << 1),
427 TRACKING_STABILIZE_ROTATION = (1 << 2)
430 /* MovieTrackingStrabilization->filter */
432 TRACKING_FILTER_NEAREST = 0,
433 TRACKING_FILTER_BILINEAR = 1,
434 TRACKING_FILTER_BICUBIC = 2
437 /* MovieTrackingReconstruction->flag */
439 TRACKING_RECONSTRUCTED = (1 << 0)
442 /* MovieTrackingObject->flag */
444 TRACKING_OBJECT_CAMERA = (1 << 0)
448 TRACKING_CLEAN_SELECT = 0,
449 TRACKING_CLEAN_DELETE_TRACK = 1,
450 TRACKING_CLEAN_DELETE_SEGMENT = 2
453 /* MovieTrackingDopesheet->sort_method */
455 TRACKING_DOPE_SORT_NAME = 0,
456 TRACKING_DOPE_SORT_LONGEST = 1,
457 TRACKING_DOPE_SORT_TOTAL = 2,
458 TRACKING_DOPE_SORT_AVERAGE_ERROR = 3
461 /* MovieTrackingDopesheet->flag */
463 TRACKING_DOPE_SORT_INVERSE = (1 << 0),
464 TRACKING_DOPE_SELECTED_ONLY = (1 << 1),
465 TRACKING_DOPE_SHOW_HIDDEN = (1 << 2)
468 /* MovieTrackingDopesheetCoverageSegment->trackness */
470 TRACKING_COVERAGE_BAD = 0,
471 TRACKING_COVERAGE_ACCEPTABLE = 1,
472 TRACKING_COVERAGE_OK = 2
475 /* MovieTrackingPlaneMarker->flag */
477 PLANE_MARKER_DISABLED = (1 << 0),
478 PLANE_MARKER_TRACKED = (1 << 1),
481 /* MovieTrackingPlaneTrack->flag */
483 PLANE_TRACK_HIDDEN = (1 << 1),
484 PLANE_TRACK_LOCKED = (1 << 2),
485 PLANE_TRACK_AUTOKEY = (1 << 3),
488 #endif /* __DNA_TRACKING_TYPES_H__ */