synfig-core  1.0.3
common.h
Go to the documentation of this file.
1 /* === S Y N F I G ========================================================= */
24 /* ========================================================================= */
25 
26 /* === S T A R T =========================================================== */
27 
28 #ifndef __SYNFIG_COLOR_COMMON_H
29 #define __SYNFIG_COLOR_COMMON_H
30 
31 /* === H E A D E R S ======================================================= */
32 
33 #include <cmath>
34 #include <stdint.h>
35 #include <synfig/gamma.h>
36 #include <synfig/string.h>
37 #include <synfig/angle.h>
38 
39 #ifdef USE_HALF_TYPE
40 #include <OpenEXR/half.h>
41 #endif
42 
43 /* === M A C R O S ========================================================= */
44 
45 #define use_colorspace_gamma() App::use_colorspace_gamma
46 #define colorspace_gamma() (2.2f)
47 #define gamma_in(x) ((x>=0) ? pow((float)x,1.0f/colorspace_gamma()) : -pow((float)-x,1.0f/colorspace_gamma()))
48 #define gamma_out(x) ((x>=0) ? pow((float)x, colorspace_gamma()) : -pow((float)-x, colorspace_gamma()))
49 
50 // For some reason isnan() isn't working on macosx any more.
51 // This is a quick fix.
52 #if defined(__APPLE__) && !defined(SYNFIG_ISNAN_FIX)
53  #ifdef isnan
54  #undef isnan
55  #endif
56  inline bool isnan(double x) { return x != x; }
57  inline bool isnan(float x) { return x != x; }
58  #define SYNFIG_ISNAN_FIX 1
59 #else
60  #ifndef isnan
61  #define isnan(x) (std::isnan)(x)
62  #endif
63 #endif
64 
65 namespace synfig {
66 
67 #ifdef USE_HALF_TYPE
68 typedef half ColorReal;
69 #else
70 typedef float ColorReal;
71 #endif
72 
73 static const float EncodeYUV[3][3]=
74 {
75  { 0.299f, 0.587f, 0.114f },
76  { -0.168736f, -0.331264f, 0.5f },
77  { 0.5f, -0.418688f, -0.081312f }
78 };
79 
80 static const float DecodeYUV[3][3]=
81 {
82  { 1.0f, 0.0f, 1.402f },
83  { 1.0f, -0.344136f, -0.714136f },
84  { 1.0f, 1.772f, 0.0f }
85 };
86 
87 
88 } // synfig namespace
89 
90 #endif // __SYNFIG_COLOR_COMMON_H
91