Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorBrecht Van Lommel <brecht@blender.org>2022-03-18 19:08:14 +0300
committerBrecht Van Lommel <brecht@blender.org>2022-03-21 18:38:13 +0300
commitb96462519f748fcf04028084354fbbf97eb8ce92 (patch)
tree1815c7139657399d9b95f9d36aaa603d67eea7a0 /source
parent1897df891cc6fa64a240a531853cddd1b52a78a5 (diff)
Cleanup: move image_save.c to c++
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/CMakeLists.txt2
-rw-r--r--source/blender/blenkernel/intern/image_save.cc (renamed from source/blender/blenkernel/intern/image_save.c)62
2 files changed, 34 insertions, 30 deletions
diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt
index 3cc65fd252b..3b5272aa600 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -160,7 +160,7 @@ set(SRC
intern/image_partial_update.cc
intern/image_gen.c
intern/image_gpu.cc
- intern/image_save.c
+ intern/image_save.cc
intern/ipo.c
intern/kelvinlet.c
intern/key.c
diff --git a/source/blender/blenkernel/intern/image_save.c b/source/blender/blenkernel/intern/image_save.cc
index 2361b0b8e9a..180008e0f64 100644
--- a/source/blender/blenkernel/intern/image_save.c
+++ b/source/blender/blenkernel/intern/image_save.cc
@@ -138,15 +138,15 @@ static bool image_save_single(ReportList *reports,
{
void *lock;
ImBuf *ibuf = BKE_image_acquire_ibuf(ima, iuser, &lock);
- RenderResult *rr = NULL;
+ RenderResult *rr = nullptr;
bool ok = false;
- if (ibuf == NULL || (ibuf->rect == NULL && ibuf->rect_float == NULL)) {
+ if (ibuf == nullptr || (ibuf->rect == nullptr && ibuf->rect_float == nullptr)) {
BKE_image_release_ibuf(ima, ibuf, lock);
- goto cleanup;
+ return ok;
}
- ImBuf *colormanaged_ibuf = NULL;
+ ImBuf *colormanaged_ibuf = nullptr;
const bool save_copy = opts->save_copy;
const bool save_as_render = opts->save_as_render;
ImageFormatData *imf = &opts->im_format;
@@ -180,11 +180,11 @@ static bool image_save_single(ReportList *reports,
int layer = (iuser && !is_multilayer) ? iuser->layer : -1;
/* error handling */
- if (!rr) {
+ if (rr == nullptr) {
if (imf->imtype == R_IMF_IMTYPE_MULTILAYER) {
BKE_report(reports, RPT_ERROR, "Did not write, no Multilayer Image");
BKE_image_release_ibuf(ima, ibuf, lock);
- goto cleanup;
+ return ok;
}
}
else {
@@ -196,19 +196,21 @@ static bool image_save_single(ReportList *reports,
STEREO_LEFT_NAME,
STEREO_RIGHT_NAME);
BKE_image_release_ibuf(ima, ibuf, lock);
- goto cleanup;
+ BKE_image_release_renderresult(opts->scene, ima);
+ return ok;
}
/* It shouldn't ever happen. */
- if ((BLI_findstring(&rr->views, STEREO_LEFT_NAME, offsetof(RenderView, name)) == NULL) ||
- (BLI_findstring(&rr->views, STEREO_RIGHT_NAME, offsetof(RenderView, name)) == NULL)) {
+ if ((BLI_findstring(&rr->views, STEREO_LEFT_NAME, offsetof(RenderView, name)) == nullptr) ||
+ (BLI_findstring(&rr->views, STEREO_RIGHT_NAME, offsetof(RenderView, name)) == nullptr)) {
BKE_reportf(reports,
RPT_ERROR,
"Did not write, the image doesn't have a \"%s\" and \"%s\" views",
STEREO_LEFT_NAME,
STEREO_RIGHT_NAME);
BKE_image_release_ibuf(ima, ibuf, lock);
- goto cleanup;
+ BKE_image_release_renderresult(opts->scene, ima);
+ return ok;
}
}
BKE_imbuf_stamp_info(rr, ibuf);
@@ -217,14 +219,14 @@ static bool image_save_single(ReportList *reports,
/* fancy multiview OpenEXR */
if (imf->views_format == R_IMF_VIEWS_MULTIVIEW && is_exr_rr) {
/* save render result */
- ok = RE_WriteRenderResult(reports, rr, opts->filepath, imf, NULL, layer);
+ ok = RE_WriteRenderResult(reports, rr, opts->filepath, imf, nullptr, layer);
image_save_post(reports, ima, ibuf, ok, opts, true, opts->filepath, r_colorspace_changed);
BKE_image_release_ibuf(ima, ibuf, lock);
}
/* regular mono pipeline */
else if (is_mono) {
if (is_exr_rr) {
- ok = RE_WriteRenderResult(reports, rr, opts->filepath, imf, NULL, layer);
+ ok = RE_WriteRenderResult(reports, rr, opts->filepath, imf, nullptr, layer);
}
else {
colormanaged_ibuf = IMB_colormanagement_imbuf_for_write(
@@ -306,18 +308,19 @@ static bool image_save_single(ReportList *reports,
/* stereo (multiview) images */
else if (opts->im_format.views_format == R_IMF_VIEWS_STEREO_3D) {
if (imf->imtype == R_IMF_IMTYPE_MULTILAYER) {
- ok = RE_WriteRenderResult(reports, rr, opts->filepath, imf, NULL, layer);
+ ok = RE_WriteRenderResult(reports, rr, opts->filepath, imf, nullptr, layer);
image_save_post(reports, ima, ibuf, ok, opts, true, opts->filepath, r_colorspace_changed);
BKE_image_release_ibuf(ima, ibuf, lock);
}
else {
- ImBuf *ibuf_stereo[2] = {NULL};
+ ImBuf *ibuf_stereo[2] = {nullptr};
unsigned char planes = ibuf->planes;
const char *names[2] = {STEREO_LEFT_NAME, STEREO_RIGHT_NAME};
/* we need to get the specific per-view buffers */
BKE_image_release_ibuf(ima, ibuf, lock);
+ bool stereo_ok = true;
for (int i = 0; i < 2; i++) {
ImageUser view_iuser;
@@ -343,10 +346,12 @@ static bool image_save_single(ReportList *reports,
ibuf = BKE_image_acquire_ibuf(ima, &view_iuser, &lock);
- if (ibuf == NULL) {
+ if (ibuf == nullptr) {
BKE_report(
reports, RPT_ERROR, "Did not write, unexpected error when saving stereo image");
- goto cleanup;
+ BKE_image_release_ibuf(ima, ibuf, lock);
+ stereo_ok = false;
+ break;
}
ibuf->planes = planes;
@@ -362,15 +367,18 @@ static bool image_save_single(ReportList *reports,
ibuf_stereo[i] = IMB_dupImBuf(colormanaged_ibuf);
imbuf_save_post(ibuf, colormanaged_ibuf);
+
BKE_image_release_ibuf(ima, ibuf, lock);
}
- ibuf = IMB_stereo3d_ImBuf(imf, ibuf_stereo[0], ibuf_stereo[1]);
+ if (stereo_ok) {
+ ibuf = IMB_stereo3d_ImBuf(imf, ibuf_stereo[0], ibuf_stereo[1]);
- /* save via traditional path */
- ok = BKE_imbuf_write_as(ibuf, opts->filepath, imf, save_copy);
+ /* save via traditional path */
+ ok = BKE_imbuf_write_as(ibuf, opts->filepath, imf, save_copy);
- IMB_freeImBuf(ibuf);
+ IMB_freeImBuf(ibuf);
+ }
for (int i = 0; i < 2; i++) {
IMB_freeImBuf(ibuf_stereo[i]);
@@ -378,11 +386,6 @@ static bool image_save_single(ReportList *reports,
}
}
-cleanup:
- if (rr) {
- BKE_image_release_renderresult(opts->scene, ima);
- }
-
return ok;
}
@@ -395,7 +398,7 @@ bool BKE_image_save(
bool colorspace_changed = false;
eUDIM_TILE_FORMAT tile_format;
- char *udim_pattern = NULL;
+ char *udim_pattern = nullptr;
if (ima->source == IMA_SRC_TILED) {
/* Verify filepath for tiled images contains a valid UDIM marker. */
@@ -408,8 +411,9 @@ bool BKE_image_save(
return false;
}
- /* For saving a tiled image we need an iuser, so use a local one if there isn't already one. */
- if (iuser == NULL) {
+ /* For saving a tiled image we need an iuser, so use a local one if there isn't already one.
+ */
+ if (iuser == nullptr) {
iuser = &save_iuser;
}
}
@@ -440,7 +444,7 @@ bool BKE_image_save(
}
if (colorspace_changed) {
- BKE_image_signal(bmain, ima, NULL, IMA_SIGNAL_COLORMANAGE);
+ BKE_image_signal(bmain, ima, nullptr, IMA_SIGNAL_COLORMANAGE);
}
return ok;