Blender  V3.3
COM_TrackPositionOperation.cc
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2012 Blender Foundation. */
3 
5 
6 #include "DNA_defaults.h"
7 
8 #include "BKE_movieclip.h"
9 #include "BKE_node.h"
10 #include "BKE_tracking.h"
11 
12 namespace blender::compositor {
13 
15 {
17  movie_clip_ = nullptr;
18  framenumber_ = 0;
19  tracking_object_name_[0] = 0;
20  track_name_[0] = 0;
21  axis_ = 0;
23  relative_frame_ = 0;
24  speed_output_ = false;
25  flags_.is_set_operation = true;
27 }
28 
30 {
32  calc_track_position();
33  }
34 }
35 
36 void TrackPositionOperation::calc_track_position()
37 {
39  MovieTracking *tracking = nullptr;
41  MovieTrackingObject *object;
42 
43  track_position_ = 0;
46 
47  if (!movie_clip_) {
48  return;
49  }
50 
51  tracking = &movie_clip_->tracking;
52 
55 
57  if (object) {
58  MovieTrackingTrack *track;
59 
60  track = BKE_tracking_track_get_named(tracking, object, track_name_);
61 
62  if (track) {
63  MovieTrackingMarker *marker;
65 
66  marker = BKE_tracking_marker_get(track, clip_framenr);
67 
68  copy_v2_v2(marker_pos_, marker->pos);
69 
70  if (speed_output_) {
71  int relative_clip_framenr = BKE_movieclip_remap_scene_to_clip_frame(movie_clip_,
73 
74  marker = BKE_tracking_marker_get_exact(track, relative_clip_framenr);
75  if (marker != nullptr && (marker->flag & MARKER_DISABLED) == 0) {
76  copy_v2_v2(relative_pos_, marker->pos);
77  }
78  else {
80  }
83  }
84  }
86  int i;
87 
88  for (i = 0; i < track->markersnr; i++) {
89  marker = &track->markers[i];
90 
91  if ((marker->flag & MARKER_DISABLED) == 0) {
92  copy_v2_v2(relative_pos_, marker->pos);
93 
94  break;
95  }
96  }
97  }
99  int relative_clip_framenr = BKE_movieclip_remap_scene_to_clip_frame(movie_clip_,
101 
102  marker = BKE_tracking_marker_get(track, relative_clip_framenr);
103  copy_v2_v2(relative_pos_, marker->pos);
104  }
105  }
106  }
107 
109  if (axis_ == 0) {
111  }
112  else {
114  }
115 }
116 
118  float /*x*/,
119  float /*y*/,
120  PixelSampler /*sampler*/)
121 {
123 
124  if (axis_ == 0) {
125  output[0] *= width_;
126  }
127  else {
128  output[0] *= height_;
129  }
130 }
131 
133 {
135  calc_track_position();
136  }
137  return &track_position_;
138 }
139 
140 void TrackPositionOperation::determine_canvas(const rcti &preferred_area, rcti &r_area)
141 {
142  r_area = preferred_area;
143 }
144 
145 } // 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)
Definition: movieclip.c:1614
void BKE_movieclip_get_size(struct MovieClip *clip, struct MovieClipUser *user, int *width, int *height)
Definition: movieclip.c:1520
#define CMP_TRACKPOS_RELATIVE_START
Definition: BKE_node.h:1326
#define CMP_TRACKPOS_RELATIVE_FRAME
Definition: BKE_node.h:1327
#define CMP_TRACKPOS_ABSOLUTE
Definition: BKE_node.h:1325
struct MovieTrackingTrack * BKE_tracking_track_get_named(struct MovieTracking *tracking, struct MovieTrackingObject *object, const char *name)
Definition: tracking.c:1038
struct MovieTrackingMarker * BKE_tracking_marker_get_exact(struct MovieTrackingTrack *track, int framenr)
Definition: tracking.c:1457
struct MovieTrackingObject * BKE_tracking_object_get_named(struct MovieTracking *tracking, const char *name)
Definition: tracking.c:2077
struct MovieTrackingMarker * BKE_tracking_marker_get(struct MovieTrackingTrack *track, int framenr)
Definition: tracking.c:1424
MINLINE void swap_v2_v2(float a[2], float b[2])
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE void zero_v2(float r[2])
#define DNA_struct_default_get(struct_name)
Definition: DNA_defaults.h:29
@ MARKER_DISABLED
void add_output_socket(DataType datatype)
void execute_pixel_sampled(float output[4], float x, float y, PixelSampler sampler) override
calculate a single pixel
void determine_canvas(const rcti &preferred_area, rcti &r_area) override
ccl_global KernelShaderEvalInput ccl_global float * output
struct MovieTracking tracking
MovieTrackingMarker * markers