if(info_.type == transition::cut) \r
return src_frame != basic_frame::eof() ? src_frame : basic_frame::empty();\r
\r
- double alpha = static_cast<double>(current_frame_)/static_cast<double>(info_.duration);\r
- double half_alpha_step = 0.5*1.0/static_cast<double>(info_.duration);\r
- \r
+ double delta1 = info_.tweener(current_frame_*2-1, 0.0, 1.0, info_.duration*2);\r
+ double delta2 = info_.tweener(current_frame_*2, 0.0, 1.0, info_.duration*2); \r
+\r
double dir = info_.direction == transition_direction::from_left ? 1.0 : -1.0; \r
\r
// For interlaced transitions. Seperate fields into seperate frames which are transitioned accordingly.\r
auto s_frame2 = make_safe<basic_frame>(src_frame);\r
\r
s_frame1->get_audio_transform().set_has_audio(false);\r
- s_frame2->get_audio_transform().set_gain(1.0-alpha);\r
+ s_frame2->get_audio_transform().set_gain(1.0-delta2);\r
\r
auto d_frame1 = make_safe<basic_frame>(dest_frame);\r
auto d_frame2 = make_safe<basic_frame>(dest_frame);\r
\r
d_frame1->get_audio_transform().set_has_audio(false);\r
- d_frame2->get_audio_transform().set_gain(alpha);\r
+ d_frame2->get_audio_transform().set_gain(delta2);\r
\r
if(info_.type == transition::mix)\r
{\r
- d_frame1->get_image_transform().set_opacity(alpha-half_alpha_step); \r
- d_frame2->get_image_transform().set_opacity(alpha); \r
+ d_frame1->get_image_transform().set_opacity(delta1); \r
+ d_frame2->get_image_transform().set_opacity(delta2); \r
}\r
else if(info_.type == transition::slide)\r
{\r
- d_frame1->get_image_transform().set_fill_translation((-1.0+alpha-half_alpha_step)*dir, 0.0); \r
- d_frame2->get_image_transform().set_fill_translation((-1.0+alpha)*dir, 0.0); \r
+ d_frame1->get_image_transform().set_fill_translation((-1.0+delta1)*dir, 0.0); \r
+ d_frame2->get_image_transform().set_fill_translation((-1.0+delta2)*dir, 0.0); \r
}\r
else if(info_.type == transition::push)\r
{\r
- d_frame1->get_image_transform().set_fill_translation((-1.0+alpha-half_alpha_step)*dir, 0.0);\r
- d_frame2->get_image_transform().set_fill_translation((-1.0+alpha)*dir, 0.0);\r
+ d_frame1->get_image_transform().set_fill_translation((-1.0+delta1)*dir, 0.0);\r
+ d_frame2->get_image_transform().set_fill_translation((-1.0+delta2)*dir, 0.0);\r
\r
- s_frame1->get_image_transform().set_fill_translation((0.0+alpha-half_alpha_step)*dir, 0.0); \r
- s_frame2->get_image_transform().set_fill_translation((0.0+alpha)*dir, 0.0); \r
+ s_frame1->get_image_transform().set_fill_translation((0.0+delta1)*dir, 0.0); \r
+ s_frame2->get_image_transform().set_fill_translation((0.0+delta2)*dir, 0.0); \r
}\r
else if(info_.type == transition::wipe) \r
{\r
- d_frame1->get_image_transform().set_key_scale(alpha-half_alpha_step, 1.0); \r
- d_frame2->get_image_transform().set_key_scale(alpha, 1.0); \r
+ d_frame1->get_image_transform().set_key_scale(delta1, 1.0); \r
+ d_frame2->get_image_transform().set_key_scale(delta2, 1.0); \r
}\r
\r
auto s_frame = s_frame1->get_image_transform() == s_frame2->get_image_transform() ? s_frame2 : basic_frame::interlace(s_frame1, s_frame2, format_desc_.mode);\r