[Bf-blender-cvs] [906b9f55afb] master: Cleanup: remove redundant float to byte conversion for stereo image saving

Brecht Van Lommel noreply at git.blender.org
Thu May 12 23:20:13 CEST 2022


Commit: 906b9f55afbf132218a3dc815da2652fbc502352
Author: Brecht Van Lommel
Date:   Thu May 12 22:46:15 2022 +0200
Branches: master
https://developer.blender.org/rB906b9f55afbf132218a3dc815da2652fbc502352

Cleanup: remove redundant float to byte conversion for stereo image saving

For non-stereo cases this is automatically handled by IMB_saveiff, no reason for
stereo to do this separately.

Ref D14899

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

M	source/blender/blenkernel/intern/image_save.cc
M	source/blender/compositor/operations/COM_OutputFileMultiViewOperation.cc
M	source/blender/imbuf/IMB_imbuf.h
M	source/blender/imbuf/intern/util.c
M	source/blender/imbuf/intern/writeimage.c

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

diff --git a/source/blender/blenkernel/intern/image_save.cc b/source/blender/blenkernel/intern/image_save.cc
index 7b1f43168f2..0fd997c3a9b 100644
--- a/source/blender/blenkernel/intern/image_save.cc
+++ b/source/blender/blenkernel/intern/image_save.cc
@@ -504,7 +504,6 @@ static bool image_save_single(ReportList *reports,
         colormanaged_ibuf = IMB_colormanagement_imbuf_for_write(ibuf, save_as_render, true, imf);
 
         BKE_image_format_to_imbuf(colormanaged_ibuf, imf);
-        IMB_prepare_write_ImBuf(IMB_isfloat(colormanaged_ibuf), colormanaged_ibuf);
 
         /* duplicate buffer to prevent locker issue when using render result */
         ibuf_stereo[i] = IMB_dupImBuf(colormanaged_ibuf);
@@ -924,7 +923,6 @@ bool BKE_image_render_write(ReportList *reports,
         int view_id = BLI_findstringindex(&rr->views, names[i], offsetof(RenderView, name));
         ibuf_arr[i] = RE_render_result_rect_to_ibuf(rr, &image_format, dither, view_id);
         IMB_colormanagement_imbuf_for_write(ibuf_arr[i], true, false, &image_format);
-        IMB_prepare_write_ImBuf(IMB_isfloat(ibuf_arr[i]), ibuf_arr[i]);
       }
 
       ibuf_arr[2] = IMB_stereo3d_ImBuf(&image_format, ibuf_arr[0], ibuf_arr[1]);
diff --git a/source/blender/compositor/operations/COM_OutputFileMultiViewOperation.cc b/source/blender/compositor/operations/COM_OutputFileMultiViewOperation.cc
index aeaf6b659e3..341541b4cdd 100644
--- a/source/blender/compositor/operations/COM_OutputFileMultiViewOperation.cc
+++ b/source/blender/compositor/operations/COM_OutputFileMultiViewOperation.cc
@@ -325,7 +325,6 @@ void OutputStereoOperation::deinit_execution()
 
         /* do colormanagement in the individual views, so it doesn't need to do in the stereo */
         IMB_colormanagement_imbuf_for_write(ibuf[i], true, false, &format_);
-        IMB_prepare_write_ImBuf(IMB_isfloat(ibuf[i]), ibuf[i]);
       }
 
       /* create stereo buffer */
diff --git a/source/blender/imbuf/IMB_imbuf.h b/source/blender/imbuf/IMB_imbuf.h
index 8796c99629e..7493fa3e4af 100644
--- a/source/blender/imbuf/IMB_imbuf.h
+++ b/source/blender/imbuf/IMB_imbuf.h
@@ -530,7 +530,6 @@ void IMB_scaleImBuf_threaded(struct ImBuf *ibuf, unsigned int newx, unsigned int
  * \attention Defined in writeimage.c
  */
 bool IMB_saveiff(struct ImBuf *ibuf, const char *filepath, int flags);
-bool IMB_prepare_write_ImBuf(bool isfloat, struct ImBuf *ibuf);
 
 /**
  *
@@ -553,12 +552,6 @@ bool IMB_isanim(const char *filepath);
  */
 int imb_get_anim_type(const char *filepath);
 
-/**
- *
- * \attention Defined in util.c
- */
-bool IMB_isfloat(const struct ImBuf *ibuf);
-
 /**
  * Test if color-space conversions of pixels in buffer need to take into account alpha.
  */
diff --git a/source/blender/imbuf/intern/util.c b/source/blender/imbuf/intern/util.c
index 45b50c866fe..ffa989a29b4 100644
--- a/source/blender/imbuf/intern/util.c
+++ b/source/blender/imbuf/intern/util.c
@@ -390,14 +390,3 @@ bool IMB_isanim(const char *filepath)
 
   return (type && type != ANIM_SEQUENCE);
 }
-
-bool IMB_isfloat(const ImBuf *ibuf)
-{
-  const ImFileType *type = IMB_file_type_from_ibuf(ibuf);
-  if (type != NULL) {
-    if (type->flag & IM_FTYPE_FLOAT) {
-      return true;
-    }
-  }
-  return false;
-}
diff --git a/source/blender/imbuf/intern/writeimage.c b/source/blender/imbuf/intern/writeimage.c
index 56c9384a330..d2c0b61c1c5 100644
--- a/source/blender/imbuf/intern/writeimage.c
+++ b/source/blender/imbuf/intern/writeimage.c
@@ -19,11 +19,6 @@
 #include "IMB_colormanagement.h"
 #include "IMB_colormanagement_intern.h"
 
-static bool prepare_write_imbuf(const ImFileType *type, ImBuf *ibuf)
-{
-  return IMB_prepare_write_ImBuf((type->flag & IM_FTYPE_FLOAT), ibuf);
-}
-
 bool IMB_saveiff(struct ImBuf *ibuf, const char *filepath, int flags)
 {
   errno = 0;
@@ -36,34 +31,22 @@ bool IMB_saveiff(struct ImBuf *ibuf, const char *filepath, int flags)
   ibuf->flags = flags;
 
   const ImFileType *type = IMB_file_type_from_ibuf(ibuf);
-  if (type != NULL) {
-    if (type->save != NULL) {
-      prepare_write_imbuf(type, ibuf);
-      return type->save(ibuf, filepath, flags);
-    }
+  if (type == NULL || type->save == NULL) {
+    fprintf(stderr, "Couldn't save picture.\n");
+    return false;
   }
 
-  fprintf(stderr, "Couldn't save picture.\n");
-
-  return false;
-}
-
-bool IMB_prepare_write_ImBuf(const bool isfloat, ImBuf *ibuf)
-{
-  bool changed = false;
-
-  if (isfloat) {
-    /* pass */
-  }
-  else {
+  /* If writing byte image from float buffer, create a byte buffer for writing.
+   *
+   * For color managed image writing, IMB_colormanagement_imbuf_for_write should
+   * have already created this byte buffer. This is a basic fallback for other
+   * cases where we do not have a specific desired output colorspace. */
+  if (!(type->flag & IM_FTYPE_FLOAT)) {
     if (ibuf->rect == NULL && ibuf->rect_float) {
       ibuf->rect_colorspace = colormanage_colorspace_get_roled(COLOR_ROLE_DEFAULT_BYTE);
       IMB_rect_from_float(ibuf);
-      if (ibuf->rect != NULL) {
-        changed = true;
-      }
     }
   }
 
-  return changed;
+  return type->save(ibuf, filepath, flags);
 }



More information about the Bf-blender-cvs mailing list