]> git.sesse.net Git - casparcg/blob - server/utils/image/Image.hpp
d9a36b42f5af32406c77fa5b0b487a0f42bfbcbf
[casparcg] / server / utils / image / Image.hpp
1 /*\r
2 * copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\r
3 *\r
4 *  This file is part of CasparCG.\r
5 *\r
6 *    CasparCG is free software: you can redistribute it and/or modify\r
7 *    it under the terms of the GNU General Public License as published by\r
8 *    the Free Software Foundation, either version 3 of the License, or\r
9 *    (at your option) any later version.\r
10 *\r
11 *    CasparCG is distributed in the hope that it will be useful,\r
12 *    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
13 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
14 *    GNU General Public License for more details.\r
15 \r
16 *    You should have received a copy of the GNU General Public License\r
17 *    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
18 *\r
19 */\r
20  \r
21 #ifndef _IMAGE_H_\r
22 #define _IMAGE_H_\r
23 \r
24 #include "../Types.hpp"\r
25 #include "../CPUID.hpp"\r
26 \r
27 namespace caspar{\r
28 \r
29 class TransitionInfo;\r
30 \r
31 namespace utils{\r
32 namespace image{        \r
33         \r
34 /*\r
35    Function: SetVersion\r
36 \r
37    Sets appropriate function pointers for image library functions depending on SIMD version.\r
38 \r
39    Modified: 2009/4/14 (R.N)\r
40 \r
41    Parameters:\r
42 \r
43       simd      - SIMD version to use\r
44 \r
45    Author: Robert Nagy, R.N (SVT 2009)\r
46                 \r
47 */\r
48 void SetVersion(SIMD simd = AUTO);\r
49 \r
50 /*\r
51    Function: Shuffle\r
52 \r
53    Shuffles 8 byte channels in image\r
54 \r
55    Modified: 2009/4/15 (R.N)\r
56 \r
57    Parameters:\r
58 \r
59       source1   - Image source\r
60           dest          - Image destination\r
61           size          - Size of image in bytes\r
62           mask0         - index of first channel\r
63           mask1         - index of second channel\r
64           mask2         - index of third channel\r
65           mask3         - index of fourth channel\r
66 \r
67    Author: Robert Nagy, R.N (SVT 2009)\r
68                 \r
69    See: Shuffle.hpp     \r
70 */\r
71 void Shuffle(void* dest, const void* source, size_t size, const u8 red, const u8 green, const u8 blue, const u8 alpha);\r
72 \r
73 /*\r
74    Function: PreOver\r
75 \r
76    Blends two images with premultiplied alpha.\r
77    Result is put into dest as an image with premultiplied alpha.\r
78 \r
79    Modified: 2009/4/12 (R.N)\r
80 \r
81    Parameters:\r
82 \r
83       source1   - Image above\r
84       source2   - Image beneath\r
85           dest          - Image destination\r
86           size          - Size of image in bytes\r
87 \r
88    Author: Robert Nagy, R.N (SVT 2009)\r
89 \r
90    See: Over.hpp\r
91                 \r
92 */\r
93 void PreOver(void* dest, const void* source1, const void* source2, size_t size);\r
94 \r
95 /*\r
96    Function: Lerp\r
97 \r
98    Blends two images based on alpha value;\r
99    Result is put into dest as an image with premultiplied alpha.\r
100 \r
101    Modified: 2009/4/12 (R.N)\r
102                          2009/4/20 (R.N)        \r
103 \r
104    Parameters:\r
105 \r
106       source1   - Image above\r
107       source2   - Image beneath\r
108           dest          - Image destination\r
109           size          - Size of image in bytes\r
110 \r
111    Author: Robert Nagy, R.N (SVT 2009)\r
112 \r
113    See: Lerp.hpp                \r
114 */\r
115 void Lerp(void* dest, const void* source1, const void* source2, float alpha, size_t size);\r
116 \r
117 /*\r
118    Function: Premultiply\r
119 \r
120    Premultiplies color with alpha.\r
121 \r
122    Modified: 2009/4/20 (R.N)\r
123 \r
124    Parameters:\r
125 \r
126       source1   - Image\r
127           dest          - Image destination\r
128           size          - Size of image in bytes\r
129 \r
130    Author: Robert Nagy, R.N (SVT 2009)\r
131 \r
132    See: Premultiply.hpp         \r
133 */\r
134 void Premultiply(void* dest, const void* source, size_t size);\r
135 \r
136 void Copy(void* dest, const void* source, size_t size);\r
137 \r
138 void Clear(void* dest, size_t size);\r
139 \r
140 void CopyField(unsigned char* pDest, unsigned char* pSrc, size_t fieldIndex, size_t width, size_t height);\r
141 \r
142 //void Transition(void* dest, const void* source1, const void* source2, int currentFrame, size_t width, size_t height, const TransitionInfo& transitionInfo);\r
143 \r
144 //void Wipe(void* dest, const void* source1, const void* source2, u32 offset, u32 halfStep, Direction dir, size_t width, size_t height, size_t borderWidth, const void* border = NULL, u32 borderColor = 0);\r
145 \r
146 namespace detail\r
147 {\r
148         typedef void(*PreOverFun)               (void*, const void*, const void*, size_t);\r
149         typedef void(*ShuffleFun)               (void*, const void*, size_t, const u8, const u8, const u8, const u8);\r
150         typedef void(*LerpFun)                  (void*, const void*, const void*, float, size_t);\r
151         typedef void(*PremultiplyFun)   (void*, const void*, size_t);\r
152         typedef void(*CopyFun)                  (void*, const void*, size_t);\r
153         typedef void(*CopyFieldFun)             (unsigned char* pDest, unsigned char* pSrc, size_t fieldIndex, size_t width, size_t height);\r
154         typedef void(*ClearFun)                 (void*, size_t);\r
155         //typedef void(*TransitionFun)(void*, const void*, const void*, int, size_t, size_t, const TransitionInfo&);\r
156 \r
157         extern ShuffleFun               Shuffle;\r
158         extern PreOverFun               PreOver;\r
159         extern LerpFun                  Lerp;\r
160         extern PremultiplyFun   Premultiply;\r
161         extern CopyFun                  Copy;\r
162         extern CopyFieldFun             CopyField;\r
163         extern ClearFun                 Clear;\r
164         //extern TransitionFun  Transition;\r
165 \r
166         extern const struct Initializer{Initializer(){SetVersion(AUTO);}} init;\r
167 }\r
168 \r
169 } // namespace image\r
170 } // namespace utils\r
171 } // namespace caspar\r
172 \r
173 #endif