Blender  V2.93
tracking_private.h
Go to the documentation of this file.
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 
27 #pragma once
28 
29 #include "BLI_threads.h"
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
35 struct GHash;
36 struct MovieTracking;
37 struct MovieTrackingMarker;
38 
40 
41 /*********************** Tracks map *************************/
42 
43 typedef struct TracksMap {
45  bool is_camera;
46 
49 
50  char *customdata;
52 
53  struct GHash *hash;
54 
55  int ptr;
56 
57  /* Spin lock is used to sync context during tracking. */
60 
61 struct TracksMap *tracks_map_new(const char *object_name,
62  bool is_camera,
63  int num_tracks,
64  int customdata_size);
65 int tracks_map_get_size(struct TracksMap *map);
67  int index,
68  struct MovieTrackingTrack **track,
69  void **customdata);
70 void tracks_map_insert(struct TracksMap *map, struct MovieTrackingTrack *track, void *customdata);
71 void tracks_map_free(struct TracksMap *map, void (*customdata_free)(void *customdata));
72 void tracks_map_merge(struct TracksMap *map, struct MovieTracking *tracking);
73 
74 /*********************** Space transformation functions *************************/
75 
77  int frame_height,
78  const struct MovieTrackingMarker *marker,
79  float frame_pixel[2]);
80 
82  int frame_height,
83  const struct MovieTrackingMarker *marker,
84  double search_pixel_x[5],
85  double search_pixel_y[5]);
86 
87 void tracking_set_marker_coords_from_tracking(int frame_width,
88  int frame_height,
89  struct MovieTrackingMarker *marker,
90  const double search_pixel_x[5],
91  const double search_pixel_y[5]);
92 
93 /*********************** General purpose utility functions *************************/
94 
96  const struct MovieTrackingMarker *ref_marker,
97  bool before,
98  bool overwrite);
99 
101  struct MovieTracking *tracking,
102  int calibration_width,
103  int calibration_height,
104  struct libmv_CameraIntrinsicsOptions *camera_intrinsics_options);
105 
107  struct MovieTracking *tracking,
108  const struct libmv_CameraIntrinsicsOptions *camera_intrinsics_options);
109 
111 
113  float *mask,
114  bool is_backwards,
116 
118  int current_frame,
119  bool backwards);
120 
121 /*********************** Masking *************************/
122 
123 float *tracking_track_get_mask_for_region(int frame_width,
124  int frame_height,
125  const float region_min[2],
126  const float region_max[2],
127  MovieTrackingTrack *track);
128 
129 /*********************** Frame Accessor *************************/
130 
131 struct libmv_FrameAccessor;
132 
133 #define MAX_ACCESSOR_CLIP 64
134 typedef struct TrackingImageAccessor {
137 
138  /* Array of tracks which are being tracked.
139  * Points to actual track from the `MovieClip` (or multiple of them).
140  * This accessor owns the array, but not the tracks themselves. */
143 
147 
148 /* Clips are used to access images of an actual footage.
149  * Tracks are used to access masks associated with the tracks.
150  *
151  * NOTE: Both clips and tracks arrays are copied into the image accessor. It means that the caller
152  * is allowed to pass temporary arrays which are only valid during initialization. */
154  int num_clips,
156  int num_tracks);
158 
159 #ifdef __cplusplus
160 }
161 #endif
pthread_spinlock_t SpinLock
Definition: BLI_threads.h:111
#define MAX_NAME
Definition: DNA_defs.h:62
CCL_NAMESPACE_BEGIN struct Options options
struct libmv_FrameAccessor libmv_FrameAccessor
struct MovieTrackingTrack ** tracks
struct MovieClip * clips[MAX_ACCESSOR_CLIP]
struct libmv_FrameAccessor * libmv_accessor
char object_name[MAX_NAME]
struct GHash * hash
MovieTrackingTrack * tracks
SpinLock spin_lock
char * customdata
ListBase tracks
Definition: tracking.c:75
void tracking_trackingCameraFromIntrinscisOptions(struct MovieTracking *tracking, const struct libmv_CameraIntrinsicsOptions *camera_intrinsics_options)
struct MovieTrackingMarker * tracking_get_keyframed_marker(struct MovieTrackingTrack *track, int current_frame, bool backwards)
struct TracksMap TracksMap
int tracks_map_get_size(struct TracksMap *map)
Definition: tracking_util.c:93
void tracking_marker_insert_disabled(struct MovieTrackingTrack *track, const struct MovieTrackingMarker *ref_marker, bool before, bool overwrite)
struct TrackingImageAccessor TrackingImageAccessor
void tracks_map_merge(struct TracksMap *map, struct MovieTracking *tracking)
#define MAX_ACCESSOR_CLIP
void tracks_map_insert(struct TracksMap *map, struct MovieTrackingTrack *track, void *customdata)
void tracking_configure_tracker(const MovieTrackingTrack *track, float *mask, bool is_backwards, struct libmv_TrackRegionOptions *options)
void tracks_map_free(struct TracksMap *map, void(*customdata_free)(void *customdata))
TrackingImageAccessor * tracking_image_accessor_new(MovieClip *clips[MAX_ACCESSOR_CLIP], int num_clips, MovieTrackingTrack **tracks, int num_tracks)
struct TracksMap * tracks_map_new(const char *object_name, bool is_camera, int num_tracks, int customdata_size)
Definition: tracking_util.c:67
void tracking_image_accessor_destroy(TrackingImageAccessor *accessor)
void tracking_cameraIntrinscisOptionsFromTracking(struct MovieTracking *tracking, int calibration_width, int calibration_height, struct libmv_CameraIntrinsicsOptions *camera_intrinsics_options)
float * tracking_track_get_mask_for_region(int frame_width, int frame_height, const float region_min[2], const float region_max[2], MovieTrackingTrack *track)
Definition: tracking.c:1285
void tracks_map_get_indexed_element(struct TracksMap *map, int index, struct MovieTrackingTrack **track, void **customdata)
Definition: tracking_util.c:98
void tracking_set_marker_coords_from_tracking(int frame_width, int frame_height, struct MovieTrackingMarker *marker, const double search_pixel_x[5], const double search_pixel_y[5])
void tracking_get_search_origin_frame_pixel(int frame_width, int frame_height, const struct MovieTrackingMarker *marker, float frame_pixel[2])
void tracking_get_marker_coords_for_tracking(int frame_width, int frame_height, const struct MovieTrackingMarker *marker, double search_pixel_x[5], double search_pixel_y[5])
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)