Revision: 51340
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51340
Author:   nazgul
Date:     2012-10-15 11:16:54 +0000 (Mon, 15 Oct 2012)
Log Message:
-----------
Fix #32858: Image appears too dark in Image Editor

No need to linearize byte buffer when converting to display space which is data 
space.

Modified Paths:
--------------
    trunk/blender/source/blender/imbuf/intern/colormanagement.c

Modified: trunk/blender/source/blender/imbuf/intern/colormanagement.c
===================================================================
--- trunk/blender/source/blender/imbuf/intern/colormanagement.c 2012-10-15 
10:43:10 UTC (rev 51339)
+++ trunk/blender/source/blender/imbuf/intern/colormanagement.c 2012-10-15 
11:16:54 UTC (rev 51340)
@@ -99,6 +99,7 @@
 typedef struct ColormanageProcessor {
        OCIO_ConstProcessorRcPtr *processor;
        CurveMapping *curve_mapping;
+       int is_data_result;
 } ColormanageProcessor;
 
 /*********************** Color managed cache *************************/
@@ -1207,6 +1208,7 @@
 
        int predivide = handle->predivide;
        int is_data = handle->is_data;
+       int is_data_display = handle->cm_processor->is_data_result;
 
        linear_buffer = MEM_callocN(buffer_size * sizeof(float), "color 
conversion linear buffer");
 
@@ -1228,7 +1230,7 @@
                        *fp = (float)(*cp) / 255.0f;
                }
 
-               if (!is_data) {
+               if (!is_data && !is_data_display) {
                        /* convert float buffer to scene linear space */
                        IMB_colormanagement_transform(linear_buffer, width, 
height, channels,
                                                      from_colorspace, 
to_colorspace, predivide);
@@ -2347,7 +2349,6 @@
                        }
                        else if (byte_buffer) {
                                rgba_uchar_to_float(pixel, byte_buffer + 
linear_index);
-
                                
IMB_colormanagement_colorspace_to_scene_linear_v3(pixel, rect_colorspace);
                        }
 
@@ -2449,28 +2450,29 @@
                                                                 const 
ColorManagedDisplaySettings *display_settings)
 {
        ColormanageProcessor *cm_processor;
+       ColorManagedViewSettings default_view_settings;
+       const ColorManagedViewSettings *applied_view_settings;
+       ColorSpace *display_space;
 
        cm_processor = MEM_callocN(sizeof(ColormanageProcessor), 
"colormanagement processor");
 
-       {
-               ColorManagedViewSettings default_view_settings;
-               const ColorManagedViewSettings *applied_view_settings;
+       if (view_settings) {
+               applied_view_settings = view_settings;
+       }
+       else {
+               init_default_view_settings(display_settings,  
&default_view_settings);
+               applied_view_settings = &default_view_settings;
+       }
 
-               if (view_settings) {
-                       applied_view_settings = view_settings;
-               }
-               else {
-                       init_default_view_settings(display_settings,  
&default_view_settings);
-                       applied_view_settings = &default_view_settings;
-               }
+       display_space =  
display_transform_get_colorspace(applied_view_settings, display_settings);
+       cm_processor->is_data_result = display_space->is_data;
 
-               cm_processor->processor = 
create_display_buffer_processor(applied_view_settings->view_transform, 
display_settings->display_device,
-                                                                         
applied_view_settings->exposure, applied_view_settings->gamma);
+       cm_processor->processor = 
create_display_buffer_processor(applied_view_settings->view_transform, 
display_settings->display_device,
+                                                                 
applied_view_settings->exposure, applied_view_settings->gamma);
 
-               if (applied_view_settings->flag & COLORMANAGE_VIEW_USE_CURVES) {
-                       cm_processor->curve_mapping = 
curvemapping_copy(applied_view_settings->curve_mapping);
-                       curvemapping_premultiply(cm_processor->curve_mapping, 
FALSE);
-               }
+       if (applied_view_settings->flag & COLORMANAGE_VIEW_USE_CURVES) {
+               cm_processor->curve_mapping = 
curvemapping_copy(applied_view_settings->curve_mapping);
+               curvemapping_premultiply(cm_processor->curve_mapping, FALSE);
        }
 
        return cm_processor;
@@ -2479,9 +2481,13 @@
 ColormanageProcessor *IMB_colormanagement_colorspace_processor_new(const char 
*from_colorspace, const char *to_colorspace)
 {
        ColormanageProcessor *cm_processor;
+       ColorSpace *color_space;
 
        cm_processor = MEM_callocN(sizeof(ColormanageProcessor), 
"colormanagement processor");
 
+       color_space = colormanage_colorspace_get_named(to_colorspace);
+       cm_processor->is_data_result = color_space->is_data;
+
        cm_processor->processor = 
create_colorspace_transform_processor(from_colorspace, to_colorspace);
 
        return cm_processor;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to