static inline void get_affine( affine_t *affine, mlt_transition transition, double position, int length ) { mlt_properties properties = MLT_TRANSITION_PROPERTIES( transition ); int keyed = mlt_properties_get_int( properties, "keyed" ); if ( keyed == 0 ) { double fix_rotate_x = anim_get_angle( properties, "fix_rotate_x", position, length ); double fix_rotate_y = anim_get_angle( properties, "fix_rotate_y", position, length ); double fix_rotate_z = anim_get_angle( properties, "fix_rotate_z", position, length ); double rotate_x = mlt_properties_get_double( properties, "rotate_x" ); double rotate_y = mlt_properties_get_double( properties, "rotate_y" ); double rotate_z = mlt_properties_get_double( properties, "rotate_z" ); double fix_shear_x = anim_get_angle( properties, "fix_shear_x", position, length ); double fix_shear_y = anim_get_angle( properties, "fix_shear_y", position, length ); double fix_shear_z = anim_get_angle( properties, "fix_shear_z", position, length ); double shear_x = mlt_properties_get_double( properties, "shear_x" ); double shear_y = mlt_properties_get_double( properties, "shear_y" ); double shear_z = mlt_properties_get_double( properties, "shear_z" ); double ox = mlt_properties_anim_get_double( properties, "ox", position, length ); double oy = mlt_properties_anim_get_double( properties, "oy", position, length ); affine_rotate_x( affine->matrix, fix_rotate_x + rotate_x * position ); affine_rotate_y( affine->matrix, fix_rotate_y + rotate_y * position ); affine_rotate_z( affine->matrix, fix_rotate_z + rotate_z * position ); affine_shear( affine->matrix, fix_shear_x + shear_x * position, fix_shear_y + shear_y * position, fix_shear_z + shear_z * position ); affine_offset( affine->matrix, ox, oy ); } else { double rotate_x = anim_get_angle(properties, "rotate_x", position, length); double rotate_y = anim_get_angle(properties, "rotate_y", position, length); double rotate_z = anim_get_angle(properties, "rotate_z", position, length); double shear_x = anim_get_angle(properties, "shear_x", position, length); double shear_y = anim_get_angle(properties, "shear_y", position, length); double shear_z = anim_get_angle(properties, "shear_z", position, length); double o_x = mlt_properties_anim_get_double(properties, "ox", repeat_position(properties, "ox", position, length), length); double o_y = mlt_properties_anim_get_double(properties, "oy", repeat_position(properties, "oy", position, length), length); affine_rotate_x( affine->matrix, rotate_x ); affine_rotate_y( affine->matrix, rotate_y ); affine_rotate_z( affine->matrix, rotate_z ); affine_shear( affine->matrix, shear_x, shear_y, shear_z ); affine_offset( affine->matrix, o_x, o_y ); } }
static inline void get_affine( affine_t *affine, mlt_transition transition, float position ) { mlt_properties properties = MLT_TRANSITION_PROPERTIES( transition ); int keyed = mlt_properties_get_int( properties, "keyed" ); if ( keyed == 0 ) { float fix_rotate_x = mlt_properties_get_double( properties, "fix_rotate_x" ); float fix_rotate_y = mlt_properties_get_double( properties, "fix_rotate_y" ); float fix_rotate_z = mlt_properties_get_double( properties, "fix_rotate_z" ); float rotate_x = mlt_properties_get_double( properties, "rotate_x" ); float rotate_y = mlt_properties_get_double( properties, "rotate_y" ); float rotate_z = mlt_properties_get_double( properties, "rotate_z" ); float fix_shear_x = mlt_properties_get_double( properties, "fix_shear_x" ); float fix_shear_y = mlt_properties_get_double( properties, "fix_shear_y" ); float fix_shear_z = mlt_properties_get_double( properties, "fix_shear_z" ); float shear_x = mlt_properties_get_double( properties, "shear_x" ); float shear_y = mlt_properties_get_double( properties, "shear_y" ); float shear_z = mlt_properties_get_double( properties, "shear_z" ); float ox = mlt_properties_get_double( properties, "ox" ); float oy = mlt_properties_get_double( properties, "oy" ); affine_rotate_x( affine->matrix, fix_rotate_x + rotate_x * position ); affine_rotate_y( affine->matrix, fix_rotate_y + rotate_y * position ); affine_rotate_z( affine->matrix, fix_rotate_z + rotate_z * position ); affine_shear( affine->matrix, fix_shear_x + shear_x * position, fix_shear_y + shear_y * position, fix_shear_z + shear_z * position ); affine_offset( affine->matrix, ox, oy ); } else { float rotate_x = composite_calculate_key( transition, "rotate_x", "rotate_x_info", 360, position ); float rotate_y = composite_calculate_key( transition, "rotate_y", "rotate_y_info", 360, position ); float rotate_z = composite_calculate_key( transition, "rotate_z", "rotate_z_info", 360, position ); float shear_x = composite_calculate_key( transition, "shear_x", "shear_x_info", 360, position ); float shear_y = composite_calculate_key( transition, "shear_y", "shear_y_info", 360, position ); float shear_z = composite_calculate_key( transition, "shear_z", "shear_z_info", 360, position ); float o_x = composite_calculate_key( transition, "ox", "ox_info", 0, position ); float o_y = composite_calculate_key( transition, "oy", "oy_info", 0, position ); affine_rotate_x( affine->matrix, rotate_x ); affine_rotate_y( affine->matrix, rotate_y ); affine_rotate_z( affine->matrix, rotate_z ); affine_shear( affine->matrix, shear_x, shear_y, shear_z ); affine_offset( affine->matrix, o_x, o_y ); } }