64 int width, height, coord;
68 for (coord = 0; coord < 2; coord++) {
82 segment_end(userdata, value_source);
94 segment_start(userdata, track, value_source,
true);
103 prevval = marker->
pos[coord];
107 val = (marker->
pos[coord] - prevval) * ((coord == 0) ? (width) : (height));
108 val /= marker->
framenr - prevfra;
113 func(userdata, track, marker, value_source, scene_framenr, val);
116 prevval = marker->
pos[coord];
122 segment_end(userdata, value_source);
133 const int clip_width,
134 const int clip_height,
135 const int scene_framenr)
137 float reprojected_position[4], bundle_position[4], marker_position[2], delta[2];
141 float projection_matrix[4][4];
143 tracking, tracking_object, scene_framenr, clip_width, clip_height, projection_matrix);
146 bundle_position[3] = 1;
148 mul_v4_m4v4(reprojected_position, projection_matrix, bundle_position);
149 reprojected_position[0] = (reprojected_position[0] / (reprojected_position[3] * 2.0f) + 0.5f) *
151 reprojected_position[1] = (reprojected_position[1] / (reprojected_position[3] * 2.0f) + 0.5f) *
155 tracking, clip_width, clip_height, reprojected_position, reprojected_position);
157 marker_position[0] = (marker->
pos[0] + track->
offset[0]) * clip_width;
158 marker_position[1] = (marker->
pos[1] + track->
offset[1]) * clip_height * aspy;
160 sub_v2_v2v2(delta, reprojected_position, marker_position);
161 return len_v2(delta) * weight;
181 int clip_width, clip_height;
185 bool is_segment_open =
false;
186 for (
int marker_index = 0; marker_index < track->
markersnr; marker_index++) {
192 if (is_segment_open) {
193 if (segment_end !=
nullptr) {
196 is_segment_open =
false;
202 if (!is_segment_open) {
203 if (segment_start !=
nullptr) {
204 if ((marker_index + 1) == track->
markersnr) {
208 segment_start(userdata,
214 is_segment_open =
true;
217 if (func !=
nullptr) {
220 clip, tracking, tracking_object, track, marker, clip_width, clip_height, scene_framenr);
230 if (is_segment_open && segment_end !=
nullptr) {
243 sc, track, userdata, func, segment_start, segment_end);
246 sc, track, userdata, func, segment_start, segment_end);
261 if (!include_hidden && (track->flag &
TRACK_HIDDEN) != 0) {
270 sc, track, userdata, func, segment_start, segment_end);
284 if (!include_hidden && (track->flag &
TRACK_HIDDEN) != 0) {
292 for (
int i = 0;
i < track->markersnr;
i++) {
300 func(userdata, marker);
310 bool has_bundle =
false;
311 const bool used_for_stabilization = (track->
flag &
334 if (used_for_stabilization) {
385 SpaceClip *sc,
const float x,
const float y,
float *r_offset_x,
float *r_offset_y)
393 *r_offset_x = (
x - 0.5f) * width * aspx;
394 *r_offset_y = (
y - 0.5f) * height * aspy;
421 pos[0] = marker->
pos[0] + track->offset[0];
422 pos[1] = marker->
pos[1] + track->offset[1];
457 if (marker !=
nullptr) {
468 if (
mask ==
nullptr) {
477 for (
int i = 0;
i < spline->tot_point;
i++) {
507 bool handles_as_control_point)
530 const bContext *
C,
bool fit,
float *r_offset_x,
float *r_offset_y,
float *r_zoom)
534 int frame_width, frame_height;
537 if ((frame_width == 0) || (frame_height == 0) || (sc->
clip ==
nullptr)) {
555 (
max[0] +
min[0]) / (2 * frame_width),
556 (
max[1] +
min[1]) / (2 * frame_height),
561 const int h =
max[1] -
min[1];
565 if (
w > 0 && h > 0) {
569 float zoomx, zoomy, newzoom, aspx, aspy;
576 zoomx =
float(width) /
w / aspx;
577 zoomy =
float(height) / h / aspy;
bool BKE_animdata_fix_paths_remove(struct ID *id, const char *prefix)
Mask * CTX_data_edit_mask(const bContext *C)
Main * CTX_data_main(const bContext *C)
SpaceClip * CTX_wm_space_clip(const bContext *C)
ARegion * CTX_wm_region(const bContext *C)
#define MASKPOINT_ISSEL_ANY(p)
void BKE_mask_coord_to_movieclip(struct MovieClip *clip, struct MovieClipUser *user, float r_co[2], const float co[2])
eMaskhandleMode BKE_mask_point_handles_mode_get(const struct MaskSplinePoint *point)
void BKE_movieclip_get_size(struct MovieClip *clip, const struct MovieClipUser *user, int *r_width, int *r_height)
float BKE_movieclip_remap_clip_to_scene_frame(const struct MovieClip *clip, float framenr)
void BKE_tracking_plane_tracks_remove_point_track(struct MovieTracking *tracking, struct MovieTrackingTrack *track)
void BKE_tracking_plane_track_free(struct MovieTrackingPlaneTrack *plane_track)
#define TRACK_SELECTED(track)
float BKE_tracking_track_get_weight_for_marker(struct MovieClip *clip, struct MovieTrackingTrack *track, struct MovieTrackingMarker *marker)
void BKE_tracking_get_rna_path_for_track(const struct MovieTracking *tracking, const struct MovieTrackingTrack *track, char *rna_path, size_t rna_path_maxncpy)
struct MovieTrackingMarker * BKE_tracking_marker_get(struct MovieTrackingTrack *track, int framenr)
struct MovieTrackingObject * BKE_tracking_object_get_active(const struct MovieTracking *tracking)
void BKE_tracking_track_free(struct MovieTrackingTrack *track)
void BKE_tracking_distort_v2(struct MovieTracking *tracking, int image_width, int image_height, const float co[2], float r_co[2])
void BKE_tracking_get_rna_path_for_plane_track(const struct MovieTracking *tracking, const struct MovieTrackingPlaneTrack *plane_track, char *rna_path, size_t rna_path_len)
#define TRACK_VIEW_SELECTED(sc, track)
void BKE_tracking_get_projection_matrix(struct MovieTracking *tracking, struct MovieTrackingObject *tracking_object, int framenr, int winx, int winy, float mat[4][4])
void BKE_tracking_marker_delete(struct MovieTrackingTrack *track, int framenr)
#define LISTBASE_FOREACH(type, var, list)
void BLI_freelinkN(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
MINLINE float min_ff(float a, float b)
MINLINE float power_of_2(float f)
void mul_v4_m4v4(float r[4], const float mat[4][4], const float v[4])
void mul_v3_m4v3(float r[3], const float mat[4][4], const float vec[3])
MINLINE float len_v2(const float v[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void copy_v3_v3(float r[3], const float a[3])
void minmax_v2v2_v2(float min[2], float max[2], const float vec[2])
MINLINE void sub_v2_v2v2(float r[2], const float a[2], const float b[2])
BLI_INLINE int BLI_rcti_size_y(const struct rcti *rct)
BLI_INLINE int BLI_rcti_size_x(const struct rcti *rct)
#define INIT_MINMAX2(min, max)
void DEG_id_tag_update(ID *id, unsigned int flags)
void DEG_relations_tag_update(Main *bmain)
@ MCLIP_PROXY_RENDER_UNDISTORT
@ SC_SHOW_GRAPH_TRACKS_MOTION
@ SC_SHOW_GRAPH_TRACKS_ERROR
MovieClip * ED_space_clip_get_clip(const SpaceClip *sc)
void ED_space_clip_get_size(const SpaceClip *sc, int *r_width, int *r_height)
void ED_space_clip_get_aspect(const SpaceClip *sc, float *r_aspx, float *r_aspy)
int ED_space_clip_get_clip_frame_number(const SpaceClip *sc)
void ED_clip_point_undistorted_pos(const SpaceClip *sc, const float co[2], float r_co[2])
bool ED_mask_selected_minmax(const bContext *C, float min[2], float max[2], bool handles_as_control_point)
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
void(*)(void *userdata, MovieTrackingTrack *track, eClipCurveValueSource value_source, bool is_point) ClipTrackValueSegmentStartCallback
@ CLIP_VALUE_SOURCE_REPROJECTION_ERROR
@ CLIP_VALUE_SOURCE_SPEED_Y
@ CLIP_VALUE_SOURCE_SPEED_X
void(*)(void *userdata, eClipCurveValueSource value_source) ClipTrackValueSegmentEndCallback
void(*)(void *userdata, MovieTrackingTrack *track, MovieTrackingMarker *marker, eClipCurveValueSource value_source, int scene_framenr, float val) ClipTrackValueCallback
static bool mask_has_selection(const bContext *C)
void clip_graph_tracking_values_iterate_track(SpaceClip *sc, MovieTrackingTrack *track, void *userdata, ClipTrackValueCallback func, ClipTrackValueSegmentStartCallback segment_start, ClipTrackValueSegmentEndCallback segment_end)
bool clip_graph_value_visible(SpaceClip *sc, eClipCurveValueSource value_source)
static float calculate_reprojection_error_at_marker(MovieClip *clip, MovieTracking *tracking, MovieTrackingObject *tracking_object, MovieTrackingTrack *track, MovieTrackingMarker *marker, const int clip_width, const int clip_height, const int scene_framenr)
void clip_delete_marker(bContext *C, MovieClip *clip, MovieTrackingTrack *track, MovieTrackingMarker *marker)
static bool tracking_has_selection(SpaceClip *space_clip)
void clip_delete_plane_track(bContext *C, MovieClip *clip, MovieTrackingPlaneTrack *plane_track)
void clip_view_center_to_point(SpaceClip *sc, float x, float y)
static bool selected_tracking_boundbox(SpaceClip *sc, float min[2], float max[2])
static void clip_graph_tracking_values_iterate_track_reprojection_error_values(SpaceClip *sc, MovieTrackingTrack *track, void *userdata, ClipTrackValueCallback func, ClipTrackValueSegmentStartCallback segment_start, ClipTrackValueSegmentEndCallback segment_end)
bool clip_view_calculate_view_selection(const bContext *C, bool fit, float *r_offset_x, float *r_offset_y, float *r_zoom)
bool clip_view_has_locked_selection(const bContext *C)
void clip_graph_tracking_values_iterate(SpaceClip *sc, bool selected_only, bool include_hidden, void *userdata, ClipTrackValueCallback func, ClipTrackValueSegmentStartCallback segment_start, ClipTrackValueSegmentEndCallback segment_end)
void clip_graph_tracking_iterate(SpaceClip *sc, bool selected_only, bool include_hidden, void *userdata, void(*func)(void *userdata, MovieTrackingMarker *marker))
static void clip_graph_tracking_values_iterate_track_speed_values(SpaceClip *sc, MovieTrackingTrack *track, void *userdata, ClipTrackValueCallback func, ClipTrackValueSegmentStartCallback segment_start, ClipTrackValueSegmentEndCallback segment_end)
void clip_delete_track(bContext *C, MovieClip *clip, MovieTrackingTrack *track)
void clip_view_offset_for_center_to_point(SpaceClip *sc, const float x, const float y, float *r_offset_x, float *r_offset_y)
static bool selected_boundbox(const bContext *C, float min[2], float max[2], bool handles_as_control_point)
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
struct MovieTracking tracking
MovieTrackingPlaneTrack * active_plane_track
MovieTrackingTrack * active_track
MovieTrackingMarker * markers
MovieTrackingCamera camera
struct MovieClipUser user
void WM_event_add_notifier(const bContext *C, uint type, void *reference)