Commit: 7ed8e9167d725cc36b0c017c630e8b226fa65b3b
Author: Sergey Sharybin
Date:   Thu Dec 6 12:21:37 2018 +0100
Branches: blender2.8
https://developer.blender.org/rB7ed8e9167d725cc36b0c017c630e8b226fa65b3b

Color management: Use default view with no extra transform when not specified

===================================================================

M       source/blender/blenkernel/BKE_colortools.h
M       source/blender/blenkernel/intern/colortools.c
M       source/blender/blenkernel/intern/image.c
M       source/blender/imbuf/IMB_colormanagement.h
M       source/blender/imbuf/intern/IMB_colormanagement_intern.h
M       source/blender/imbuf/intern/colormanagement.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_colortools.h 
b/source/blender/blenkernel/BKE_colortools.h
index d509bf5eb6c..aa3721d7a14 100644
--- a/source/blender/blenkernel/BKE_colortools.h
+++ b/source/blender/blenkernel/BKE_colortools.h
@@ -107,6 +107,12 @@ void BKE_color_managed_view_settings_init_render(
         struct ColorManagedViewSettings *settings,
         const struct ColorManagedDisplaySettings *display_settings);
 
+/* Initialize view settings which are best suitable for viewing non-render
+ * images. For example,s movie clips while tracking. */
+void BKE_color_managed_view_settings_init_default(
+        struct ColorManagedViewSettings *settings,
+        const struct ColorManagedDisplaySettings *display_settings);
+
 void BKE_color_managed_view_settings_copy(
         struct ColorManagedViewSettings *new_settings,
         const struct ColorManagedViewSettings *settings);
diff --git a/source/blender/blenkernel/intern/colortools.c 
b/source/blender/blenkernel/intern/colortools.c
index d86dddd4e39..554a5a63b1a 100644
--- a/source/blender/blenkernel/intern/colortools.c
+++ b/source/blender/blenkernel/intern/colortools.c
@@ -1588,6 +1588,14 @@ void BKE_color_managed_view_settings_init_render(
        view_settings->exposure = 0.0f;
 }
 
+void BKE_color_managed_view_settings_init_default(
+        struct ColorManagedViewSettings *view_settings,
+        const struct ColorManagedDisplaySettings *display_settings)
+{
+       IMB_colormanagement_init_default_view_settings(
+               view_settings, display_settings);
+}
+
 void BKE_color_managed_view_settings_copy(ColorManagedViewSettings 
*new_settings,
                                           const ColorManagedViewSettings 
*settings)
 {
diff --git a/source/blender/blenkernel/intern/image.c 
b/source/blender/blenkernel/intern/image.c
index e08ca35aca8..67dca475650 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -1402,8 +1402,8 @@ void BKE_imformat_defaults(ImageFormatData *im_format)
        im_format->compress = 15;
 
        BKE_color_managed_display_settings_init(&im_format->display_settings);
-       BKE_color_managed_view_settings_init_render(&im_format->view_settings,
-                                                   
&im_format->display_settings);
+       BKE_color_managed_view_settings_init_default(&im_format->view_settings,
+                                                    
&im_format->display_settings);
 }
 
 void BKE_imbuf_to_image_format(struct ImageFormatData *im_format, const ImBuf 
*imbuf)
diff --git a/source/blender/imbuf/IMB_colormanagement.h 
b/source/blender/imbuf/IMB_colormanagement.h
index 1a224639366..8c903af2420 100644
--- a/source/blender/imbuf/IMB_colormanagement.h
+++ b/source/blender/imbuf/IMB_colormanagement.h
@@ -222,6 +222,11 @@ bool 
IMB_colormanagement_setup_glsl_draw_from_space_ctx(const struct bContext *C
 /* Finish GLSL-based display space conversion */
 void IMB_colormanagement_finish_glsl_draw(void);
 
+/* ** View transform ** */
+void IMB_colormanagement_init_default_view_settings(
+        struct ColorManagedViewSettings *view_settings,
+        const struct ColorManagedDisplaySettings *display_settings);
+
 /* Roles */
 enum {
        COLOR_ROLE_SCENE_LINEAR = 0,
diff --git a/source/blender/imbuf/intern/IMB_colormanagement_intern.h 
b/source/blender/imbuf/intern/IMB_colormanagement_intern.h
index 0b4557e7bef..84e0bd6c599 100644
--- a/source/blender/imbuf/intern/IMB_colormanagement_intern.h
+++ b/source/blender/imbuf/intern/IMB_colormanagement_intern.h
@@ -103,6 +103,8 @@ struct ColorManagedView *colormanage_view_get_default(const 
ColorManagedDisplay
 struct ColorManagedView *colormanage_view_add(const char *name);
 struct ColorManagedView *colormanage_view_get_indexed(int index);
 struct ColorManagedView *colormanage_view_get_named(const char *name);
+struct ColorManagedView *colormanage_view_get_named_for_display(
+        const char *display_name, const char *name);
 
 struct ColorSpace *colormanage_colorspace_add(const char *name, const char 
*description, bool is_invertible, bool is_data);
 struct ColorSpace *colormanage_colorspace_get_named(const char *name);
diff --git a/source/blender/imbuf/intern/colormanagement.c 
b/source/blender/imbuf/intern/colormanagement.c
index f9c0f675447..5d0e59e1788 100644
--- a/source/blender/imbuf/intern/colormanagement.c
+++ b/source/blender/imbuf/intern/colormanagement.c
@@ -930,23 +930,33 @@ static OCIO_ConstProcessorRcPtr 
*display_to_scene_linear_processor(ColorManagedD
        return (OCIO_ConstProcessorRcPtr *) display->to_scene_linear;
 }
 
-static void init_render_view_settings(const ColorManagedDisplaySettings 
*display_settings,
-                                      ColorManagedViewSettings *view_settings)
-{
-       ColorManagedDisplay *display;
-       ColorManagedView *default_view = NULL;
-
-       display = 
colormanage_display_get_named(display_settings->display_device);
-
-       if (display)
-               default_view = colormanage_view_get_default(display);
-
-       if (default_view)
-               BLI_strncpy(view_settings->view_transform, default_view->name, 
sizeof(view_settings->view_transform));
-       else
+void IMB_colormanagement_init_default_view_settings(
+        ColorManagedViewSettings *view_settings,
+        const ColorManagedDisplaySettings *display_settings)
+{
+       /* First, try use "Default" view transform of the requested device. */
+       ColorManagedView *default_view = colormanage_view_get_named_for_display(
+               display_settings->display_device, "Default");
+       /* If that fails, we fall back to the default view transform of the 
display
+        * as per OCIO configuration. */
+       if (default_view == NULL) {
+               ColorManagedDisplay *display = colormanage_display_get_named(
+                       display_settings->display_device);
+               if (display != NULL) {
+                       default_view = colormanage_view_get_default(display);
+               }
+       }
+       if (default_view != NULL) {
+               BLI_strncpy(view_settings->view_transform,
+                           default_view->name,
+                           sizeof(view_settings->view_transform));
+       }
+       else {
                view_settings->view_transform[0] = '\0';
-
+       }
+       /* TODO(sergey): Find a way to safely/reliable un-hardcode this. */
        BLI_strncpy(view_settings->look, "None", sizeof(view_settings->look));
+       /* Initialize rest of the settings. */
        view_settings->flag = 0;
        view_settings->gamma = 1.0f;
        view_settings->exposure = 0.0f;
@@ -2138,11 +2148,10 @@ unsigned char *IMB_display_buffer_acquire(ImBuf *ibuf, 
const ColorManagedViewSet
                applied_view_settings = view_settings;
        }
        else {
-               /* if no view settings were specified, use default display 
transformation
-                * this happens for images which don't want to be displayed 
with render settings
-                */
-
-               init_render_view_settings(display_settings,  
&default_view_settings);
+               /* If no view settings were specified, use default ones, which 
will
+                * attempt not to do any extra color correction. */
+               IMB_colormanagement_init_default_view_settings(
+                       &default_view_settings, display_settings);
                applied_view_settings = &default_view_settings;
        }
 
@@ -2427,6 +2436,22 @@ ColorManagedView *colormanage_view_get_indexed(int index)
        return BLI_findlink(&global_views, index - 1);
 }
 
+ColorManagedView *colormanage_view_get_named_for_display(
+        const char *display_name, const char *name)
+{
+       ColorManagedDisplay *display = 
colormanage_display_get_named(display_name);
+       if (display == NULL) {
+               return NULL;
+       }
+       LISTBASE_FOREACH(LinkData *, view_link, &display->views) {
+               ColorManagedView *view = view_link->data;
+               if (STRCASEEQ(name, view->name)) {
+                       return view;
+               }
+       }
+       return NULL;
+}
+
 int IMB_colormanagement_view_get_named_index(const char *name)
 {
        ColorManagedView *view = colormanage_view_get_named(name);
@@ -3144,7 +3169,8 @@ ColormanageProcessor 
*IMB_colormanagement_display_processor_new(const ColorManag
                applied_view_settings = view_settings;
        }
        else {
-               init_render_view_settings(display_settings,  
&default_view_settings);
+               IMB_colormanagement_init_default_view_settings(
+                       &default_view_settings, display_settings);
                applied_view_settings = &default_view_settings;
        }
 
@@ -3441,11 +3467,10 @@ bool 
IMB_colormanagement_setup_glsl_draw_from_space(const ColorManagedViewSettin
                applied_view_settings = view_settings;
        }
        else {
-               /* if no view settings were specified, use default display 
transformation
-                * this happens for images which don't want to be displayed 
with render settings
-                */
-
-               init_render_view_settings(display_settings,  
&default_view_settings);
+               /* If no view settings were specified, use default ones, which 
will
+                * attempt not to do any extra color correction. */
+               IMB_colormanagement_init_default_view_settings(
+                       &default_view_settings, display_settings);
                applied_view_settings = &default_view_settings;
        }

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

Reply via email to