frame_transform tween(double time, const frame_transform& source, const frame_transform& dest, double duration, const tweener_t& tweener) { frame_transform result; result.volume = do_tween(time, source.volume, dest.volume, duration, tweener); result.brightness = do_tween(time, source.brightness, dest.brightness, duration, tweener); result.contrast = do_tween(time, source.contrast, dest.contrast, duration, tweener); result.saturation = do_tween(time, source.saturation, dest.saturation, duration, tweener); result.opacity = do_tween(time, source.opacity, dest.opacity, duration, tweener); result.anchor[0] = do_tween(time, source.anchor[0], dest.anchor[0], duration, tweener), result.anchor[1] = do_tween(time, source.anchor[1], dest.anchor[1], duration, tweener); result.fill_translation[0] = do_tween(time, source.fill_translation[0], dest.fill_translation[0], duration, tweener), result.fill_translation[1] = do_tween(time, source.fill_translation[1], dest.fill_translation[1], duration, tweener); result.fill_scale[0] = do_tween(time, source.fill_scale[0], dest.fill_scale[0], duration, tweener), result.fill_scale[1] = do_tween(time, source.fill_scale[1], dest.fill_scale[1], duration, tweener); result.clip_translation[0] = do_tween(time, source.clip_translation[0], dest.clip_translation[0], duration, tweener), result.clip_translation[1] = do_tween(time, source.clip_translation[1], dest.clip_translation[1], duration, tweener); result.clip_scale[0] = do_tween(time, source.clip_scale[0], dest.clip_scale[0], duration, tweener), result.clip_scale[1] = do_tween(time, source.clip_scale[1], dest.clip_scale[1], duration, tweener); result.angle = do_tween(time, source.angle, dest.angle, duration, tweener); result.levels.max_input = do_tween(time, source.levels.max_input, dest.levels.max_input, duration, tweener); result.levels.min_input = do_tween(time, source.levels.min_input, dest.levels.min_input, duration, tweener); result.levels.max_output = do_tween(time, source.levels.max_output, dest.levels.max_output, duration, tweener); result.levels.min_output = do_tween(time, source.levels.min_output, dest.levels.min_output, duration, tweener); result.levels.gamma = do_tween(time, source.levels.gamma, dest.levels.gamma, duration, tweener); result.field_mode = static_cast<field_mode::type>(source.field_mode & dest.field_mode); result.is_key = source.is_key | dest.is_key; result.is_mix = source.is_mix | dest.is_mix; do_tween_rectangle(source.crop, dest.crop, result.crop, time, duration, tweener); do_tween_corners(source.perspective, dest.perspective, result.perspective, time, duration, tweener); return result; }
image_transform image_transform::tween(double time, const image_transform& source, const image_transform& dest, double duration, const tweener& tween) { image_transform result; result.brightness = do_tween(time, source.brightness, dest.brightness, duration, tween); result.contrast = do_tween(time, source.contrast, dest.contrast, duration, tween); result.saturation = do_tween(time, source.saturation, dest.saturation, duration, tween); result.opacity = do_tween(time, source.opacity, dest.opacity, duration, tween); result.anchor[0] = do_tween(time, source.anchor[0], dest.anchor[0], duration, tween); result.anchor[1] = do_tween(time, source.anchor[1], dest.anchor[1], duration, tween); result.fill_translation[0] = do_tween(time, source.fill_translation[0], dest.fill_translation[0], duration, tween); result.fill_translation[1] = do_tween(time, source.fill_translation[1], dest.fill_translation[1], duration, tween); result.fill_scale[0] = do_tween(time, source.fill_scale[0], dest.fill_scale[0], duration, tween); result.fill_scale[1] = do_tween(time, source.fill_scale[1], dest.fill_scale[1], duration, tween); result.clip_translation[0] = do_tween(time, source.clip_translation[0], dest.clip_translation[0], duration, tween); result.clip_translation[1] = do_tween(time, source.clip_translation[1], dest.clip_translation[1], duration, tween); result.clip_scale[0] = do_tween(time, source.clip_scale[0], dest.clip_scale[0], duration, tween); result.clip_scale[1] = do_tween(time, source.clip_scale[1], dest.clip_scale[1], duration, tween); result.angle = do_tween(time, source.angle, dest.angle, duration, tween); result.levels.max_input = do_tween(time, source.levels.max_input, dest.levels.max_input, duration, tween); result.levels.min_input = do_tween(time, source.levels.min_input, dest.levels.min_input, duration, tween); result.levels.max_output = do_tween(time, source.levels.max_output, dest.levels.max_output, duration, tween); result.levels.min_output = do_tween(time, source.levels.min_output, dest.levels.min_output, duration, tween); result.levels.gamma = do_tween(time, source.levels.gamma, dest.levels.gamma, duration, tween); result.chroma.target_hue = do_tween(time, source.chroma.target_hue, dest.chroma.target_hue, duration, tween); result.chroma.hue_width = do_tween(time, source.chroma.hue_width, dest.chroma.hue_width, duration, tween); result.chroma.min_saturation = do_tween(time, source.chroma.min_saturation, dest.chroma.min_saturation, duration, tween); result.chroma.min_brightness = do_tween(time, source.chroma.min_brightness, dest.chroma.min_brightness, duration, tween); result.chroma.softness = do_tween(time, source.chroma.softness, dest.chroma.softness, duration, tween); result.chroma.spill_suppress = do_tween(time, source.chroma.spill_suppress, dest.chroma.spill_suppress, duration, tween); result.chroma.spill_suppress_saturation = do_tween(time, source.chroma.spill_suppress_saturation, dest.chroma.spill_suppress_saturation, duration, tween); result.chroma.enable = dest.chroma.enable; result.chroma.show_mask = dest.chroma.show_mask; result.is_key = source.is_key || dest.is_key; result.invert = source.invert || dest.invert; result.is_mix = source.is_mix || dest.is_mix; result.blend_mode = std::max(source.blend_mode, dest.blend_mode); result.layer_depth = dest.layer_depth; do_tween_rectangle(source.crop, dest.crop, result.crop, time, duration, tween); do_tween_corners(source.perspective, dest.perspective, result.perspective, time, duration, tween); return result; }