Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2011-12-28 17:29:33 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2011-12-28 17:29:33 +0400
commitb9ff5840a617ec836f2d09bb0f04d60e5c3b8f67 (patch)
tree8a196777f4ee32e3ee089c12b667caa2c82dec75 /source/blender/blenlib/intern
parent1f02209957fc8afde957b48f1be41fc399a725b0 (diff)
Code refactoring: add unified image buffer functions for doing float => byte,
byte => float, float => float, byte => byte conversions with profile, dither and predivide. Previously code for this was spread out too much. There should be no functional changes, this is so the predivide/table/dither patches can work correctly.
Diffstat (limited to 'source/blender/blenlib/intern')
-rw-r--r--source/blender/blenlib/intern/math_color.c51
-rw-r--r--source/blender/blenlib/intern/math_color_inline.c109
2 files changed, 109 insertions, 51 deletions
diff --git a/source/blender/blenlib/intern/math_color.c b/source/blender/blenlib/intern/math_color.c
index 2ef29c1ce94..8f5366b6317 100644
--- a/source/blender/blenlib/intern/math_color.c
+++ b/source/blender/blenlib/intern/math_color.c
@@ -393,57 +393,6 @@ float linearrgb_to_srgb(float c)
return 1.055f * powf(c, 1.0f/2.4f) - 0.055f;
}
-void srgb_to_linearrgb_v3_v3(float *col_to, float *col_from)
-{
- col_to[0] = srgb_to_linearrgb(col_from[0]);
- col_to[1] = srgb_to_linearrgb(col_from[1]);
- col_to[2] = srgb_to_linearrgb(col_from[2]);
-}
-
-void linearrgb_to_srgb_v3_v3(float *col_to, float *col_from)
-{
- col_to[0] = linearrgb_to_srgb(col_from[0]);
- col_to[1] = linearrgb_to_srgb(col_from[1]);
- col_to[2] = linearrgb_to_srgb(col_from[2]);
-}
-
-/* todo, should these be moved elsewhere?, they dont belong in imbuf */
-void srgb_to_linearrgb_rgba_buf(float *col, int tot)
-{
- while(tot--) {
- srgb_to_linearrgb_v3_v3(col, col);
- col += 4;
- }
-}
-
-void linearrgb_to_srgb_rgba_buf(float *col, int tot)
-{
- while(tot--) {
- linearrgb_to_srgb_v3_v3(col, col);
- col += 4;
- }
-}
-
-void srgb_to_linearrgb_rgba_rgba_buf(float *col_to, float *col_from, int tot)
-{
- while(tot--) {
- srgb_to_linearrgb_v3_v3(col_to, col_from);
- col_to[3]= col_from[3];
- col_to += 4;
- col_from += 4;
- }
-}
-
-void linearrgb_to_srgb_rgba_rgba_buf(float *col_to, float *col_from, int tot)
-{
- while(tot--) {
- linearrgb_to_srgb_v3_v3(col_to, col_from);
- col_to[3]= col_from[3];
- col_to += 4;
- col_from += 4;
- }
-}
-
void minmax_rgb(short c[])
{
if(c[0]>255) c[0]=255;
diff --git a/source/blender/blenlib/intern/math_color_inline.c b/source/blender/blenlib/intern/math_color_inline.c
new file mode 100644
index 00000000000..aaaa065f14d
--- /dev/null
+++ b/source/blender/blenlib/intern/math_color_inline.c
@@ -0,0 +1,109 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: some of this file.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ * */
+
+/** \file blender/blenlib/intern/math_color_inline.c
+ * \ingroup bli
+ */
+
+
+#include "BLI_math_color.h"
+#include "BLI_utildefines.h"
+
+#ifndef BLI_MATH_COLOR_INLINE_H
+#define BLI_MATH_COLOR_INLINE_H
+
+/******************************** Color Space ********************************/
+
+MINLINE void srgb_to_linearrgb_v3_v3(float linear[3], const float srgb[3])
+{
+ linear[0] = srgb_to_linearrgb(srgb[0]);
+ linear[1] = srgb_to_linearrgb(srgb[1]);
+ linear[2] = srgb_to_linearrgb(srgb[2]);
+}
+
+MINLINE void linearrgb_to_srgb_v3_v3(float srgb[3], const float linear[3])
+{
+ srgb[0] = linearrgb_to_srgb(linear[0]);
+ srgb[1] = linearrgb_to_srgb(linear[1]);
+ srgb[2] = linearrgb_to_srgb(linear[2]);
+}
+
+MINLINE void srgb_to_linearrgb_v4(float linear[4], const float srgb[4])
+{
+ srgb_to_linearrgb_v3_v3(linear, srgb);
+ linear[3] = srgb[3];
+}
+
+MINLINE void linearrgb_to_srgb_v4(float srgb[4], const float linear[4])
+{
+ linearrgb_to_srgb_v3_v3(srgb, linear);
+ srgb[3] = linear[3];
+}
+
+/* predivide versions to work on associated/premultipled alpha. if this should
+ be done or not depends on the background the image will be composited over,
+ ideally you would never do color space conversion on an image with alpha
+ because it is ill defined */
+
+MINLINE void srgb_to_linearrgb_predivide_v4(float linear[4], const float srgb[4])
+{
+ float alpha, inv_alpha;
+
+ if(srgb[3] == 1.0f || srgb[3] == 0.0f) {
+ alpha = 1.0f;
+ inv_alpha = 1.0f;
+ }
+ else {
+ alpha = srgb[3];
+ inv_alpha = 1.0f/alpha;
+ }
+
+ linear[0] = srgb_to_linearrgb(srgb[0] * inv_alpha) * alpha;
+ linear[1] = srgb_to_linearrgb(srgb[1] * inv_alpha) * alpha;
+ linear[2] = srgb_to_linearrgb(srgb[2] * inv_alpha) * alpha;
+ linear[3] = srgb[3];
+}
+
+MINLINE void linearrgb_to_srgb_predivide_v4(float srgb[4], const float linear[4])
+{
+ float alpha, inv_alpha;
+
+ if(linear[3] == 1.0f || linear[3] == 0.0f) {
+ alpha = 1.0f;
+ inv_alpha = 1.0f;
+ }
+ else {
+ alpha = linear[3];
+ inv_alpha = 1.0f/alpha;
+ }
+
+ srgb[0] = linearrgb_to_srgb(linear[0] * inv_alpha) * alpha;
+ srgb[1] = linearrgb_to_srgb(linear[1] * inv_alpha) * alpha;
+ srgb[2] = linearrgb_to_srgb(linear[2] * inv_alpha) * alpha;
+ srgb[3] = linear[3];
+}
+
+#endif /* BLI_MATH_COLOR_INLINE_H */
+