|
Blender
V2.93
|
#include <limits.h>#include "DNA_anim_types.h"#include "DNA_movieclip_types.h"#include "DNA_scene_types.h"#include "RNA_access.h"#include "BLI_ghash.h"#include "BLI_listbase.h"#include "BLI_math.h"#include "BLI_math_vector.h"#include "BLI_sort_utils.h"#include "BLI_task.h"#include "BLI_utildefines.h"#include "BKE_fcurve.h"#include "BKE_movieclip.h"#include "BKE_tracking.h"#include "IMB_colormanagement.h"#include "IMB_imbuf.h"#include "IMB_imbuf_types.h"#include "MEM_guardedalloc.h"Go to the source code of this file.
Classes | |
| struct | TrackStabilizationBase |
| struct | TrackInitOrder |
| struct | StabContext |
| struct | TrackingStabilizeFrameInterpolationData |
Typedefs | |
| typedef struct TrackStabilizationBase | TrackStabilizationBase |
| typedef struct TrackInitOrder | TrackInitOrder |
| typedef struct StabContext | StabContext |
| typedef void(* | interpolation_func) (struct ImBuf *, struct ImBuf *, float, float, int, int) |
| typedef struct TrackingStabilizeFrameInterpolationData | TrackingStabilizeFrameInterpolationData |
Functions | |
| static TrackStabilizationBase * | access_stabilization_baseline_data (StabContext *ctx, MovieTrackingTrack *track) |
| static void | attach_stabilization_baseline_data (StabContext *ctx, MovieTrackingTrack *track, TrackStabilizationBase *private_data) |
| static void | discard_stabilization_baseline_data (void *val) |
| static FCurve * | retrieve_stab_animation (MovieClip *clip, const char *data_path, int idx) |
| static FCurve * | retrieve_track_weight_animation (MovieClip *clip, MovieTrackingTrack *track) |
| static float | fetch_from_fcurve (FCurve *animationCurve, int framenr, StabContext *ctx, float default_value) |
| static float | get_animated_locinf (StabContext *ctx, int framenr) |
| static float | get_animated_rotinf (StabContext *ctx, int framenr) |
| static float | get_animated_scaleinf (StabContext *ctx, int framenr) |
| static void | get_animated_target_pos (StabContext *ctx, int framenr, float target_pos[2]) |
| static float | get_animated_target_rot (StabContext *ctx, int framenr) |
| static float | get_animated_target_scale (StabContext *ctx, int framenr) |
| static float | get_animated_weight (StabContext *ctx, MovieTrackingTrack *track, int framenr) |
| static void | use_values_from_fcurves (StabContext *ctx, bool toggle) |
| static StabContext * | init_stabilization_working_context (MovieClip *clip) |
| static void | discard_stabilization_working_context (StabContext *ctx) |
| static bool | is_init_for_stabilization (StabContext *ctx, MovieTrackingTrack *track) |
| static bool | is_usable_for_stabilization (StabContext *ctx, MovieTrackingTrack *track) |
| static bool | is_effectively_disabled (StabContext *ctx, MovieTrackingTrack *track, MovieTrackingMarker *marker) |
| static int | search_closest_marker_index (MovieTrackingTrack *track, int ref_frame) |
| static void | retrieve_next_higher_usable_frame (StabContext *ctx, MovieTrackingTrack *track, int i, int ref_frame, int *next_higher) |
| static void | retrieve_next_lower_usable_frame (StabContext *ctx, MovieTrackingTrack *track, int i, int ref_frame, int *next_lower) |
| static void | find_next_working_frames (StabContext *ctx, int framenr, int *next_lower, int *next_higher) |
| static MovieTrackingMarker * | get_closest_marker (StabContext *ctx, MovieTrackingTrack *track, int ref_frame) |
| static MovieTrackingMarker * | get_tracking_data_point (StabContext *ctx, MovieTrackingTrack *track, int framenr, float *r_weight) |
| static void | setup_pivot (const float ref_pos[2], float r_pivot[2]) |
| static void | translation_contribution (TrackStabilizationBase *track_ref, MovieTrackingMarker *marker, float result_offset[2]) |
| static float | rotation_contribution (TrackStabilizationBase *track_ref, MovieTrackingMarker *marker, const float aspect, const float pivot[2], float *result_angle, float *result_scale) |
| static void | compensate_rotation_center (const int size, float aspect, const float angle, const float scale, const float pivot[2], float result_translation[2]) |
| static bool | average_track_contributions (StabContext *ctx, int framenr, float aspect, float r_translation[2], float r_pivot[2], float *r_angle, float *r_scale_step) |
| static void | average_marker_positions (StabContext *ctx, int framenr, float r_ref_pos[2]) |
| static bool | interpolate_averaged_track_contributions (StabContext *ctx, int framenr, int frame_a, int frame_b, const float aspect, float r_translation[2], float r_pivot[2], float *r_angle, float *r_scale_step) |
| static int | establish_track_initialization_order (StabContext *ctx, TrackInitOrder *order) |
| static void | init_track_for_stabilization (StabContext *ctx, MovieTrackingTrack *track, int reference_frame, float aspect, const float average_translation[2], const float pivot[2], const float average_angle, const float average_scale_step) |
| static void | init_all_tracks (StabContext *ctx, float aspect) |
| static bool | stabilization_determine_offset_for_frame (StabContext *ctx, int framenr, float aspect, float r_translation[2], float r_pivot[2], float *r_angle, float *r_scale_step) |
| static void | stabilization_calculate_data (StabContext *ctx, int framenr, int size, float aspect, bool do_compensate, float scale_step, float r_translation[2], float r_pivot[2], float *r_scale, float *r_angle) |
| static void | stabilization_data_to_mat4 (float pixel_aspect, const float pivot[2], const float translation[2], float scale, float angle, float r_mat[4][4]) |
| static float | calculate_autoscale_factor (StabContext *ctx, int size, float aspect) |
| static StabContext * | init_stabilizer (MovieClip *clip, int size, float aspect) |
| void | BKE_tracking_stabilization_data_get (MovieClip *clip, int framenr, int width, int height, float translation[2], float *scale, float *angle) |
| static void | tracking_stabilize_frame_interpolation_cb (void *__restrict userdata, const int j, const TaskParallelTLS *__restrict UNUSED(tls)) |
| ImBuf * | BKE_tracking_stabilize_frame (MovieClip *clip, int framenr, ImBuf *ibuf, float translation[2], float *scale, float *angle) |
| void | BKE_tracking_stabilization_data_to_mat4 (int buffer_width, int buffer_height, float pixel_aspect, float translation[2], float scale, float angle, float r_mat[4][4]) |
Variables | |
| static float | SCALE_ERROR_LIMIT_BIAS = 0.01f |
| static float | EPSILON_WEIGHT = 0.005f |
This file contains implementation of 2D image stabilization.
Definition in file tracking_stabilize.c.
Definition at line 1310 of file tracking_stabilize.c.
| typedef struct StabContext StabContext |
| typedef struct TrackInitOrder TrackInitOrder |
| typedef struct TrackStabilizationBase TrackStabilizationBase |
|
static |
Definition at line 117 of file tracking_stabilize.c.
References BLI_ghash_lookup(), and StabContext::private_track_data.
Referenced by average_track_contributions(), get_animated_weight(), init_all_tracks(), init_track_for_stabilization(), and is_init_for_stabilization().
|
static |
Definition at line 123 of file tracking_stabilize.c.
References BLI_ghash_insert(), and StabContext::private_track_data.
Referenced by init_all_tracks().
|
static |
Definition at line 632 of file tracking_stabilize.c.
References EPSILON_WEIGHT, get_tracking_data_point(), LISTBASE_FOREACH, MAXFRAME, MINAFRAME, MINFRAME, MovieTrackingMarker::pos, retrieve_next_higher_usable_frame(), retrieve_next_lower_usable_frame(), search_closest_marker_index(), TRACK_USE_2D_STAB, StabContext::tracking, MovieTracking::tracks, use_values_from_fcurves(), and zero_v2().
Referenced by init_all_tracks().
|
static |
Definition at line 520 of file tracking_stabilize.c.
References access_stabilization_baseline_data(), BLI_assert, EPSILON_WEIGHT, MovieTrackingStabilization::flag, get_tracking_data_point(), is_init_for_stabilization(), LISTBASE_FOREACH, logf, NULL, MovieTrackingMarker::pos, rotation_contribution(), setup_pivot(), MovieTracking::stabilization, TRACK_USE_2D_STAB, TRACK_USE_2D_STAB_ROT, StabContext::tracking, TRACKING_2D_STABILIZATION, TRACKING_STABILIZE_ROTATION, TRACKING_STABILIZE_SCALE, MovieTracking::tracks, translation_contribution(), and zero_v2().
Referenced by init_all_tracks(), interpolate_averaged_track_contributions(), and stabilization_determine_offset_for_frame().
| void BKE_tracking_stabilization_data_get | ( | MovieClip * | clip, |
| int | framenr, | ||
| int | width, | ||
| int | height, | ||
| float | translation[2], | ||
| float * | scale, | ||
| float * | angle | ||
| ) |
Definition at line 1273 of file tracking_stabilize.c.
References angle(), MovieTracking::camera, compensate_rotation_center(), discard_stabilization_working_context(), enabled, MovieTrackingStabilization::flag, float(), height, init_stabilizer(), NULL, MovieTrackingCamera::pixel_aspect, size(), MovieTracking::stabilization, stabilization_calculate_data(), stabilization_determine_offset_for_frame(), MovieClip::tracking, TRACKING_2D_STABILIZATION, width, and zero_v2().
Referenced by BKE_tracking_stabilize_frame(), blender::compositor::MovieClipNode::convertToOperations(), get_stable_cached_frame(), and blender::compositor::MovieClipAttributeOperation::initExecution().
| void BKE_tracking_stabilization_data_to_mat4 | ( | int | buffer_width, |
| int | buffer_height, | ||
| float | pixel_aspect, | ||
| float | translation[2], | ||
| float | scale, | ||
| float | angle, | ||
| float | r_mat[4][4] | ||
| ) |
Definition at line 1462 of file tracking_stabilize.c.
References angle(), and stabilization_data_to_mat4().
Referenced by BKE_tracking_stabilize_frame(), and clip_draw_main().
| ImBuf* BKE_tracking_stabilize_frame | ( | MovieClip * | clip, |
| int | framenr, | ||
| ImBuf * | ibuf, | ||
| float | translation[2], | ||
| float * | scale, | ||
| float * | angle | ||
| ) |
Definition at line 1345 of file tracking_stabilize.c.
References angle(), bicubic_interpolation(), bilinear_interpolation(), BKE_tracking_stabilization_data_get(), BKE_tracking_stabilization_data_to_mat4(), BLI_parallel_range_settings_defaults(), BLI_task_parallel_range(), MovieTracking::camera, copy_v2_v2(), data, MovieTrackingStabilization::filter, filter(), MovieTrackingStabilization::flag, height, IB_rect, IB_RECT_INVALID, IB_rectfloat, IMB_allocImBuf(), IMB_colormanagegent_copy_settings(), invert_m4(), nearest_interpolation(), NULL, MovieTrackingCamera::pixel_aspect, ImBuf::planes, ImBuf::rect, ImBuf::rect_float, MovieTracking::stabilization, MovieClip::tracking, TRACKING_2D_STABILIZATION, TRACKING_FILTER_BICUBIC, TRACKING_FILTER_BILINEAR, TRACKING_FILTER_NEAREST, tracking_stabilize_frame_interpolation_cb(), TaskParallelSettings::use_threading, ImBuf::userflags, width, ImBuf::x, ImBuf::y, and zero_v2().
Referenced by put_stabilized_frame_to_cache().
|
static |
Definition at line 1117 of file tracking_stabilize.c.
References add_v2_v2v2(), angle(), MovieTracking::camera, copy_v2_v2(), cross_v2v2(), dist_to_line_v2(), MovieTrackingStabilization::flag, height, LISTBASE_FOREACH, max_ff(), max_ii(), MovieTrackingStabilization::maxscale, min_ff(), min_ii(), mul_m4_v3(), MovieTrackingCamera::pixel_aspect, size(), StabContext::stab, stabilization_calculate_data(), stabilization_data_to_mat4(), stabilization_determine_offset_for_frame(), sub_v3_v3v3(), TRACK_USE_2D_STAB, TRACK_USE_2D_STAB_ROT, StabContext::tracking, TRACKING_STABILIZE_ROTATION, MovieTracking::tracks, use_values_from_fcurves(), and width.
Referenced by init_stabilizer().
|
static |
Definition at line 486 of file tracking_stabilize.c.
References add_v2_v2(), angle(), angle_to_mat2(), copy_v2_v2(), mul_m2_v2(), mul_v2_fl(), size(), and sub_v2_v2().
Referenced by BKE_tracking_stabilization_data_get().
|
static |
Definition at line 130 of file tracking_stabilize.c.
References MEM_freeN, and NULL.
Referenced by discard_stabilization_working_context().
|
static |
Discard all private working data attached to this call context.
Definition at line 244 of file tracking_stabilize.c.
References BLI_ghash_free(), discard_stabilization_baseline_data(), MEM_freeN, NULL, and StabContext::private_track_data.
Referenced by BKE_tracking_stabilization_data_get().
|
static |
Definition at line 751 of file tracking_stabilize.c.
References abs(), MovieTrackingStabilization::anchor_frame, BLI_sortutil_cmp_int(), MovieTrackingMarker::framenr, get_closest_marker(), LISTBASE_FOREACH, NULL, order, MovieTracking::stabilization, TRACK_USE_2D_STAB, TRACK_USE_2D_STAB_ROT, StabContext::tracking, and MovieTracking::tracks.
Referenced by init_all_tracks().
|
static |
Definition at line 154 of file tracking_stabilize.c.
References BKE_movieclip_remap_clip_to_scene_frame(), StabContext::clip, evaluate_fcurve(), and StabContext::use_animation.
Referenced by get_animated_locinf(), get_animated_rotinf(), get_animated_scaleinf(), get_animated_target_pos(), get_animated_target_rot(), and get_animated_target_scale().
|
static |
Definition at line 315 of file tracking_stabilize.c.
References is_usable_for_stabilization(), LISTBASE_FOREACH, retrieve_next_higher_usable_frame(), retrieve_next_lower_usable_frame(), search_closest_marker_index(), StabContext::tracking, and MovieTracking::tracks.
Referenced by stabilization_determine_offset_for_frame().
|
static |
Definition at line 166 of file tracking_stabilize.c.
References fetch_from_fcurve(), StabContext::locinf, MovieTrackingStabilization::locinf, and StabContext::stab.
Referenced by stabilization_calculate_data().
|
static |
Definition at line 171 of file tracking_stabilize.c.
References fetch_from_fcurve(), StabContext::rotinf, MovieTrackingStabilization::rotinf, and StabContext::stab.
Referenced by stabilization_calculate_data().
|
static |
Definition at line 176 of file tracking_stabilize.c.
References fetch_from_fcurve(), StabContext::scaleinf, MovieTrackingStabilization::scaleinf, and StabContext::stab.
Referenced by stabilization_calculate_data().
|
static |
Definition at line 181 of file tracking_stabilize.c.
References fetch_from_fcurve(), StabContext::stab, StabContext::target_pos, and MovieTrackingStabilization::target_pos.
Referenced by stabilization_calculate_data().
|
static |
Definition at line 187 of file tracking_stabilize.c.
References fetch_from_fcurve(), StabContext::stab, StabContext::target_rot, and MovieTrackingStabilization::target_rot.
Referenced by stabilization_calculate_data().
|
static |
Definition at line 192 of file tracking_stabilize.c.
References fetch_from_fcurve(), MovieTrackingStabilization::scale, StabContext::stab, and StabContext::target_scale.
Referenced by stabilization_calculate_data().
|
static |
Definition at line 197 of file tracking_stabilize.c.
References access_stabilization_baseline_data(), BKE_movieclip_remap_clip_to_scene_frame(), StabContext::clip, evaluate_fcurve(), TrackStabilizationBase::track_weight_curve, and MovieTrackingTrack::weight_stab.
Referenced by get_tracking_data_point(), and is_effectively_disabled().
|
static |
Definition at line 330 of file tracking_stabilize.c.
References BKE_tracking_marker_get_exact(), MAXFRAME, MINAFRAME, retrieve_next_higher_usable_frame(), retrieve_next_lower_usable_frame(), and search_closest_marker_index().
Referenced by establish_track_initialization_order().
|
static |
Definition at line 352 of file tracking_stabilize.c.
References BKE_tracking_marker_get_exact(), MovieTrackingMarker::flag, get_animated_weight(), MARKER_DISABLED, and NULL.
Referenced by average_marker_positions(), and average_track_contributions().
|
static |
Definition at line 860 of file tracking_stabilize.c.
References access_stabilization_baseline_data(), MovieTrackingStabilization::anchor_frame, attach_stabilization_baseline_data(), average_marker_positions(), average_track_contributions(), BLI_assert, StabContext::clip, establish_track_initialization_order(), init_track_for_stabilization(), TrackStabilizationBase::is_init_for_stabilization, LISTBASE_FOREACH, MEM_callocN, MEM_freeN, MEM_mallocN, NULL, order, retrieve_track_weight_animation(), setup_pivot(), MovieTracking::stabilization, TrackStabilizationBase::track_weight_curve, StabContext::tracking, MovieTracking::tracks, and zero_v2().
Referenced by init_stabilizer().
|
static |
Definition at line 218 of file tracking_stabilize.c.
References BLI_ghash_ptr_new(), StabContext::clip, StabContext::locinf, MEM_callocN, StabContext::private_track_data, retrieve_stab_animation(), StabContext::rotinf, StabContext::scaleinf, StabContext::stab, MovieTracking::stabilization, StabContext::target_pos, StabContext::target_rot, StabContext::target_scale, StabContext::tracking, MovieClip::tracking, and StabContext::use_animation.
Referenced by init_stabilizer().
|
static |
Definition at line 1239 of file tracking_stabilize.c.
References BLI_assert, calculate_autoscale_factor(), MovieTrackingStabilization::flag, init_all_tracks(), init_stabilization_working_context(), NULL, MovieTrackingStabilization::scale, size(), StabContext::stab, TRACKING_AUTOSCALE, and use_values_from_fcurves().
Referenced by BKE_tracking_stabilization_data_get().
|
static |
Definition at line 825 of file tracking_stabilize.c.
References access_stabilization_baseline_data(), angle(), angle_to_mat2(), atan2f, BKE_tracking_marker_get_exact(), BLI_assert, expf, TrackStabilizationBase::is_init_for_stabilization, len, len_v2(), NULL, pos, MovieTrackingMarker::pos, SCALE_ERROR_LIMIT_BIAS, TrackStabilizationBase::stabilization_offset_base, TrackStabilizationBase::stabilization_rotation_base, TrackStabilizationBase::stabilization_scale_base, and sub_v2_v2v2().
Referenced by init_all_tracks().
|
static |
Definition at line 694 of file tracking_stabilize.c.
References average_track_contributions(), BLI_assert, float(), interp_v2_v2v2(), and t.
Referenced by stabilization_determine_offset_for_frame().
|
static |
Definition at line 263 of file tracking_stabilize.c.
References EPSILON_WEIGHT, MovieTrackingMarker::flag, MovieTrackingMarker::framenr, get_animated_weight(), and MARKER_DISABLED.
Referenced by retrieve_next_higher_usable_frame(), and retrieve_next_lower_usable_frame().
|
static |
Definition at line 252 of file tracking_stabilize.c.
References access_stabilization_baseline_data(), TrackStabilizationBase::is_init_for_stabilization, and NULL.
Referenced by average_track_contributions(), and is_usable_for_stabilization().
|
static |
Definition at line 258 of file tracking_stabilize.c.
References MovieTrackingTrack::flag, is_init_for_stabilization(), and TRACK_USE_2D_STAB.
Referenced by find_next_working_frames().
|
static |
Definition at line 277 of file tracking_stabilize.c.
References BLI_assert, is_effectively_disabled(), markers, MovieTrackingTrack::markers, and MovieTrackingTrack::markersnr.
Referenced by average_marker_positions(), find_next_working_frames(), and get_closest_marker().
|
static |
Definition at line 294 of file tracking_stabilize.c.
References BLI_assert, is_effectively_disabled(), markers, and MovieTrackingTrack::markers.
Referenced by average_marker_positions(), find_next_working_frames(), and get_closest_marker().
Definition at line 139 of file tracking_stabilize.c.
References MovieClip::id, id_data_find_fcurve(), NULL, RNA_MovieTrackingStabilization, MovieTracking::stabilization, and MovieClip::tracking.
Referenced by init_stabilization_working_context().
|
static |
Definition at line 149 of file tracking_stabilize.c.
References MovieClip::id, id_data_find_fcurve(), NULL, and RNA_MovieTrackingTrack.
Referenced by init_all_tracks().
|
static |
Definition at line 449 of file tracking_stabilize.c.
References atan2f, BLI_assert, expf, len, len_v2(), mul_m2_v2(), pos, MovieTrackingMarker::pos, SCALE_ERROR_LIMIT_BIAS, TrackStabilizationBase::stabilization_rotation_base, TrackStabilizationBase::stabilization_scale_base, and sub_v2_v2v2().
Referenced by average_track_contributions().
|
static |
Definition at line 271 of file tracking_stabilize.c.
References BKE_tracking_marker_get(), and MovieTrackingTrack::markers.
Referenced by average_marker_positions(), find_next_working_frames(), and get_closest_marker().
Definition at line 383 of file tracking_stabilize.c.
References add_v2_v2(), and zero_v2().
Referenced by average_track_contributions(), and init_all_tracks().
|
static |
Definition at line 1014 of file tracking_stabilize.c.
References expf, MovieTrackingStabilization::flag, float(), get_animated_locinf(), get_animated_rotinf(), get_animated_scaleinf(), get_animated_target_pos(), get_animated_target_rot(), get_animated_target_scale(), mul_v2_fl(), size(), StabContext::stab, sub_v2_v2(), and TRACKING_STABILIZE_SCALE.
Referenced by BKE_tracking_stabilization_data_get(), and calculate_autoscale_factor().
|
static |
Definition at line 1069 of file tracking_stabilize.c.
References add_v2_v2(), angle(), invert_m4_m4(), mul_m4_series, rotate_m4(), size_to_mat4(), sub_v2_v2(), and unit_m4().
Referenced by BKE_tracking_stabilization_data_to_mat4(), and calculate_autoscale_factor().
|
static |
Definition at line 946 of file tracking_stabilize.c.
References average_track_contributions(), find_next_working_frames(), MovieTrackingStabilization::flag, interpolate_averaged_track_contributions(), MAXFRAME, MINAFRAME, MINFRAME, StabContext::stab, TRACKING_2D_STABILIZATION, use_values_from_fcurves(), and zero_v2().
Referenced by BKE_tracking_stabilization_data_get(), and calculate_autoscale_factor().
|
static |
Definition at line 1320 of file tracking_stabilize.c.
References data, float(), mul_v3_m4v3(), and ImBuf::x.
Referenced by BKE_tracking_stabilize_frame().
|
static |
Definition at line 405 of file tracking_stabilize.c.
References add_v2_v2v2(), MovieTrackingMarker::pos, and TrackStabilizationBase::stabilization_offset_base.
Referenced by average_track_contributions().
|
static |
Definition at line 208 of file tracking_stabilize.c.
References NULL, and StabContext::use_animation.
Referenced by average_marker_positions(), calculate_autoscale_factor(), init_stabilizer(), and stabilization_determine_offset_for_frame().
|
static |
Definition at line 67 of file tracking_stabilize.c.
Referenced by average_marker_positions(), average_track_contributions(), and is_effectively_disabled().
|
static |
Definition at line 61 of file tracking_stabilize.c.
Referenced by init_track_for_stabilization(), and rotation_contribution().