Blender V4.3
COM_PlaneTrackOperation.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2013 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
6
7#include "DNA_defaults.h"
8
9#include "BKE_movieclip.h"
10#include "BKE_tracking.h"
11
12namespace blender::compositor {
13
14/* ******** PlaneTrackCommon ******** */
15
23
25{
26 float corners[4][2];
27 if (distort_op->motion_blur_samples_ == 1) {
28 read_corners_from_track(corners, framenumber_);
29 distort_op->calculate_corners(corners, true, 0);
30 }
31 else {
32 const float frame = float(framenumber_) - distort_op->motion_blur_shutter_;
33 const float frame_step = (distort_op->motion_blur_shutter_ * 2.0f) /
34 distort_op->motion_blur_samples_;
35 float frame_iter = frame;
36 for (int sample = 0; sample < distort_op->motion_blur_samples_; sample++) {
37 read_corners_from_track(corners, frame_iter);
38 distort_op->calculate_corners(corners, true, sample);
39 frame_iter += frame_step;
40 }
41 }
42}
43
44void PlaneTrackCommon::read_corners_from_track(float corners[4][2], float frame)
45{
46 if (!movie_clip_) {
47 return;
48 }
49
51
52 MovieTrackingObject *tracking_object = BKE_tracking_object_get_named(tracking,
54 if (tracking_object) {
55 MovieTrackingPlaneTrack *plane_track;
56 plane_track = BKE_tracking_object_find_plane_track_with_name(tracking_object,
58 if (plane_track) {
59 float clip_framenr = BKE_movieclip_remap_scene_to_clip_frame(movie_clip_, frame);
60 BKE_tracking_plane_marker_get_subframe_corners(plane_track, clip_framenr, corners);
61 }
62 }
63}
64
65void PlaneTrackCommon::determine_canvas(const rcti &preferred_area, rcti &r_area)
66{
67 r_area = COM_AREA_NONE;
68 if (movie_clip_) {
69 int width, height;
72 BKE_movieclip_get_size(movie_clip_, &user, &width, &height);
73 r_area = preferred_area;
74 r_area.xmax = r_area.xmin + width;
75 r_area.ymax = r_area.ymin + height;
76 }
77}
78
79/* ******** PlaneTrackMaskOperation ******** */
80
86
87/* ******** PlaneTrackWarpImageOperation ******** */
88
94
95} // namespace blender::compositor
float BKE_movieclip_remap_scene_to_clip_frame(const struct MovieClip *clip, float framenr)
void BKE_movieclip_user_set_frame(struct MovieClipUser *user, int framenr)
void BKE_movieclip_get_size(struct MovieClip *clip, const struct MovieClipUser *user, int *r_width, int *r_height)
struct MovieTrackingPlaneTrack * BKE_tracking_object_find_plane_track_with_name(struct MovieTrackingObject *tracking_object, const char *name)
Definition tracking.cc:2005
struct MovieTrackingObject * BKE_tracking_object_get_named(struct MovieTracking *tracking, const char *name)
Definition tracking.cc:1966
void BKE_tracking_plane_marker_get_subframe_corners(struct MovieTrackingPlaneTrack *plane_track, float framenr, float corners[4][2])
Definition tracking.cc:1866
#define DNA_struct_default_get(struct_name)
virtual void calculate_corners(const float corners[4][2], bool normalized, int sample)
void determine_canvas(const rcti &preferred_area, rcti &r_area)
void read_and_calculate_corners(PlaneDistortBaseOperation *distort_op)
draw_view in_light_buf[] float
constexpr rcti COM_AREA_NONE
Definition COM_defines.h:89
struct MovieTracking tracking
int ymin
int ymax
int xmin
int xmax