diff options
-rw-r--r-- | source/blender/blenkernel/BKE_movieclip.h | 4 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/mask.c | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/movieclip.c | 8 | ||||
-rw-r--r-- | source/blender/editors/mask/mask_relationships.c | 13 | ||||
-rw-r--r-- | source/blender/editors/space_clip/clip_draw.c | 6 |
5 files changed, 19 insertions, 15 deletions
diff --git a/source/blender/blenkernel/BKE_movieclip.h b/source/blender/blenkernel/BKE_movieclip.h index 221ae99a0ec..739b63ca174 100644 --- a/source/blender/blenkernel/BKE_movieclip.h +++ b/source/blender/blenkernel/BKE_movieclip.h @@ -63,8 +63,8 @@ void BKE_movieclip_get_cache_segments(struct MovieClip *clip, struct MovieClipUs void BKE_movieclip_build_proxy_frame(struct MovieClip *clip, int clip_flag, struct MovieDistortion *distortion, int cfra, int *build_sizes, int build_count, int undistorted); -int BKE_movieclip_remap_scene_to_clip_frame(struct MovieClip *clip, int framenr); -int BKE_movieclip_remap_clip_to_scene_frame(struct MovieClip *clip, int framenr); +float BKE_movieclip_remap_scene_to_clip_frame(struct MovieClip *clip, float framenr); +float BKE_movieclip_remap_clip_to_scene_frame(struct MovieClip *clip, float framenr); /* cacheing flags */ #define MOVIECLIP_CACHE_SKIP (1 << 0) diff --git a/source/blender/blenkernel/intern/mask.c b/source/blender/blenkernel/intern/mask.c index 48db916b4ba..c80a240f7e3 100644 --- a/source/blender/blenkernel/intern/mask.c +++ b/source/blender/blenkernel/intern/mask.c @@ -1160,12 +1160,13 @@ static int BKE_mask_evaluate_parent(MaskParent *parent, float ctime, float r_co[ if (ob) { MovieTrackingTrack *track = BKE_tracking_track_get_named(tracking, ob, parent->sub_parent); + float clip_framenr = BKE_movieclip_remap_scene_to_clip_frame(clip, ctime); MovieClipUser user = {0}; user.framenr = ctime; if (track) { - MovieTrackingMarker *marker = BKE_tracking_marker_get(track, ctime); + MovieTrackingMarker *marker = BKE_tracking_marker_get(track, clip_framenr); float marker_pos_ofs[2]; add_v2_v2v2(marker_pos_ofs, marker->pos, track->offset); BKE_mask_coord_from_movieclip(clip, &user, r_co, marker_pos_ofs); diff --git a/source/blender/blenkernel/intern/movieclip.c b/source/blender/blenkernel/intern/movieclip.c index 04edc58157b..44169cd3d6a 100644 --- a/source/blender/blenkernel/intern/movieclip.c +++ b/source/blender/blenkernel/intern/movieclip.c @@ -1270,12 +1270,12 @@ void BKE_movieclip_unlink(Main *bmain, MovieClip *clip) clip->id.us = 0; } -int BKE_movieclip_remap_scene_to_clip_frame(MovieClip *clip, int framenr) +float BKE_movieclip_remap_scene_to_clip_frame(MovieClip *clip, float framenr) { - return framenr - clip->start_frame + 1; + return framenr - (float) clip->start_frame + 1.0f; } -int BKE_movieclip_remap_clip_to_scene_frame(MovieClip *clip, int framenr) +float BKE_movieclip_remap_clip_to_scene_frame(MovieClip *clip, float framenr) { - return framenr + clip->start_frame - 1; + return framenr + (float) clip->start_frame - 1.0f; } diff --git a/source/blender/editors/mask/mask_relationships.c b/source/blender/editors/mask/mask_relationships.c index 7ba3c27e18d..a1f2539ce7c 100644 --- a/source/blender/editors/mask/mask_relationships.c +++ b/source/blender/editors/mask/mask_relationships.c @@ -44,6 +44,7 @@ #include "WM_types.h" #include "ED_screen.h" +#include "ED_clip.h" /* frame remapping functions */ #include "ED_mask.h" /* own include */ #include "mask_intern.h" /* own include */ @@ -104,21 +105,25 @@ static int mask_parent_set_exec(bContext *C, wmOperator *UNUSED(op)) MovieClip *clip; MovieTrackingTrack *track; MovieTrackingMarker *marker; - MovieTrackingObject *tracking; + MovieTrackingObject *tracking_object; /* done */ + int framenr; + float marker_pos_ofs[2]; float parmask_pos[2]; if ((NULL == (sc = CTX_wm_space_clip(C))) || (NULL == (clip = sc->clip)) || (NULL == (track = clip->tracking.act_track)) || - (NULL == (marker = BKE_tracking_marker_get(track, sc->user.framenr))) || - (NULL == (tracking = BKE_tracking_object_get_active(&clip->tracking)))) + (NULL == (tracking_object = BKE_tracking_object_get_active(&clip->tracking)))) { return OPERATOR_CANCELLED; } + framenr = ED_space_clip_get_clip_frame_number(sc); + marker = BKE_tracking_marker_get(track, framenr); + add_v2_v2v2(marker_pos_ofs, marker->pos, track->offset); BKE_mask_coord_from_movieclip(clip, &sc->user, parmask_pos, marker_pos_ofs); @@ -138,7 +143,7 @@ static int mask_parent_set_exec(bContext *C, wmOperator *UNUSED(op)) if (MASKPOINT_ISSEL_ANY(point)) { point->parent.id_type = ID_MC; point->parent.id = &clip->id; - strcpy(point->parent.parent, tracking->name); + strcpy(point->parent.parent, tracking_object->name); strcpy(point->parent.sub_parent, track->name); copy_v2_v2(point->parent.parent_orig, parmask_pos); diff --git a/source/blender/editors/space_clip/clip_draw.c b/source/blender/editors/space_clip/clip_draw.c index 5d187680b38..37da40e11b3 100644 --- a/source/blender/editors/space_clip/clip_draw.c +++ b/source/blender/editors/space_clip/clip_draw.c @@ -1497,11 +1497,9 @@ void clip_draw_grease_pencil(bContext *C, int onlyv2d) if (track) { int framenr = ED_space_clip_get_clip_frame_number(sc); - /* don't get the exact marker since it may not exist for the frame */ MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); - if (marker) { - glTranslatef(marker->pos[0], marker->pos[1], 0.0f); - } + + glTranslatef(marker->pos[0], marker->pos[1], 0.0f); } } |