Skip to content

Commit

Permalink
Merge branch 'finalscale_export_fixes'
Browse files Browse the repository at this point in the history
* finalscale_export_fixes:
  Finalscale tiling fixes
  Fix finalscale export taking care of roi
  • Loading branch information
TurboGit committed Jul 12, 2024
2 parents e4aa0e8 + 56385da commit c55ed92
Showing 1 changed file with 41 additions and 5 deletions.
46 changes: 41 additions & 5 deletions src/iop/finalscale.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
This file is part of darktable,
Copyright (C) 2015-2023 darktable developers.
Copyright (C) 2015-2024 darktable developers.
darktable is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Expand Down Expand Up @@ -98,6 +98,12 @@ void modify_roi_in(dt_iop_module_t *self,
piece->buf_in.width));
roi_in->height = MAX(16, MIN(ceilf(roi_out->height / roi_out->scale),
piece->buf_in.height));

// FIXME As long as we don't support upscaling via OpenCL we can & should disable OpenCL
// here to avoid the costly later fallback to CPU upscaling
if(roi_in->scale > 1.0f)
piece->process_cl_ready = FALSE;

roi_in->scale = 1.0f;

if(_gui_fullpipe(piece))
Expand All @@ -109,6 +115,27 @@ void modify_roi_in(dt_iop_module_t *self,
}
}

void tiling_callback(struct dt_iop_module_t *self,
struct dt_dev_pixelpipe_iop_t *piece,
const dt_iop_roi_t *roi_in,
const dt_iop_roi_t *roi_out,
struct dt_develop_tiling_t *tiling)
{
const float ioratio
= (float)(roi_out->width * roi_out->height) / (float)(roi_in->width * roi_in->height);

tiling->factor = 1.0f + ioratio;
tiling->factor += ioratio != 1.0f ? 0.5f : 0.0f; // approximate extra requirements for interpolation
tiling->factor_cl = tiling->factor;
tiling->maxbuf = 1.0f;
tiling->maxbuf_cl = tiling->maxbuf;
tiling->overhead = 0;

tiling->overlap = 4;
tiling->xalign = 1;
tiling->yalign = 1;
}

void distort_mask(struct dt_iop_module_t *self,
struct dt_dev_pixelpipe_iop_t *piece,
const float *const in,
Expand Down Expand Up @@ -136,11 +163,15 @@ int process_cl(struct dt_iop_module_t *self,
}

const int devid = piece->pipe->devid;
const gboolean exporting = piece->pipe->type == DT_DEV_PIXELPIPE_EXPORT;

dt_print_pipe(DT_DEBUG_IMAGEIO,
"clip_and_zoom_roi",
exporting ? "clip_and_zoom_roi" : "clip_and_zoom",
piece->pipe, self, piece->pipe->devid, roi_in, roi_out, "device=%i\n", devid);
return dt_iop_clip_and_zoom_cl(devid, dev_out, dev_in, roi_out, roi_in);
if(exporting)
return dt_iop_clip_and_zoom_roi_cl(devid, dev_out, dev_in, roi_out, roi_in);
else
return dt_iop_clip_and_zoom_cl(devid, dev_out, dev_in, roi_out, roi_in);
}
#endif

Expand All @@ -151,10 +182,15 @@ void process(dt_iop_module_t *self,
const dt_iop_roi_t *const roi_in,
const dt_iop_roi_t *const roi_out)
{
const gboolean exporting = piece->pipe->type == DT_DEV_PIXELPIPE_EXPORT;
dt_print_pipe(DT_DEBUG_IMAGEIO,
"clip_and_zoom_roi", piece->pipe, self, DT_DEVICE_CPU, roi_in, roi_out, "\n");
exporting ? "clip_and_zoom_roi" : "clip_and_zoom",
piece->pipe, self, DT_DEVICE_CPU, roi_in, roi_out, "\n");

dt_iop_clip_and_zoom((float *)ovoid, (float *)ivoid, roi_out, roi_in);
if(exporting)
dt_iop_clip_and_zoom_roi((float *)ovoid, (float *)ivoid, roi_out, roi_in);
else
dt_iop_clip_and_zoom((float *)ovoid, (float *)ivoid, roi_out, roi_in);
}

void commit_params(dt_iop_module_t *self,
Expand Down

0 comments on commit c55ed92

Please sign in to comment.