[Bf-blender-cvs] [7ed8e9167d7] blender2.8: Color management: Use default view with no extra transform when not specified

Sergey Sharybin noreply at git.blender.org
Thu Dec 6 12:33:58 CET 2018


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;
 	}



More information about the Bf-blender-cvs mailing list