142 const int frame_dimensions[2],
150 const float origin[2],
151 const int frame_dimensions[2],
159 const int frame_dimensions[2],
162 result[0] = (frame_coord[0] + 0.5f) / frame_dimensions[0];
163 result[1] = (frame_coord[1] + 0.5f) / frame_dimensions[1];
167 const float origin[2],
168 const int frame_dimensions[2],
171 result[0] = (frame_coord[0] - origin[0]) / frame_dimensions[0];
172 result[1] = (frame_coord[1] - origin[1]) / frame_dimensions[1];
190 const int frame_dimensions[2] = {frame_width, frame_height};
191 libmv_marker->
clip = clip;
193 libmv_marker->
track = track_index;
196 for (
int i = 0; i < 4; i++) {
210 libmv_marker->
weight = 1.0f;
227 track, marker->
framenr, backwards);
245 const int frame_dimensions[2] = {frame_width, frame_height};
249 for (
int i = 0; i < 4; i++) {
286 float patch_min[2], patch_max[2];
287 float margin_left, margin_top, margin_right, margin_bottom;
295 margin_left =
max_ff(libmv_marker->
center[0] - patch_min[0], margin);
296 margin_top =
max_ff(patch_max[1] - libmv_marker->
center[1], margin);
297 margin_right =
max_ff(patch_max[0] - libmv_marker->
center[0], margin);
298 margin_bottom =
max_ff(libmv_marker->
center[1] - patch_min[1], margin);
300 if (libmv_marker->
center[0] < margin_left ||
301 libmv_marker->
center[0] > frame_width - margin_right ||
302 libmv_marker->
center[1] < margin_bottom ||
303 libmv_marker->
center[1] > frame_height - margin_top) {
332 clip,
context->start_scene_frame);
348 context->autotrack_clips[0].clip = clip;
350 clip, user, &
context->autotrack_clips[0].width, &
context->autotrack_clips[0].height);
368 if (num_clip_tracks == 0) {
373 (
context->num_all_tracks + num_clip_tracks) *
379 autotrack_track->
track = track;
394 for (
int clip_index = 0; clip_index <
context->num_clips; ++clip_index) {
410 for (
int i = 0; i <
context->num_clips; ++i) {
411 clips[i] =
context->autotrack_clips[i].clip;
416 for (
int i = 0; i <
context->num_all_tracks; ++i) {
428 size_t num_usable_markers = 0;
429 for (
int track_index = 0; track_index <
context->num_all_tracks; ++track_index) {
431 for (
int marker_index = 0; marker_index < track->
markersnr; ++marker_index) {
436 num_usable_markers++;
439 return num_usable_markers;
444 int num_trackable_markers = 0;
445 for (
int track_index = 0; track_index <
context->num_all_tracks; ++track_index) {
450 num_trackable_markers++;
452 return num_trackable_markers;
465 if (num_trackable_markers == 0) {
471 num_trackable_markers,
sizeof(
libmv_Marker),
"libmv markers array");
474 int num_filled_libmv_markers = 0;
475 for (
int track_index = 0; track_index <
context->num_all_tracks; ++track_index) {
478 for (
int marker_index = 0; marker_index < track->
markersnr; ++marker_index) {
488 autotrack_clip->
width,
491 &libmv_markers[num_filled_libmv_markers++]);
506 if (
context->num_autotrack_markers == 0) {
515 int autotrack_marker_index = 0;
516 for (
int track_index = 0; track_index <
context->num_all_tracks; ++track_index) {
525 clip,
context->start_scene_frame);
535 autotrack_clip->
width,
544 const bool is_backwards)
549 context->is_backwards = is_backwards;
577 context->num_autotrack_markers,
sizeof(
ImBuf *), __func__);
579 context->num_referenced_image_buffers = 0;
581 for (
int i = 0; i <
context->num_autotrack_markers; ++i) {
607 context->referenced_image_buffers[
context->num_referenced_image_buffers++] = ibuf;
629 const int marker_index,
636 const libmv_Marker *libmv_current_marker = &autotrack_marker->libmv_marker;
638 const int frame_delta =
context->is_backwards ? -1 : 1;
639 const int clip_index = libmv_current_marker->clip;
640 const int track_index = libmv_current_marker->track;
648 libmv_current_marker, track->margin, autotrack_clip->width, autotrack_clip->height)) {
652 const int new_marker_frame = libmv_current_marker->frame + frame_delta;
667 &libmv_reference_marker);
672 libmv_reference_marker = *libmv_current_marker;
677 &autotrack_track->track_region_options,
684 if (!autotrack_result->
success) {
693 void *__restrict chunk_join,
694 void *__restrict chunk)
708 if (
context->num_autotrack_markers == 0) {
727 context->num_autotrack_markers = 0;
729 if (!autotrack_result->success) {
738 context->autotrack_markers[
context->num_autotrack_markers++].libmv_marker =
739 autotrack_result->libmv_marker;
761 const int frame_delta =
context->is_backwards ? -1 : 1;
769 const libmv_Marker *libmv_marker = &autotrack_result->libmv_marker;
770 const int clip_index = libmv_marker->
clip;
771 const int track_index = libmv_marker->
track;
778 clip,
context->start_scene_frame);
779 const int first_result_frame = start_clip_frame + frame_delta;
784 &autotrack_result->libmv_marker, autotrack_clip->
width, autotrack_clip->
height, &marker);
785 if (!autotrack_result->success) {
795 if (marker.
framenr == first_result_frame) {
797 track, marker.
framenr - frame_delta);
817 for (
int clip_index = 0; clip_index <
context->num_clips; clip_index++) {
838 for (
int clip_index = 0; clip_index <
context->num_clips; clip_index++) {
843 clip,
context->start_scene_frame);
849 for (
int track_index = 0; track_index <
context->num_all_tracks; track_index++) {
866 for (
int i = 0; i <
context->num_referenced_image_buffers; ++i) {
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, struct MovieClipUser *user, int *width, int *height)
struct ImBuf * BKE_movieclip_get_ibuf(struct MovieClip *clip, struct MovieClipUser *user)
float BKE_movieclip_remap_clip_to_scene_frame(const struct MovieClip *clip, float framenr)
struct ListBase * BKE_tracking_get_active_tracks(struct MovieTracking *tracking)
struct MovieTrackingMarker * BKE_tracking_marker_insert(struct MovieTrackingTrack *track, struct MovieTrackingMarker *marker)
#define TRACK_SELECTED(track)
void BKE_tracking_dopesheet_tag_update(struct MovieTracking *tracking)
struct MovieTrackingMarker * BKE_tracking_marker_get_exact(struct MovieTrackingTrack *track, int framenr)
void BKE_tracking_track_plane_from_existing_motion(struct MovieTrackingPlaneTrack *plane_track, int start_frame)
struct ListBase * BKE_tracking_get_active_plane_tracks(struct MovieTracking *tracking)
bool BKE_tracking_plane_track_has_point_track(struct MovieTrackingPlaneTrack *plane_track, struct MovieTrackingTrack *track)
struct MovieTrackingMarker * BKE_tracking_marker_get(struct MovieTrackingTrack *track, int framenr)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
#define LISTBASE_FOREACH(type, var, list)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
BLI_INLINE void BLI_listbase_clear(struct ListBase *lb)
void void void BLI_movelisttolist(struct ListBase *dst, struct ListBase *src) ATTR_NONNULL(1
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_listbase_count(const struct ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE float max_ff(float a, float b)
MINLINE int min_ii(int a, int b)
MINLINE int max_ii(int a, int b)
void minmax_v2v2_v2(float min[2], float max[2], const float vec[2])
void BLI_task_parallel_range(int start, int stop, void *userdata, TaskParallelRangeFunc func, const TaskParallelSettings *settings)
BLI_INLINE void BLI_parallel_range_settings_defaults(TaskParallelSettings *settings)
pthread_spinlock_t SpinLock
void BLI_spin_init(SpinLock *spin)
void BLI_spin_unlock(SpinLock *spin)
void BLI_spin_lock(SpinLock *spin)
void BLI_spin_end(SpinLock *spin)
#define INIT_MINMAX2(min, max)
@ MCLIP_PROXY_RENDER_SIZE_FULL
Object is a sort of wrapper for general info.
@ TRACK_MATCH_PREVIOS_FRAME
Contains defines and structs used throughout the imbuf module.
Read Guarded memory(de)allocation.
#define MEM_reallocN(vmemh, len)
Platform independent time functions.
Provides wrapper around system-specific atomic primitives, and some extensions (faked-atomic operatio...
SIMD_FORCE_INLINE btVector3 normalized() const
Return a normalized version of this vector.
void IMB_freeImBuf(ImBuf *UNUSED(ibuf))
void libmv_autoTrackSetMarkers(libmv_AutoTrack *libmv_autotrack, const libmv_Marker *libmv_marker, size_t num_markers)
libmv_AutoTrack * libmv_autoTrackNew(libmv_FrameAccessor *frame_accessor)
int libmv_autoTrackMarker(libmv_AutoTrack *libmv_autotrack, const libmv_TrackRegionOptions *libmv_options, libmv_Marker *libmv_tracked_marker, libmv_TrackRegionResult *libmv_result)
void libmv_autoTrackDestroy(libmv_AutoTrack *libmv_autotrack)
int libmv_autoTrackGetMarker(libmv_AutoTrack *libmv_autotrack, int clip, int frame, int track, libmv_Marker *libmv_marker)
void libmv_autoTrackAddMarker(libmv_AutoTrack *libmv_autotrack, const libmv_Marker *libmv_marker)
struct libmv_AutoTrack libmv_AutoTrack
void *(* MEM_malloc_arrayN)(size_t len, size_t size, const char *str)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_calloc_arrayN)(size_t len, size_t size, const char *str)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
int num_autotrack_markers
AutoTrackMarker * autotrack_markers
TrackingImageAccessor * image_accessor
AutoTrackTrack * all_autotrack_tracks
int synchronized_scene_frame
ImBuf ** referenced_image_buffers
struct libmv_AutoTrack * autotrack
int num_referenced_image_buffers
AutoTrackClip autotrack_clips[MAX_ACCESSOR_CLIP]
libmv_Marker libmv_marker
libmv_TrackRegionOptions track_region_options
MovieTrackingTrack * track
libmv_TrackRegionResult libmv_result
struct AutoTrackTrackingResult * next
struct AutoTrackTrackingResult * prev
libmv_Marker libmv_marker
struct MovieTracking tracking
float pattern_corners[4][2]
MovieTrackingMarker * markers
TaskParallelReduceFunc func_reduce
size_t userdata_chunk_size
float search_region_max[2]
float search_region_min[2]
libmv_MarkerModelType model_type
libmv_MarkerSource source
libmv_MarkerStatus status
bool BKE_autotrack_context_step(AutoTrackContext *context)
static void autotrack_context_reduce(const void *__restrict UNUSED(userdata), void *__restrict chunk_join, void *__restrict chunk)
static void release_keyframed_image_buffers(AutoTrackContext *context)
static void dna_marker_to_libmv_marker(MovieTrackingTrack *track, const MovieTrackingMarker *marker, int clip, int track_index, int frame_width, int frame_height, bool backwards, libmv_Marker *libmv_marker)
struct AutoTrackTrack AutoTrackTrack
void BKE_autotrack_context_start(AutoTrackContext *context)
struct AutoTrackClip AutoTrackClip
static void libmv_marker_to_dna_marker(libmv_Marker *libmv_marker, int frame_width, int frame_height, MovieTrackingMarker *marker)
static void autotrack_context_step_cb(void *__restrict userdata, const int marker_index, const TaskParallelTLS *__restrict tls)
static bool autotrack_is_marker_usable(const MovieTrackingMarker *marker)
static int autotrack_count_trackable_markers(AutoTrackContext *context)
void BKE_autotrack_context_sync(AutoTrackContext *context)
static void libmv_frame_to_normalized_relative(const float frame_coord[2], const float origin[2], const int frame_dimensions[2], float result[2])
AutoTrackContext * BKE_autotrack_context_new(MovieClip *clip, MovieClipUser *user, const bool is_backwards)
static void normalized_relative_to_libmv_frame(const float normalized[2], const float origin[2], const int frame_dimensions[2], float result[2])
static void normalized_to_libmv_frame(const float normalized[2], const int frame_dimensions[2], float result[2])
struct AutoTrackContext AutoTrackContext
static void autotrack_context_init_image_accessor(AutoTrackContext *context)
static void autotrack_context_init_markers(AutoTrackContext *context)
void BKE_autotrack_context_free(AutoTrackContext *context)
static bool autotrack_is_track_trackable(const AutoTrackContext *context, const AutoTrackTrack *autotrack_track)
static void autotrack_context_init_tracks_for_clip(AutoTrackContext *context, int clip_index)
struct AutoTrackMarker AutoTrackMarker
void BKE_autotrack_context_finish(AutoTrackContext *context)
static size_t autotrack_count_all_usable_markers(AutoTrackContext *context)
static void autotrack_context_init_autotrack(AutoTrackContext *context)
void BKE_autotrack_context_sync_user(AutoTrackContext *context, MovieClipUser *user)
struct AutoTrackTrackingResult AutoTrackTrackingResult
static bool tracking_check_marker_margin(const libmv_Marker *libmv_marker, int margin, int frame_width, int frame_height)
static void autotrack_context_init_clips(AutoTrackContext *context, MovieClip *clip, MovieClipUser *user)
static void reference_keyframed_image_buffers(AutoTrackContext *context)
static void libmv_frame_to_normalized(const float frame_coord[2], const int frame_dimensions[2], float result[2])
struct AutoTrackTLS AutoTrackTLS
static void autotrack_context_init_tracks(AutoTrackContext *context)
#define MAX_ACCESSOR_CLIP
void tracking_configure_tracker(const MovieTrackingTrack *track, float *mask, const bool is_backwards, libmv_TrackRegionOptions *options)
void tracking_marker_insert_disabled(MovieTrackingTrack *track, const MovieTrackingMarker *ref_marker, bool before, bool overwrite)
MovieTrackingMarker * tracking_get_keyframed_marker(MovieTrackingTrack *track, int current_frame, bool backwards)
TrackingImageAccessor * tracking_image_accessor_new(MovieClip *clips[MAX_ACCESSOR_CLIP], int num_clips, MovieTrackingTrack **tracks, int num_tracks)
void tracking_image_accessor_destroy(TrackingImageAccessor *accessor)
@ LIBMV_MARKER_SOURCE_TRACKED
@ LIBMV_MARKER_SOURCE_MANUAL
@ LIBMV_MARKER_STATUS_UNKNOWN
@ LIBMV_MARKER_MODEL_TYPE_POINT