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
path: root/source
diff options
context:
space:
mode:
authorDalai Felinto <dfelinto@gmail.com>2014-04-30 00:06:21 +0400
committerDalai Felinto <dfelinto@gmail.com>2014-04-30 00:06:21 +0400
commit3ff708a3f235e2bbb1faec309d5d92ca0ba01913 (patch)
treeb395f9dc72c4f476996903581e4c50b1f71ed624 /source
parent48419244a219fd0a10eea052de988fdfc6119177 (diff)
IMB buffer _mask functions shouldn't convert colorspaces (ammend to
68893054)
Diffstat (limited to 'source')
-rw-r--r--source/blender/imbuf/IMB_imbuf.h5
-rw-r--r--source/blender/imbuf/intern/divers.c229
2 files changed, 36 insertions, 198 deletions
diff --git a/source/blender/imbuf/IMB_imbuf.h b/source/blender/imbuf/IMB_imbuf.h
index f446f2574e3..f3d08634741 100644
--- a/source/blender/imbuf/IMB_imbuf.h
+++ b/source/blender/imbuf/IMB_imbuf.h
@@ -389,7 +389,7 @@ void IMB_buffer_byte_from_float(unsigned char *rect_to, const float *rect_from,
int channels_from, float dither, int profile_to, int profile_from, bool predivide,
int width, int height, int stride_to, int stride_from);
void IMB_buffer_byte_from_float_mask(unsigned char *rect_to, const float *rect_from,
- int channels_from, float dither, int profile_to, int profile_from, bool predivide,
+ int channels_from, float dither, bool predivide,
int width, int height, int stride_to, int stride_from, char *mask);
void IMB_buffer_float_from_byte(float *rect_to, const unsigned char *rect_from,
int profile_to, int profile_from, bool predivide,
@@ -398,8 +398,7 @@ void IMB_buffer_float_from_float(float *rect_to, const float *rect_from,
int channels_from, int profile_to, int profile_from, bool predivide,
int width, int height, int stride_to, int stride_from);
void IMB_buffer_float_from_float_mask(float *rect_to, const float *rect_from,
- int channels_from, int profile_to, int profile_from, bool predivide,
- int width, int height, int stride_to, int stride_from, char *mask);
+ int channels_from, int width, int height, int stride_to, int stride_from, char *mask);
void IMB_buffer_byte_from_byte(unsigned char *rect_to, const unsigned char *rect_from,
int profile_to, int profile_from, bool predivide,
int width, int height, int stride_to, int stride_from);
diff --git a/source/blender/imbuf/intern/divers.c b/source/blender/imbuf/intern/divers.c
index 9a13f4e0c27..bcbb7865e51 100644
--- a/source/blender/imbuf/intern/divers.c
+++ b/source/blender/imbuf/intern/divers.c
@@ -330,19 +330,14 @@ void IMB_buffer_byte_from_float(uchar *rect_to, const float *rect_from,
/* float to byte pixels, output 4-channel RGBA */
void IMB_buffer_byte_from_float_mask(uchar *rect_to, const float *rect_from,
- int channels_from, float dither, int profile_to, int profile_from, bool predivide,
+ int channels_from, float dither, bool predivide,
int width, int height, int stride_to, int stride_from, char *mask)
{
- float tmp[4];
int x, y;
DitherContext *di = NULL;
float inv_width = 1.0f / width,
inv_height = 1.0f / height;
- /* we need valid profiles */
- BLI_assert(profile_to != IB_PROFILE_NONE);
- BLI_assert(profile_from != IB_PROFILE_NONE);
-
if (dither)
di = create_dither_context(dither);
@@ -363,33 +358,10 @@ void IMB_buffer_byte_from_float_mask(uchar *rect_to, const float *rect_from,
const float *from = rect_from + stride_from * y * 3;
uchar *to = rect_to + stride_to * y * 4;
- if (profile_to == profile_from) {
- /* no color space conversion */
- for (x = 0; x < width; x++, from += 3, to += 4) {
- if (*mask++ == FILTER_MASK_USED) {
- rgb_float_to_uchar(to, from);
- to[3] = 255;
- }
- }
- }
- else if (profile_to == IB_PROFILE_SRGB) {
- /* convert from linear to sRGB */
- for (x = 0; x < width; x++, from += 3, to += 4) {
- if (*mask++ == FILTER_MASK_USED) {
- linearrgb_to_srgb_v3_v3(tmp, from);
- rgb_float_to_uchar(to, tmp);
- to[3] = 255;
- }
- }
- }
- else if (profile_to == IB_PROFILE_LINEAR_RGB) {
- /* convert from sRGB to linear */
- for (x = 0; x < width; x++, from += 3, to += 4) {
- if (*mask++ == FILTER_MASK_USED) {
- srgb_to_linearrgb_v3_v3(tmp, from);
- rgb_float_to_uchar(to, tmp);
- to[3] = 255;
- }
+ for (x = 0; x < width; x++, from += 3, to += 4) {
+ if (*mask++ == FILTER_MASK_USED) {
+ rgb_float_to_uchar(to, from);
+ to[3] = 255;
}
}
}
@@ -398,112 +370,34 @@ void IMB_buffer_byte_from_float_mask(uchar *rect_to, const float *rect_from,
const float *from = rect_from + stride_from * y * 4;
uchar *to = rect_to + stride_to * y * 4;
- if (profile_to == profile_from) {
- float straight[4];
+ float straight[4];
- /* no color space conversion */
- if (dither && predivide) {
- for (x = 0; x < width; x++, from += 4, to += 4) {
- if (*mask++ == FILTER_MASK_USED) {
- premul_to_straight_v4_v4(straight, from);
- float_to_byte_dither_v4(to, straight, di, (float) x * inv_width, t);
- }
- }
- }
- else if (dither) {
- for (x = 0; x < width; x++, from += 4, to += 4)
- if (*mask++ == FILTER_MASK_USED)
- float_to_byte_dither_v4(to, from, di, (float) x * inv_width, t);
- }
- else if (predivide) {
- for (x = 0; x < width; x++, from += 4, to += 4) {
- if (*mask++ == FILTER_MASK_USED) {
- premul_to_straight_v4_v4(straight, from);
- rgba_float_to_uchar(to, straight);
- }
+ if (dither && predivide) {
+ for (x = 0; x < width; x++, from += 4, to += 4) {
+ if (*mask++ == FILTER_MASK_USED) {
+ premul_to_straight_v4_v4(straight, from);
+ float_to_byte_dither_v4(to, straight, di, (float) x * inv_width, t);
}
}
- else {
- for (x = 0; x < width; x++, from += 4, to += 4)
- if (*mask++ == FILTER_MASK_USED)
- rgba_float_to_uchar(to, from);
- }
}
- else if (profile_to == IB_PROFILE_SRGB) {
- /* convert from linear to sRGB */
- unsigned short us[4];
- float straight[4];
-
- if (dither && predivide) {
- for (x = 0; x < width; x++, from += 4, to += 4) {
- if (*mask++ == FILTER_MASK_USED) {
- premul_to_straight_v4_v4(straight, from);
- linearrgb_to_srgb_ushort4(us, from);
- ushort_to_byte_dither_v4(to, us, di, (float) x * inv_width, t);
- }
- }
- }
- else if (dither) {
- for (x = 0; x < width; x++, from += 4, to += 4) {
- if (*mask++ == FILTER_MASK_USED) {
- linearrgb_to_srgb_ushort4(us, from);
- ushort_to_byte_dither_v4(to, us, di, (float) x * inv_width, t);
- }
- }
- }
- else if (predivide) {
- for (x = 0; x < width; x++, from += 4, to += 4) {
- if (*mask++ == FILTER_MASK_USED) {
- premul_to_straight_v4_v4(straight, from);
- linearrgb_to_srgb_ushort4(us, from);
- ushort_to_byte_v4(to, us);
- }
- }
- }
- else {
- for (x = 0; x < width; x++, from += 4, to += 4) {
- if (*mask++ == FILTER_MASK_USED) {
- linearrgb_to_srgb_ushort4(us, from);
- ushort_to_byte_v4(to, us);
- }
- }
- }
+ else if (dither) {
+ for (x = 0; x < width; x++, from += 4, to += 4)
+ if (*mask++ == FILTER_MASK_USED)
+ float_to_byte_dither_v4(to, from, di, (float) x * inv_width, t);
}
- else if (profile_to == IB_PROFILE_LINEAR_RGB) {
- /* convert from sRGB to linear */
- if (dither && predivide) {
- for (x = 0; x < width; x++, from += 4, to += 4) {
- if (*mask++ == FILTER_MASK_USED) {
- srgb_to_linearrgb_predivide_v4(tmp, from);
- float_to_byte_dither_v4(to, tmp, di, (float) x * inv_width, t);
- }
- }
- }
- else if (dither) {
- for (x = 0; x < width; x++, from += 4, to += 4) {
- if (*mask++ == FILTER_MASK_USED) {
- srgb_to_linearrgb_v4(tmp, from);
- float_to_byte_dither_v4(to, tmp, di, (float) x * inv_width, t);
- }
- }
- }
- else if (predivide) {
- for (x = 0; x < width; x++, from += 4, to += 4) {
- if (*mask++ == FILTER_MASK_USED) {
- srgb_to_linearrgb_predivide_v4(tmp, from);
- rgba_float_to_uchar(to, tmp);
- }
- }
- }
- else {
- for (x = 0; x < width; x++, from += 4, to += 4) {
- if (*mask++ == FILTER_MASK_USED) {
- srgb_to_linearrgb_v4(tmp, from);
- rgba_float_to_uchar(to, tmp);
- }
+ else if (predivide) {
+ for (x = 0; x < width; x++, from += 4, to += 4) {
+ if (*mask++ == FILTER_MASK_USED) {
+ premul_to_straight_v4_v4(straight, from);
+ rgba_float_to_uchar(to, straight);
}
}
}
+ else {
+ for (x = 0; x < width; x++, from += 4, to += 4)
+ if (*mask++ == FILTER_MASK_USED)
+ rgba_float_to_uchar(to, from);
+ }
}
}
@@ -651,16 +545,11 @@ void IMB_buffer_float_from_float(float *rect_to, const float *rect_from,
}
/* float to float pixels, output 4-channel RGBA */
-void IMB_buffer_float_from_float_mask(float *rect_to, const float *rect_from,
- int channels_from, int profile_to, int profile_from, bool predivide,
- int width, int height, int stride_to, int stride_from, char *mask)
+void IMB_buffer_float_from_float_mask(float *rect_to, const float *rect_from, int channels_from,
+ int width, int height, int stride_to, int stride_from, char *mask)
{
int x, y;
- /* we need valid profiles */
- BLI_assert(profile_to != IB_PROFILE_NONE);
- BLI_assert(profile_from != IB_PROFILE_NONE);
-
if (channels_from == 1) {
/* single channel input */
for (y = 0; y < height; y++) {
@@ -678,31 +567,10 @@ void IMB_buffer_float_from_float_mask(float *rect_to, const float *rect_from,
const float *from = rect_from + stride_from * y * 3;
float *to = rect_to + stride_to * y * 4;
- if (profile_to == profile_from) {
- /* no color space conversion */
- for (x = 0; x < width; x++, from += 3, to += 4) {
- if (*mask++ == FILTER_MASK_USED) {
- copy_v3_v3(to, from);
- to[3] = 1.0f;
- }
- }
- }
- else if (profile_to == IB_PROFILE_LINEAR_RGB) {
- /* convert from sRGB to linear */
- for (x = 0; x < width; x++, from += 3, to += 4) {
- if (*mask++ == FILTER_MASK_USED) {
- srgb_to_linearrgb_v3_v3(to, from);
- to[3] = 1.0f;
- }
- }
- }
- else if (profile_to == IB_PROFILE_SRGB) {
- /* convert from linear to sRGB */
- for (x = 0; x < width; x++, from += 3, to += 4) {
- if (*mask++ == FILTER_MASK_USED) {
- linearrgb_to_srgb_v3_v3(to, from);
- to[3] = 1.0f;
- }
+ for (x = 0; x < width; x++, from += 3, to += 4) {
+ if (*mask++ == FILTER_MASK_USED) {
+ copy_v3_v3(to, from);
+ to[3] = 1.0f;
}
}
}
@@ -713,38 +581,9 @@ void IMB_buffer_float_from_float_mask(float *rect_to, const float *rect_from,
const float *from = rect_from + stride_from * y * 4;
float *to = rect_to + stride_to * y * 4;
- if (profile_to == profile_from) {
- /* same profile, copy */
- for (x = 0; x < width; x++, from += 4, to += 4)
- if (*mask++ == FILTER_MASK_USED)
- copy_v4_v4(to, from);
- }
- else if (profile_to == IB_PROFILE_LINEAR_RGB) {
- /* convert to sRGB to linear */
- if (predivide) {
- for (x = 0; x < width; x++, from += 4, to += 4)
- if (*mask++ == FILTER_MASK_USED)
- srgb_to_linearrgb_predivide_v4(to, from);
- }
- else {
- for (x = 0; x < width; x++, from += 4, to += 4)
- if (*mask++ == FILTER_MASK_USED)
- srgb_to_linearrgb_v4(to, from);
- }
- }
- else if (profile_to == IB_PROFILE_SRGB) {
- /* convert from linear to sRGB */
- if (predivide) {
- for (x = 0; x < width; x++, from += 4, to += 4)
- if (*mask++ == FILTER_MASK_USED)
- linearrgb_to_srgb_predivide_v4(to, from);
- }
- else {
- for (x = 0; x < width; x++, from += 4, to += 4)
- if (*mask++ == FILTER_MASK_USED)
- linearrgb_to_srgb_v4(to, from);
- }
- }
+ for (x = 0; x < width; x++, from += 4, to += 4)
+ if (*mask++ == FILTER_MASK_USED)
+ copy_v4_v4(to, from);
}
}
}