65 int width, height, coord;
69 for (coord = 0; coord < 2; coord++) {
83 segment_end(userdata, value_source);
95 segment_start(userdata, track, value_source,
true);
104 prevval = marker->
pos[coord];
108 val = (marker->
pos[coord] - prevval) * ((coord == 0) ? (width) : (height));
109 val /= marker->
framenr - prevfra;
114 func(userdata, track, marker, value_source, scene_framenr, val);
117 prevval = marker->
pos[coord];
123 segment_end(userdata, value_source);
134 const int clip_width,
135 const int clip_height,
136 const int scene_framenr)
138 float reprojected_position[4], bundle_position[4], marker_position[2], delta[2];
140 const float aspy = 1.0f / tracking->camera.pixel_aspect;
142 float projection_matrix[4][4];
144 tracking, tracking_object, scene_framenr, clip_width, clip_height, projection_matrix);
147 bundle_position[3] = 1;
149 mul_v4_m4v4(reprojected_position, projection_matrix, bundle_position);
150 reprojected_position[0] = (reprojected_position[0] / (reprojected_position[3] * 2.0f) + 0.5f) *
152 reprojected_position[1] = (reprojected_position[1] / (reprojected_position[3] * 2.0f) + 0.5f) *
156 tracking, clip_width, clip_height, reprojected_position, reprojected_position);
158 marker_position[0] = (marker->
pos[0] + track->
offset[0]) * clip_width;
159 marker_position[1] = (marker->
pos[1] + track->
offset[1]) * clip_height * aspy;
161 sub_v2_v2v2(delta, reprojected_position, marker_position);
162 return len_v2(delta) * weight;
182 int clip_width, clip_height;
186 bool is_segment_open =
false;
187 for (
int marker_index = 0; marker_index < track->
markersnr; marker_index++) {
193 if (is_segment_open) {
194 if (segment_end !=
nullptr) {
197 is_segment_open =
false;
203 if (!is_segment_open) {
204 if (segment_start !=
nullptr) {
205 if ((marker_index + 1) == track->
markersnr) {
209 segment_start(userdata,
215 is_segment_open =
true;
218 if (func !=
nullptr) {
221 clip, tracking, tracking_object, track, marker, clip_width, clip_height, scene_framenr);
231 if (is_segment_open && segment_end !=
nullptr) {
244 sc, track, userdata, func, segment_start, segment_end);
247 sc, track, userdata, func, segment_start, segment_end);
262 if (!include_hidden && (track->flag &
TRACK_HIDDEN) != 0) {
271 sc, track, userdata, func, segment_start, segment_end);
285 if (!include_hidden && (track->flag &
TRACK_HIDDEN) != 0) {
293 for (
int i = 0; i < track->markersnr; i++) {
301 func(userdata, marker);
311 bool has_bundle =
false;
312 const bool used_for_stabilization = (track->
flag &
335 if (used_for_stabilization) {
386 SpaceClip *sc,
const float x,
const float y,
float *r_offset_x,
float *r_offset_y)
394 *r_offset_x = (x - 0.5f) * width * aspx;
395 *r_offset_y = (y - 0.5f) * height * aspy;
422 pos[0] = marker->
pos[0] + track->offset[0];
423 pos[1] = marker->
pos[1] + track->offset[1];
458 if (marker !=
nullptr) {
469 if (mask ==
nullptr) {
478 for (
int i = 0; i < spline->tot_point; i++) {
508 bool handles_as_control_point)
531 const bContext *C,
bool fit,
float *r_offset_x,
float *r_offset_y,
float *r_zoom)
535 int frame_width, frame_height;
538 if ((frame_width == 0) || (frame_height == 0) || (sc->
clip ==
nullptr)) {
549 float min[2], max[2];
556 (max[0] +
min[0]) / (2 * frame_width),
557 (max[1] +
min[1]) / (2 * frame_height),
561 const int w = max[0] -
min[0];
562 const int h = max[1] -
min[1];
566 if (
w > 0 && h > 0) {
570 float zoomx, zoomy, newzoom, aspx, aspy;
577 zoomx =
float(width) /
w / aspx;
578 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(struct 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)
@ GPU_SHADER_3D_UNIFORM_COLOR
void GPU_blend(eGPUBlend blend)
void GPU_line_width(float width)
Read Guarded memory(de)allocation.
void UI_view2d_view_ortho(const View2D *v2d)
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
@ 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, eClipCurveValueSource value_source, bool is_point) ClipTrackValueSegmentStartCallback
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])
void clip_draw_sfra_efra(View2D *v2d, Scene *scene)
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)
draw_view in_light_buf[] float
MovieTrackingPlaneTrack * active_plane_track
MovieTrackingTrack * active_track
MovieTrackingMarker * markers
struct MovieClipUser user
void WM_event_add_notifier(const bContext *C, uint type, void *reference)