]> git.sesse.net Git - casparcg/blob - mixer/image/image_transform.cpp
7e3496a8f676a9d8a8261d0d1fa3d4bdcceb59d8
[casparcg] / mixer / image / image_transform.cpp
1 #include "../stdafx.h"\r
2 \r
3 #include "image_transform.h"\r
4 \r
5 namespace caspar { namespace core {\r
6                 \r
7 image_transform::image_transform() \r
8         : opacity_(1.0)\r
9         , gain_(1.0)\r
10         , mode_(video_mode::invalid)\r
11 {\r
12         std::fill(fill_translation_.begin(), fill_translation_.end(), 0.0);\r
13         std::fill(fill_scale_.begin(), fill_scale_.end(), 1.0);\r
14         std::fill(key_translation_.begin(), key_translation_.end(), 0.0);\r
15         std::fill(key_scale_.begin(), key_scale_.end(), 1.0);\r
16 }\r
17 \r
18 void image_transform::set_opacity(double value)\r
19 {\r
20         opacity_ = value;\r
21 }\r
22 \r
23 double image_transform::get_opacity() const\r
24 {\r
25         return opacity_;\r
26 }\r
27 \r
28 void image_transform::set_gain(double value)\r
29 {\r
30         gain_ = value;\r
31 }\r
32 \r
33 double image_transform::get_gain() const\r
34 {\r
35         return gain_;\r
36 }\r
37 \r
38 void image_transform::set_image_translation(double x, double y)\r
39 {\r
40         fill_translation_[0] = x;\r
41         fill_translation_[1] = y;\r
42 }\r
43 \r
44 void image_transform::set_image_scale(double x, double y)\r
45 {\r
46         fill_scale_[0] = x;\r
47         fill_scale_[1] = y;     \r
48 }\r
49 \r
50 std::array<double, 2> image_transform::get_image_translation() const\r
51 {\r
52         return fill_translation_;\r
53 }\r
54 \r
55 std::array<double, 2> image_transform::get_image_scale() const\r
56 {\r
57         return fill_scale_;\r
58 }\r
59 \r
60 void image_transform::set_mask_translation(double x, double y)\r
61 {\r
62         key_translation_[0] = x;\r
63         key_translation_[1] = y;\r
64 }\r
65 \r
66 void image_transform::set_mask_scale(double x, double y)\r
67 {\r
68         key_scale_[0] = x;\r
69         key_scale_[1] = y;      \r
70 }\r
71 \r
72 std::array<double, 2> image_transform::get_mask_translation() const\r
73 {\r
74         return key_translation_;\r
75 }\r
76 \r
77 std::array<double, 2> image_transform::get_mask_scale() const\r
78 {\r
79         return key_scale_;\r
80 }\r
81 \r
82 void image_transform::set_mode(video_mode::type mode)\r
83 {\r
84         mode_ = mode;\r
85 }\r
86 \r
87 video_mode::type image_transform::get_mode() const\r
88 {\r
89         return mode_;\r
90 }\r
91 \r
92 image_transform& image_transform::operator*=(const image_transform &other)\r
93 {\r
94         opacity_ *= other.opacity_;\r
95         mode_ = other.mode_;\r
96         gain_ *= other.gain_;\r
97         fill_translation_[0] += other.fill_translation_[0]*fill_scale_[0];\r
98         fill_translation_[1] += other.fill_translation_[1]*fill_scale_[1];\r
99         fill_scale_[0] *= other.fill_scale_[0];\r
100         fill_scale_[1] *= other.fill_scale_[1];\r
101         key_translation_[0] += other.key_translation_[0]*key_scale_[0];\r
102         key_translation_[1] += other.key_translation_[1]*key_scale_[1];\r
103         key_scale_[0] *= other.key_scale_[0];\r
104         key_scale_[1] *= other.key_scale_[1];\r
105         return *this;\r
106 }\r
107 \r
108 const image_transform image_transform::operator*(const image_transform &other) const\r
109 {\r
110         return image_transform(*this) *= other;\r
111 }\r
112 \r
113 }}