Color Management, Stage 2: Switch color pipeline to use OpenColorIO
[blender.git] / source / blender / imbuf / intern / tiff.c
index ac5f5da8a67243d500dbe6f8694624b31ca3e28f..932a4941a0a749aa711334a23fcc6158c5c04c75 100644 (file)
@@ -57,6 +57,9 @@
 #include "IMB_filetype.h"
 #include "IMB_filter.h"
 
+#include "IMB_colormanagement.h"
+#include "IMB_colormanagement_intern.h"
+
 #include "tiffio.h"
 
 #ifdef WIN32
@@ -464,8 +467,6 @@ static int imb_read_tiff_pixels(ImBuf *ibuf, TIFF *image, int premul)
                _TIFFfree(sbuf);
 
        if (success) {
-               ibuf->profile = (bitspersample == 32) ? IB_PROFILE_LINEAR_RGB : IB_PROFILE_SRGB;
-
                /* Code seems to be not needed for 16 bits tif, on PPC G5 OSX (ton) */
                if (bitspersample < 16)
                        if (ENDIAN_ORDER == B_ENDIAN)
@@ -508,7 +509,7 @@ void imb_inittiff(void)
  *
  * \return: A newly allocated ImBuf structure if successful, otherwise NULL.
  */
-ImBuf *imb_loadtiff(unsigned char *mem, size_t size, int flags)
+ImBuf *imb_loadtiff(unsigned char *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE])
 {
        TIFF *image = NULL;
        ImBuf *ibuf = NULL, *hbuf;
@@ -527,6 +528,9 @@ ImBuf *imb_loadtiff(unsigned char *mem, size_t size, int flags)
        if (imb_is_a_tiff(mem) == 0)
                return NULL;
 
+       /* both 8 and 16 bit PNGs are default to standard byte colorspace */
+       colorspace_set_default_role(colorspace, IM_MAX_SPACE, COLOR_ROLE_DEFAULT_BYTE);
+
        image = imb_tiff_client_open(&memFile, mem, size);
 
        if (image == NULL) {
@@ -786,10 +790,7 @@ int imb_savetiff(ImBuf *ibuf, const char *name, int flags)
                                /* convert from float source */
                                float rgb[4];
                                
-                               if (ibuf->profile == IB_PROFILE_LINEAR_RGB)
-                                       linearrgb_to_srgb_v3_v3(rgb, &fromf[from_i]);
-                               else
-                                       copy_v3_v3(rgb, &fromf[from_i]);
+                               linearrgb_to_srgb_v3_v3(rgb, &fromf[from_i]);
 
                                rgb[3] = fromf[from_i + 3];