, gain_(1.0)\r
, mode_(video_mode::invalid)\r
, is_key_(false)\r
+ , deinterlace_(false)\r
{\r
std::fill(fill_translation_.begin(), fill_translation_.end(), 0.0);\r
std::fill(fill_scale_.begin(), fill_scale_.end(), 1.0);\r
- std::fill(key_translation_.begin(), key_translation_.end(), 0.0);\r
- std::fill(key_scale_.begin(), key_scale_.end(), 1.0);\r
+ std::fill(clip_translation_.begin(), clip_translation_.end(), 0.0);\r
+ std::fill(clip_scale_.begin(), clip_scale_.end(), 1.0);\r
}\r
\r
void image_transform::set_opacity(double value)\r
return fill_scale_;\r
}\r
\r
-void image_transform::set_key_translation(double x, double y)\r
+void image_transform::set_clip_translation(double x, double y)\r
{\r
- key_translation_[0] = x;\r
- key_translation_[1] = y;\r
+ clip_translation_[0] = x;\r
+ clip_translation_[1] = y;\r
}\r
\r
-void image_transform::set_key_scale(double x, double y)\r
+void image_transform::set_clip_scale(double x, double y)\r
{\r
- key_scale_[0] = x;\r
- key_scale_[1] = y; \r
+ clip_scale_[0] = x;\r
+ clip_scale_[1] = y; \r
}\r
\r
-std::array<double, 2> image_transform::get_key_translation() const\r
+std::array<double, 2> image_transform::get_clip_translation() const\r
{\r
- return key_translation_;\r
+ return clip_translation_;\r
}\r
\r
-std::array<double, 2> image_transform::get_key_scale() const\r
+std::array<double, 2> image_transform::get_clip_scale() const\r
{\r
- return key_scale_;\r
+ return clip_scale_;\r
}\r
\r
void image_transform::set_mode(video_mode::type mode)\r
return mode_;\r
}\r
\r
+void image_transform::set_deinterlace(bool value)\r
+{\r
+ deinterlace_ = value;\r
+}\r
+\r
+bool image_transform::get_deinterlace() const\r
+{\r
+ return deinterlace_;\r
+}\r
+\r
image_transform& image_transform::operator*=(const image_transform &other)\r
{\r
- opacity_ *= other.opacity_;\r
+ opacity_ *= other.opacity_;\r
+ \r
if(other.mode_ != video_mode::invalid)\r
mode_ = other.mode_;\r
- gain_ *= other.gain_;\r
- is_key_ |= other.is_key_;\r
- fill_translation_[0] += other.fill_translation_[0]*fill_scale_[0];\r
- fill_translation_[1] += other.fill_translation_[1]*fill_scale_[1];\r
- fill_scale_[0] *= other.fill_scale_[0];\r
- fill_scale_[1] *= other.fill_scale_[1];\r
- key_translation_[0] += other.key_translation_[0]*key_scale_[0];\r
- key_translation_[1] += other.key_translation_[1]*key_scale_[1];\r
- key_scale_[0] *= other.key_scale_[0];\r
- key_scale_[1] *= other.key_scale_[1];\r
+\r
+ gain_ *= other.gain_;\r
+ deinterlace_ |= other.deinterlace_;\r
+ is_key_ |= other.is_key_;\r
+ fill_translation_[0] += other.fill_translation_[0]*fill_scale_[0];\r
+ fill_translation_[1] += other.fill_translation_[1]*fill_scale_[1];\r
+ fill_scale_[0] *= other.fill_scale_[0];\r
+ fill_scale_[1] *= other.fill_scale_[1];\r
+ clip_translation_[0] += other.clip_translation_[0]*clip_scale_[0];\r
+ clip_translation_[1] += other.clip_translation_[1]*clip_scale_[1];\r
+ clip_scale_[0] *= other.clip_scale_[0];\r
+ clip_scale_[1] *= other.clip_scale_[1];\r
return *this;\r
}\r
\r
CASPAR_ASSERT(source.get_mode() == dest.get_mode() || source.get_mode() == video_mode::invalid || dest.get_mode() == video_mode::invalid);\r
\r
image_transform result; \r
- result.set_mode(dest.get_mode() != video_mode::invalid ? dest.get_mode() : source.get_mode());\r
- result.set_is_key(source.get_is_key() | dest.get_is_key());\r
- result.set_gain(do_tween(time, source.get_gain(), dest.get_gain(), duration, tweener));\r
- result.set_opacity(do_tween(time, source.get_opacity(), dest.get_opacity(), duration, tweener));\r
- result.set_fill_translation(do_tween(time, source.get_fill_translation()[0], dest.get_fill_translation()[0], duration, tweener), do_tween(time, source.get_fill_translation()[1], dest.get_fill_translation()[1], duration, tweener));\r
- result.set_fill_scale(do_tween(time, source.get_fill_scale()[0], dest.get_fill_scale()[0], duration, tweener), do_tween(time, source.get_fill_scale()[1], dest.get_fill_scale()[1], duration, tweener));\r
- result.set_key_translation(do_tween(time, source.get_key_translation()[0], dest.get_key_translation()[0], duration, tweener), do_tween(time, source.get_key_translation()[1], dest.get_key_translation()[1], duration, tweener));\r
- result.set_key_scale(do_tween(time, source.get_key_scale()[0], dest.get_key_scale()[0], duration, tweener), do_tween(time, source.get_key_scale()[1], dest.get_key_scale()[1], duration, tweener));\r
+ result.set_mode (dest.get_mode() != video_mode::invalid ? dest.get_mode() : source.get_mode());\r
+ result.set_is_key (source.get_is_key() | dest.get_is_key());\r
+ result.set_deinterlace (source.get_deinterlace() | dest.get_deinterlace());\r
+ result.set_gain (do_tween(time, source.get_gain(), dest.get_gain(), duration, tweener));\r
+ result.set_opacity (do_tween(time, source.get_opacity(), dest.get_opacity(), duration, tweener));\r
+ result.set_fill_translation (do_tween(time, source.get_fill_translation()[0], dest.get_fill_translation()[0], duration, tweener), do_tween(time, source.get_fill_translation()[1], dest.get_fill_translation()[1], duration, tweener));\r
+ result.set_fill_scale (do_tween(time, source.get_fill_scale()[0], dest.get_fill_scale()[0], duration, tweener), do_tween(time, source.get_fill_scale()[1], dest.get_fill_scale()[1], duration, tweener));\r
+ result.set_clip_translation (do_tween(time, source.get_clip_translation()[0], dest.get_clip_translation()[0], duration, tweener), do_tween(time, source.get_clip_translation()[1], dest.get_clip_translation()[1], duration, tweener));\r
+ result.set_clip_scale (do_tween(time, source.get_clip_scale()[0], dest.get_clip_scale()[0], duration, tweener), do_tween(time, source.get_clip_scale()[1], dest.get_clip_scale()[1], duration, tweener));\r
\r
return result;\r
}\r
void set_fill_scale(double x, double y);\r
std::array<double, 2> get_fill_scale() const;\r
\r
- void set_key_translation(double x, double y);\r
- std::array<double, 2> get_key_translation() const;\r
+ void set_clip_translation(double x, double y);\r
+ std::array<double, 2> get_clip_translation() const;\r
\r
- void set_key_scale(double x, double y);\r
- std::array<double, 2> get_key_scale() const;\r
+ void set_clip_scale(double x, double y);\r
+ std::array<double, 2> get_clip_scale() const;\r
\r
void set_mode(video_mode::type mode);\r
video_mode::type get_mode() const;\r
\r
void set_is_key(bool value);\r
bool get_is_key() const;\r
+\r
+ void set_deinterlace(bool value);\r
+ bool get_deinterlace() const;\r
+\r
private:\r
double opacity_;\r
double gain_;\r
std::array<double, 2> fill_translation_; \r
std::array<double, 2> fill_scale_; \r
- std::array<double, 2> key_translation_; \r
- std::array<double, 2> key_scale_; \r
+ std::array<double, 2> clip_translation_; \r
+ std::array<double, 2> clip_scale_; \r
video_mode::type mode_;\r
bool is_key_;\r
+ bool deinterlace_;\r
};\r
\r
image_transform tween(double time, const image_transform& source, const image_transform& dest, double duration, const tweener_t& tweener);\r
{\r
transform.set_fill_translation(x, y);\r
transform.set_fill_scale(x_s, y_s);\r
- transform.set_key_translation(x, y);\r
- transform.set_key_scale(x_s, y_s);\r
+ transform.set_clip_translation(x, y);\r
+ transform.set_clip_scale(x_s, y_s);\r
return transform;\r
};\r
\r
else\r
GetChannel()->mixer()->apply_image_transform(transform, duration, tween);\r
}\r
- else if(_parameters[1] == L"KEY_RECT")\r
+ else if(_parameters[1] == L"CLIP_RECT")\r
{\r
int duration = _parameters.size() > 6 ? lexical_cast_or_default(_parameters[6], 0) : 0;\r
std::wstring tween = _parameters.size() > 7 ? _parameters[7] : L"linear";\r
\r
auto transform = [=](image_transform transform) -> image_transform\r
{\r
- transform.set_key_translation(x, y);\r
- transform.set_key_scale(x_s, y_s);\r
+ transform.set_clip_translation(x, y);\r
+ transform.set_clip_scale(x_s, y_s);\r
return transform;\r
};\r
\r
{ \r
transform.set_fill_translation(x*delta, y*delta);\r
transform.set_fill_scale(delta, delta); \r
- transform.set_key_translation(x*delta, y*delta);\r
- transform.set_key_scale(delta, delta);\r
+ transform.set_clip_translation(x*delta, y*delta);\r
+ transform.set_clip_scale(delta, delta);\r
return transform;\r
};\r
GetChannel()->mixer()->apply_image_transform(index, transform, duration, tween);\r