58 # define CACHE_PRINTF(...) printf(__VA_ARGS__)
60 # define CACHE_PRINTF(...)
82 if (customdata_size) {
103 *track = &map->
tracks[index];
134 old_tracks = &tracking->
tracks;
144 old_tracks = &
object->tracks;
153 bool mapped_to_old =
false;
179 mapped_to_old =
true;
183 if (mapped_to_old ==
false) {
194 track = old_tracks->
first;
216 sizeof(track->
name));
221 *old_tracks = new_tracks;
261 const float unified_coords[2],
262 float pixel_coords[2])
264 pixel_coords[0] = unified_coords[0] * frame_width;
265 pixel_coords[1] = unified_coords[1] * frame_height;
269 const float marker_unified_coords[2],
270 float frame_unified_coords[2])
272 frame_unified_coords[0] = marker_unified_coords[0] + marker->
pos[0];
273 frame_unified_coords[1] = marker_unified_coords[1] + marker->
pos[1];
279 const float marker_unified_coords[2],
280 float frame_pixel_coords[2])
283 unified_to_pixel(frame_width, frame_height, frame_pixel_coords, frame_pixel_coords);
289 float frame_pixel[2])
293 frame_width, frame_height, marker, marker->
search_min, frame_pixel);
294 frame_pixel[0] = (int)frame_pixel[0];
295 frame_pixel[1] = (int)frame_pixel[1];
300 const float pixel_coords[2],
301 float unified_coords[2])
303 unified_coords[0] = pixel_coords[0] / frame_width;
304 unified_coords[1] = pixel_coords[1] / frame_height;
310 const float marker_unified[2],
311 float search_pixel[2])
313 float frame_pixel[2];
314 float search_origin_frame_pixel[2];
317 frame_width, frame_height, marker, marker_unified, frame_pixel);
319 frame_width, frame_height, marker, search_origin_frame_pixel);
320 sub_v2_v2v2(search_pixel, frame_pixel, search_origin_frame_pixel);
326 const float search_pixel[2],
327 float marker_unified[2])
329 float frame_unified[2];
330 float search_origin_frame_pixel[2];
333 frame_width, frame_height, marker, search_origin_frame_pixel);
334 add_v2_v2v2(frame_unified, search_pixel, search_origin_frame_pixel);
349 double search_pixel_x[5],
350 double search_pixel_y[5])
352 float unified_coords[2];
353 float pixel_coords[2];
356 for (
int i = 0; i < 4; i++) {
358 frame_width, frame_height, marker, marker->
pattern_corners[i], pixel_coords);
359 search_pixel_x[i] = pixel_coords[0] - 0.5f;
360 search_pixel_y[i] = pixel_coords[1] - 0.5f;
364 unified_coords[0] = 0.0f;
365 unified_coords[1] = 0.0f;
368 search_pixel_x[4] = pixel_coords[0] - 0.5f;
369 search_pixel_y[4] = pixel_coords[1] - 0.5f;
376 const double search_pixel_x[5],
377 const double search_pixel_y[5])
379 float marker_unified[2];
380 float search_pixel[2];
383 for (
int i = 0; i < 4; i++) {
384 search_pixel[0] = search_pixel_x[i] + 0.5;
385 search_pixel[1] = search_pixel_y[i] + 0.5;
387 frame_width, frame_height, marker, search_pixel, marker->
pattern_corners[i]);
391 search_pixel[0] = search_pixel_x[4] + 0.5;
392 search_pixel[1] = search_pixel_y[4] + 0.5;
399 for (
int i = 0; i < 4; i++) {
404 marker->
pos[0] += marker_unified[0];
405 marker->
pos[1] += marker_unified[1];
430 marker_new = *ref_marker;
532 int calibration_width,
533 int calibration_height,
548 camera_intrinsics_options->
image_width = calibration_width;
549 camera_intrinsics_options->
image_height = (int)(calibration_height * aspy);
575 while (
a >= 0 && a < track->markersnr) {
576 int next = backwards ?
a + 1 :
a - 1;
577 bool is_keyframed =
false;
581 if (
next >= 0 && next < track->markersnr) {
590 if (next_marker ==
NULL) {
597 if (marker_keyed_fallback ==
NULL) {
598 marker_keyed_fallback = cur_marker;
602 if (marker_keyed_fallback ==
NULL) {
603 marker_keyed_fallback = cur_marker;
611 marker_keyed = cur_marker;
619 if (marker_keyed ==
NULL) {
620 marker_keyed = marker_keyed_fallback;
643 clip = accessor->
clips[clip_index];
664 const size_t size = (size_t)grayscale->
x * (
size_t)grayscale->
y *
sizeof(
float);
670 for (
int i = 0; i < grayscale->
x * grayscale->
y; i++) {
673 grayscale->
rect_float[i] = 0.2126f * pixel[0] + 0.7152f * pixel[1] + 0.0722f * pixel[2];
684 float_image->
width = ibuf->
x;
712 CACHE_PRINTF(
"Calculate new buffer for frame %d\n", frame);
715 if (orig_ibuf ==
NULL) {
720 if (region !=
NULL) {
727 int clamped_origin_x =
max_ii((
int)region->
min[0], 0),
728 clamped_origin_y =
max_ii((
int)region->
min[1], 0);
729 int dst_offset_x = clamped_origin_x - (int)region->
min[0],
730 dst_offset_y = clamped_origin_y - (
int)region->
min[1];
731 int clamped_width =
width - dst_offset_x, clamped_height =
height - dst_offset_y;
732 clamped_width =
min_ii(clamped_width, orig_ibuf->
x - clamped_origin_x);
733 clamped_height =
min_ii(clamped_height, orig_ibuf->
y - clamped_origin_y);
752 for (
int y = 0;
y < clamped_height;
y++) {
753 for (
int x = 0;
x < clamped_width;
x++) {
754 int src_x =
x + clamped_origin_x, src_y =
y + clamped_origin_y;
755 int dst_x =
x + dst_offset_x, dst_y =
y + dst_offset_y;
756 int dst_index = (dst_y *
width + dst_x) * 4,
757 src_index = (src_y * orig_ibuf->
x + src_x) * 4;
759 (
unsigned char *)orig_ibuf->
rect + src_index);
774 final_ibuf = orig_ibuf;
778 if (final_ibuf == orig_ibuf) {
781 IMB_scaleImBuf(final_ibuf, orig_ibuf->
x / (1 << downscale), orig_ibuf->
y / (1 << downscale));
788 if (final_ibuf != orig_ibuf) {
803 if (final_ibuf != orig_ibuf) {
807 final_ibuf = grayscale_ibuf;
814 if (final_ibuf == orig_ibuf) {
836 BLI_assert(clip_index >= 0 && clip_index < accessor->num_clips);
867 float **r_destination,
874 BLI_assert(track_index < accessor->num_tracks);
890 int frame_width, frame_height;
894 const float region_min[2] = {
895 region->
min[0] - marker->
pos[0] * frame_width,
896 region->
min[1] - marker->
pos[1] * frame_height,
898 const float region_max[2] = {
899 region->
max[0] - marker->
pos[0] * frame_width,
900 region->
max[1] - marker->
pos[1] * frame_height,
903 frame_width, frame_height, region_min, region_max, track);
904 *r_width = region->
max[0] - region->
min[0];
905 *r_height = region->
max[1] - region->
min[1];
906 return *r_destination;
911 if (cache_key !=
NULL) {
912 float *
mask = (
float *)cache_key;
923 "tracking image accessor");
typedef float(TangentPoint)[2]
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 MovieTrackingTrack * BKE_tracking_track_duplicate(struct MovieTrackingTrack *track)
struct MovieTrackingMarker * BKE_tracking_marker_insert(struct MovieTrackingTrack *track, struct MovieTrackingMarker *marker)
struct MovieTrackingObject * BKE_tracking_object_add(struct MovieTracking *tracking, const char *name)
struct MovieTrackingMarker * BKE_tracking_marker_get_exact(struct MovieTrackingTrack *track, int framenr)
void BKE_tracking_track_free(struct MovieTrackingTrack *track)
bool BKE_tracking_track_has_marker_at_frame(struct MovieTrackingTrack *track, int framenr)
struct MovieTrackingObject * BKE_tracking_object_get_named(struct MovieTracking *tracking, const char *name)
struct MovieTrackingMarker * BKE_tracking_marker_get(struct MovieTrackingTrack *track, int framenr)
bool BLI_ghash_reinsert(GHash *gh, void *key, void *val, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
void BLI_ghash_insert(GHash *gh, void *key, void *val)
void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
GHash * BLI_ghash_ptr_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void * BLI_ghash_lookup(GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE int min_ii(int a, int b)
MINLINE int max_ii(int a, int b)
void rgba_uchar_to_float(float r_col[4], const unsigned char col_ub[4])
MINLINE void add_v2_v2v2(float r[2], const float a[2], const float b[2])
MINLINE void sub_v2_v2v2(float r[2], const float a[2], const float b[2])
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, const size_t maxncpy) ATTR_NONNULL()
bool BLI_uniquename(struct ListBase *list, void *vlink, const char *defname, char delim, int name_offset, size_t len)
void BLI_thread_unlock(int type)
void BLI_thread_lock(int type)
int BLI_system_thread_count(void)
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 CTX_DATA_(context, msgid)
#define BLT_I18NCONTEXT_ID_MOVIECLIP
typedef double(DMatrix)[4][4]
@ MCLIP_PROXY_RENDER_SIZE_FULL
@ TRACK_ALGORITHM_FLAG_USE_MASK
@ TRACKING_DISTORTION_MODEL_DIVISION
@ TRACKING_DISTORTION_MODEL_POLYNOMIAL
@ TRACKING_DISTORTION_MODEL_NUKE
@ TRACKING_DISTORTION_MODEL_BROWN
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei width
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei height
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
void IMB_float_from_rect(struct ImBuf *ibuf)
bool IMB_scaleImBuf(struct ImBuf *ibuf, unsigned int newx, unsigned int newy)
struct ImBuf * IMB_allocImBuf(unsigned int x, unsigned int y, unsigned char planes, unsigned int flags)
struct ImBuf * IMB_dupImBuf(const struct ImBuf *ibuf1)
void IMB_freeImBuf(struct ImBuf *ibuf)
void IMB_rectcpy(struct ImBuf *dbuf, const struct ImBuf *sbuf, int destx, int desty, int srcx, int srcy, int width, int height)
Contains defines and structs used throughout the imbuf module.
Read Guarded memory(de)allocation.
SIMD_FORCE_INLINE btVector3 transform(const btVector3 &point) const
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
void libmv_FrameAccessorDestroy(libmv_FrameAccessor *frame_accessor)
void libmv_frameAccessorgetTransformRun(const libmv_FrameTransform *transform, const libmv_FloatImage *input_image, libmv_FloatImage *output_image)
libmv_FrameAccessor * libmv_FrameAccessorNew(libmv_FrameAccessorUserData *user_data, libmv_GetImageCallback get_image_callback, libmv_ReleaseImageCallback release_image_callback, libmv_GetMaskForTrackCallback get_mask_for_track_callback, libmv_ReleaseMaskCallback release_mask_callback)
void libmv_floatImageDestroy(libmv_FloatImage *image)
@ LIBMV_DISTORTION_MODEL_POLYNOMIAL
@ LIBMV_DISTORTION_MODEL_NUKE
@ LIBMV_DISTORTION_MODEL_BROWN
@ LIBMV_DISTORTION_MODEL_DIVISION
struct libmv_FrameTransform libmv_FrameTransform
struct libmv_FrameAccessorUserData libmv_FrameAccessorUserData
void *(* MEM_malloc_arrayN)(size_t len, size_t size, const char *str)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_dupallocN)(const void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
float pattern_corners[4][2]
MovieTrackingMarker * markers
struct MovieTrackingTrack * next
struct MovieTrackingTrack * prev
MovieTrackingCamera camera
struct MovieTrackingTrack ** tracks
struct MovieClip * clips[MAX_ACCESSOR_CLIP]
struct libmv_FrameAccessor * libmv_accessor
char object_name[MAX_NAME]
MovieTrackingTrack * tracks
float * tracking_track_get_mask_for_region(int frame_width, int frame_height, const float region_min[2], const float region_max[2], MovieTrackingTrack *track)
#define MAX_ACCESSOR_CLIP
static void accessor_release_image_callback(libmv_CacheKey cache_key)
static void pixel_to_unified(int frame_width, int frame_height, const float pixel_coords[2], float unified_coords[2])
static ImBuf * float_image_to_ibuf(libmv_FloatImage *float_image)
static void unified_to_pixel(int frame_width, int frame_height, const float unified_coords[2], float pixel_coords[2])
static libmv_CacheKey accessor_get_mask_for_track_callback(libmv_FrameAccessorUserData *user_data, int clip_index, int frame, int track_index, const libmv_Region *region, float **r_destination, int *r_width, int *r_height)
void tracking_marker_insert_disabled(MovieTrackingTrack *track, const MovieTrackingMarker *ref_marker, bool before, bool overwrite)
static void search_pixel_to_marker_unified(int frame_width, int frame_height, const MovieTrackingMarker *marker, const float search_pixel[2], float marker_unified[2])
int tracks_map_get_size(TracksMap *map)
static ImBuf * accessor_get_preprocessed_ibuf(TrackingImageAccessor *accessor, int clip_index, int frame)
static void ibuf_to_float_image(const ImBuf *ibuf, libmv_FloatImage *float_image)
static libmv_CacheKey accessor_get_image_callback(struct libmv_FrameAccessorUserData *user_data, int clip_index, int frame, libmv_InputMode input_mode, int downscale, const libmv_Region *region, const libmv_FrameTransform *transform, float **destination, int *width, int *height, int *channels)
static void marker_unified_to_frame_pixel_coordinates(int frame_width, int frame_height, const MovieTrackingMarker *marker, const float marker_unified_coords[2], float frame_pixel_coords[2])
static void marker_unified_to_search_pixel(int frame_width, int frame_height, const MovieTrackingMarker *marker, const float marker_unified[2], float search_pixel[2])
static ImBuf * make_grayscale_ibuf_copy(ImBuf *ibuf)
void tracking_cameraIntrinscisOptionsFromTracking(MovieTracking *tracking, int calibration_width, int calibration_height, libmv_CameraIntrinsicsOptions *camera_intrinsics_options)
void tracking_get_marker_coords_for_tracking(int frame_width, int frame_height, const MovieTrackingMarker *marker, double search_pixel_x[5], double search_pixel_y[5])
void tracks_map_get_indexed_element(TracksMap *map, int index, MovieTrackingTrack **track, void **customdata)
void tracks_map_free(TracksMap *map, void(*customdata_free)(void *customdata))
static void distortion_model_parameters_from_options(const libmv_CameraIntrinsicsOptions *camera_intrinsics_options, MovieTrackingCamera *camera)
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)
static void marker_to_frame_unified(const MovieTrackingMarker *marker, const float marker_unified_coords[2], float frame_unified_coords[2])
#define CACHE_PRINTF(...)
void tracking_trackingCameraFromIntrinscisOptions(MovieTracking *tracking, const libmv_CameraIntrinsicsOptions *camera_intrinsics_options)
static void distortion_model_parameters_from_tracking(const MovieTrackingCamera *camera, libmv_CameraIntrinsicsOptions *camera_intrinsics_options)
void tracks_map_insert(TracksMap *map, MovieTrackingTrack *track, void *customdata)
void tracking_image_accessor_destroy(TrackingImageAccessor *accessor)
TracksMap * tracks_map_new(const char *object_name, bool is_camera, int num_tracks, int customdata_size)
static void accessor_release_mask_callback(libmv_CacheKey cache_key)
void tracking_set_marker_coords_from_tracking(int frame_width, int frame_height, MovieTrackingMarker *marker, const double search_pixel_x[5], const double search_pixel_y[5])
static ImBuf * accessor_get_ibuf(TrackingImageAccessor *accessor, int clip_index, int frame, libmv_InputMode input_mode, int downscale, const libmv_Region *region, const libmv_FrameTransform *transform)
void tracking_get_search_origin_frame_pixel(int frame_width, int frame_height, const MovieTrackingMarker *marker, float frame_pixel[2])
void tracks_map_merge(TracksMap *map, MovieTracking *tracking)
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)