![]() |
Ansel 0.0
A darktable fork - bloat + design vision
|
#include "common/color_picker.h"
#include "common/colorspaces.h"
#include "common/darktable.h"
#include "common/histogram.h"
#include "common/imageio.h"
#include "common/opencl.h"
#include "common/iop_order.h"
#include "control/control.h"
#include "control/conf.h"
#include "control/signal.h"
#include "develop/blend.h"
#include "develop/format.h"
#include "develop/imageop_math.h"
#include "develop/pixelpipe.h"
#include "develop/tiling.h"
#include "develop/masks.h"
#include "gui/gtk.h"
#include "libs/colorpicker.h"
#include "libs/lib.h"
#include "gui/color_picker_proxy.h"
#include <assert.h>
#include <math.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <unistd.h>
#include "develop/pixelpipe_cache.c"
Go to the source code of this file.
Macros | |
#define | KILL_SWITCH_ABORT |
#define | KILL_SWITCH_AND_FLUSH_CACHE |
#define | KILL_SWITCH_PIPE |
Typedefs | |
typedef enum dt_pixelpipe_flow_t | dt_pixelpipe_flow_t |
typedef enum dt_pixelpipe_picker_source_t | dt_pixelpipe_picker_source_t |
Enumerations | |
enum | dt_pixelpipe_flow_t { PIXELPIPE_FLOW_NONE = 0 , PIXELPIPE_FLOW_HISTOGRAM_NONE = 1 << 0 , PIXELPIPE_FLOW_HISTOGRAM_ON_CPU = 1 << 1 , PIXELPIPE_FLOW_HISTOGRAM_ON_GPU = 1 << 2 , PIXELPIPE_FLOW_PROCESSED_ON_CPU = 1 << 3 , PIXELPIPE_FLOW_PROCESSED_ON_GPU = 1 << 4 , PIXELPIPE_FLOW_PROCESSED_WITH_TILING = 1 << 5 , PIXELPIPE_FLOW_BLENDED_ON_CPU = 1 << 6 , PIXELPIPE_FLOW_BLENDED_ON_GPU = 1 << 7 } |
enum | dt_pixelpipe_picker_source_t { PIXELPIPE_PICKER_INPUT = 0 , PIXELPIPE_PICKER_OUTPUT = 1 } |
Functions | |
static void | get_output_format (dt_iop_module_t *module, dt_dev_pixelpipe_t *pipe, dt_dev_pixelpipe_iop_t *piece, dt_develop_t *dev, dt_iop_buffer_dsc_t *dsc) |
static char * | _pipe_type_to_str (int pipe_type) |
static void | _copy_buffer (const char *const restrict input, char *const restrict output, const size_t height, const size_t o_width, const size_t i_width, const size_t x_offset, const size_t y_offset, const size_t stride, const size_t bpp) |
static void | _uint8_to_float (const uint8_t *const input, float *const output, const size_t width, const size_t height, const size_t chan) |
int | dt_dev_pixelpipe_init_export (dt_dev_pixelpipe_t *pipe, int32_t width, int32_t height, int levels, gboolean store_masks) |
int | dt_dev_pixelpipe_init_thumbnail (dt_dev_pixelpipe_t *pipe, int32_t width, int32_t height) |
int | dt_dev_pixelpipe_init_dummy (dt_dev_pixelpipe_t *pipe, int32_t width, int32_t height) |
int | dt_dev_pixelpipe_init_preview (dt_dev_pixelpipe_t *pipe) |
int | dt_dev_pixelpipe_init (dt_dev_pixelpipe_t *pipe) |
int | dt_dev_pixelpipe_init_cached (dt_dev_pixelpipe_t *pipe) |
void | dt_dev_pixelpipe_set_input (dt_dev_pixelpipe_t *pipe, dt_develop_t *dev, int32_t imgid, int width, int height, float iscale, dt_mipmap_size_t size) |
void | dt_dev_pixelpipe_set_icc (dt_dev_pixelpipe_t *pipe, dt_colorspaces_color_profile_type_t icc_type, const gchar *icc_filename, dt_iop_color_intent_t icc_intent) |
void | dt_dev_pixelpipe_cleanup (dt_dev_pixelpipe_t *pipe) |
gboolean | dt_dev_pixelpipe_set_reentry (dt_dev_pixelpipe_t *pipe, uint64_t hash) |
Set the re-entry pipeline flag, only if no object is already capturing it. Re-entered pipelines run with cache disabled, but without flushing the whole cache. This was designed for cases where raster masks references are lost on pipeline, for example when going to lighttable and re-entering darkroom (pipe caches are not flushed for performance, if re-entering the same image), as to trigger a full pipe run and reinit references. | |
gboolean | dt_dev_pixelpipe_unset_reentry (dt_dev_pixelpipe_t *pipe, uint64_t hash) |
Remove the re-entry pipeline flag, only if the object identifier is the one that set it. See dt_dev_pixelpipe_set_reentry . | |
gboolean | dt_dev_pixelpipe_has_reentry (dt_dev_pixelpipe_t *pipe) |
void | dt_dev_pixelpipe_reset_reentry (dt_dev_pixelpipe_t *pipe) |
void | dt_dev_pixelpipe_cleanup_nodes (dt_dev_pixelpipe_t *pipe) |
void | dt_dev_pixelpipe_create_nodes (dt_dev_pixelpipe_t *pipe, dt_develop_t *dev) |
static uint64_t | _default_pipe_hash (dt_dev_pixelpipe_t *pipe) |
static uint64_t | _node_hash (dt_dev_pixelpipe_t *pipe, const dt_dev_pixelpipe_iop_t *piece, const dt_iop_roi_t *roi_out, const int pos) |
void | dt_pixelpipe_get_global_hash (dt_dev_pixelpipe_t *pipe, dt_develop_t *dev) |
gboolean | _commit_history_to_node (dt_dev_pixelpipe_t *pipe, dt_dev_pixelpipe_iop_t *piece, dt_dev_history_item_t *hist) |
void | dt_dev_pixelpipe_synch (dt_dev_pixelpipe_t *pipe, dt_develop_t *dev, GList *history) |
void | dt_dev_pixelpipe_synch_all_real (dt_dev_pixelpipe_t *pipe, dt_develop_t *dev, const char *caller_func) |
Find the last history item matching each pipeline node (module), in the order of pipeline execution. This is super important because modules providing raster masks need to be inited before modules using them, in the order of pipeline nodes. But history holds no guaranty that raster masks providers will be older than raster masks users, especially after history compression. So reading in history order is not an option. | |
void | dt_dev_pixelpipe_synch_top (dt_dev_pixelpipe_t *pipe, dt_develop_t *dev) |
void | dt_dev_pixelpipe_change (dt_dev_pixelpipe_t *pipe, struct dt_develop_t *dev) |
static void | histogram_collect (dt_dev_pixelpipe_iop_t *piece, const void *pixel, const dt_iop_roi_t *roi, uint32_t **histogram, uint32_t *histogram_max) |
dt_backbuf_t * | _get_backuf (dt_develop_t *dev, const char *op) |
static void | pixelpipe_get_histogram_backbuf (dt_dev_pixelpipe_t *pipe, dt_develop_t *dev, void *output, const dt_iop_roi_t *roi, dt_iop_module_t *module, dt_dev_pixelpipe_iop_t *piece, const uint64_t hash, const size_t bpp) |
static int | pixelpipe_picker_helper (dt_iop_module_t *module, const dt_iop_roi_t *roi, dt_aligned_pixel_t picked_color, dt_aligned_pixel_t picked_color_min, dt_aligned_pixel_t picked_color_max, dt_pixelpipe_picker_source_t picker_source, int *box) |
static void | pixelpipe_picker (dt_iop_module_t *module, dt_dev_pixelpipe_iop_t *piece, dt_iop_buffer_dsc_t *dsc, const float *pixel, const dt_iop_roi_t *roi, float *picked_color, float *picked_color_min, float *picked_color_max, const dt_iop_colorspace_type_t image_cst, dt_pixelpipe_picker_source_t picker_source) |
static gboolean | _transform_for_blend (const dt_iop_module_t *const self, const dt_dev_pixelpipe_iop_t *const piece) |
static dt_iop_colorspace_type_t | _transform_for_picker (dt_iop_module_t *self, const dt_iop_colorspace_type_t cst) |
static void | collect_histogram_on_CPU (dt_dev_pixelpipe_t *pipe, dt_develop_t *dev, float *input, const dt_iop_roi_t *roi_in, dt_iop_buffer_dsc_t *input_format, dt_iop_module_t *module, dt_dev_pixelpipe_iop_t *piece) |
static int | pixelpipe_process_on_CPU (dt_dev_pixelpipe_t *pipe, dt_develop_t *dev, float *input, dt_iop_buffer_dsc_t *input_format, const dt_iop_roi_t *roi_in, void **output, dt_iop_buffer_dsc_t **out_format, const dt_iop_roi_t *roi_out, dt_iop_module_t *module, dt_dev_pixelpipe_iop_t *piece, dt_develop_tiling_t *tiling, dt_pixelpipe_flow_t *pixelpipe_flow) |
static dt_dev_pixelpipe_iop_t * | _last_node_in_pipe (dt_dev_pixelpipe_t *pipe) |
static void | _sample_color_picker (dt_dev_pixelpipe_t *pipe, dt_develop_t *dev, float *input, dt_iop_buffer_dsc_t *input_format, const dt_iop_roi_t *roi_in, void **output, dt_iop_buffer_dsc_t **out_format, const dt_iop_roi_t *roi_out, dt_iop_module_t *module, dt_dev_pixelpipe_iop_t *piece) |
static void | _print_perf_debug (dt_dev_pixelpipe_t *pipe, const dt_pixelpipe_flow_t pixelpipe_flow, dt_dev_pixelpipe_iop_t *piece, dt_iop_module_t *module, dt_times_t *start) |
static void | _print_nan_debug (dt_dev_pixelpipe_t *pipe, void *cl_mem_output, void *output, const dt_iop_roi_t *roi_out, dt_iop_buffer_dsc_t *out_format, dt_iop_module_t *module, const size_t bpp) |
static int | _init_base_buffer (dt_dev_pixelpipe_t *pipe, dt_develop_t *dev, void **output, void **cl_mem_output, dt_iop_buffer_dsc_t **out_format, dt_iop_roi_t *roi_in, const dt_iop_roi_t *roi_out, const uint64_t hash, const gboolean bypass_cache, const size_t bufsize, const size_t bpp) |
static void | _sample_all (dt_dev_pixelpipe_t *pipe, dt_develop_t *dev, void *input, void **output, const dt_iop_roi_t *roi_in, const dt_iop_roi_t *roi_out, dt_iop_buffer_dsc_t *input_format, dt_iop_buffer_dsc_t **output_format, dt_iop_module_t *module, dt_dev_pixelpipe_iop_t *piece, const uint64_t input_hash, const uint64_t hash, const size_t in_bpp, const size_t bpp, dt_pixel_cache_entry_t *const input_entry, dt_pixel_cache_entry_t *const output_entry) |
static int | dt_dev_pixelpipe_process_rec (dt_dev_pixelpipe_t *pipe, dt_develop_t *dev, void **output, void **cl_mem_output, dt_iop_buffer_dsc_t **out_format, const dt_iop_roi_t *roi_out, GList *modules, GList *pieces, int pos) |
int | dt_dev_pixelpipe_process_no_gamma (dt_dev_pixelpipe_t *pipe, dt_develop_t *dev, int x, int y, int width, int height, double scale) |
void | dt_dev_pixelpipe_disable_after (dt_dev_pixelpipe_t *pipe, const char *op) |
void | dt_dev_pixelpipe_disable_before (dt_dev_pixelpipe_t *pipe, const char *op) |
static void | _print_opencl_errors (int error, dt_dev_pixelpipe_t *pipe) |
int | dt_dev_pixelpipe_process (dt_dev_pixelpipe_t *pipe, dt_develop_t *dev, int x, int y, int width, int height, double scale) |
gboolean | dt_dev_pixelpipe_activemodule_disables_currentmodule (struct dt_develop_t *dev, struct dt_iop_module_t *current_module) |
void | dt_dev_pixelpipe_get_roi_out (dt_dev_pixelpipe_t *pipe, struct dt_develop_t *dev, const int width_in, const int height_in, int *width, int *height) |
void | dt_dev_pixelpipe_get_roi_in (dt_dev_pixelpipe_t *pipe, struct dt_develop_t *dev, const struct dt_iop_roi_t roi_out) |
static gboolean | _dt_dev_raster_mask_check (dt_dev_pixelpipe_iop_t *source_piece, dt_dev_pixelpipe_iop_t *current_piece, const dt_iop_module_t *target_module) |
Checks the validity of the raster mask source and target modules, outputs errors if necessary. Also tells the user what to do. | |
float * | dt_dev_get_raster_mask (dt_dev_pixelpipe_t *pipe, const dt_iop_module_t *raster_mask_source, const int raster_mask_id, const dt_iop_module_t *target_module, gboolean *free_mask, int *error) |
void | dt_dev_clear_rawdetail_mask (dt_dev_pixelpipe_t *pipe) |
gboolean | dt_dev_write_rawdetail_mask (dt_dev_pixelpipe_iop_t *piece, float *const rgb, const dt_iop_roi_t *const roi_in, const int mode) |
float * | dt_dev_distort_detail_mask (const dt_dev_pixelpipe_t *pipe, float *src, const dt_iop_module_t *target_module) |
#define KILL_SWITCH_ABORT |
#define KILL_SWITCH_AND_FLUSH_CACHE |
#define KILL_SWITCH_PIPE |
typedef enum dt_pixelpipe_flow_t dt_pixelpipe_flow_t |
typedef enum dt_pixelpipe_picker_source_t dt_pixelpipe_picker_source_t |
enum dt_pixelpipe_flow_t |
gboolean _commit_history_to_node | ( | dt_dev_pixelpipe_t * | pipe, |
dt_dev_pixelpipe_iop_t * | piece, | ||
dt_dev_history_item_t * | hist | ||
) |
References dt_dev_history_item_t::blend_params, dt_dev_pixelpipe_iop_t::blendop_data, dt_develop_blend_params_t::details, DT_DEV_DETAIL_MASK_REQUIRED, dt_iop_commit_params(), dt_dev_history_item_t::enabled, dt_dev_pixelpipe_iop_t::enabled, FALSE, dt_dev_history_item_t::params, TRUE, and dt_dev_pixelpipe_t::want_detail_mask.
Referenced by dt_dev_pixelpipe_synch(), and dt_dev_pixelpipe_synch_all_real().
|
inlinestatic |
Referenced by _init_base_buffer(), and pixelpipe_get_histogram_backbuf().
|
static |
References dt_hash(), DT_MAX_FILENAME_LEN, dt_image_t::filename, and dt_dev_pixelpipe_t::image.
Referenced by _node_hash(), and dt_pixelpipe_get_global_hash().
|
static |
Checks the validity of the raster mask source and target modules, outputs errors if necessary. Also tells the user what to do.
source_piece | |
current_piece | |
target_module |
References delete_underscore(), dt_control_log(), dt_dev_pixelpipe_iop_t::enabled, FALSE, dt_iop_module_t::multi_name, and TRUE.
Referenced by dt_dev_get_raster_mask().
dt_backbuf_t * _get_backuf | ( | dt_develop_t * | dev, |
const char * | op | ||
) |
References dt_develop_t::display_histogram, dt_develop_t::output_histogram, and dt_develop_t::raw_histogram.
Referenced by pixelpipe_get_histogram_backbuf().
|
static |
References _copy_buffer(), bpp, dt_mipmap_buffer_t::buf, darktable, dt_dev_pixelpipe_cache_get(), dt_dev_pixelpipe_cache_wrlock_entry(), dt_iop_clip_and_zoom(), DT_MIPMAP_BLOCKING, dt_mipmap_cache_get, dt_mipmap_cache_release, FALSE, dt_mipmap_buffer_t::height, dt_iop_roi_t::height, dt_dev_pixelpipe_t::iheight, dt_dev_pixelpipe_t::imgid, dt_dev_pixelpipe_t::iwidth, MAX, MIN, darktable_t::mipmap_cache, darktable_t::pixelpipe_cache, dt_iop_roi_t::scale, dt_dev_pixelpipe_t::size, TRUE, dt_dev_pixelpipe_t::type, dt_mipmap_buffer_t::width, dt_iop_roi_t::width, dt_iop_roi_t::x, and dt_iop_roi_t::y.
Referenced by dt_dev_pixelpipe_process_rec().
|
static |
References dt_dev_pixelpipe_iop_t::data, dt_dev_pixelpipe_iop_t::enabled, and dt_dev_pixelpipe_t::nodes.
Referenced by dt_dev_pixelpipe_process().
|
static |
References _default_pipe_hash(), dt_hash(), and dt_dev_pixelpipe_iop_t::global_hash.
Referenced by dt_dev_pixelpipe_process(), and dt_dev_pixelpipe_process_rec().
|
static |
|
static |
References _pipe_type_to_str(), dt_iop_buffer_dsc_t::channels, darktable, dt_iop_buffer_dsc_t::datatype, DT_DEBUG_NAN, dt_history_item_get_name(), f(), dt_iop_roi_t::height, dt_iop_module_t::op, dt_dev_pixelpipe_t::type, TYPE_FLOAT, darktable_t::unmuted, and dt_iop_roi_t::width.
Referenced by dt_dev_pixelpipe_process_rec().
|
static |
References _pipe_type_to_str(), dt_control_log(), DT_DEBUG_OPENCL, dt_print(), error(), and dt_dev_pixelpipe_t::type.
Referenced by dt_dev_pixelpipe_process().
|
static |
References _pipe_type_to_str(), dt_history_item_get_name(), DT_REQUEST_ON, dt_show_times_f(), PIXELPIPE_FLOW_BLENDED_ON_CPU, PIXELPIPE_FLOW_BLENDED_ON_GPU, PIXELPIPE_FLOW_HISTOGRAM_NONE, PIXELPIPE_FLOW_HISTOGRAM_ON_CPU, PIXELPIPE_FLOW_HISTOGRAM_ON_GPU, PIXELPIPE_FLOW_PROCESSED_ON_CPU, PIXELPIPE_FLOW_PROCESSED_ON_GPU, PIXELPIPE_FLOW_PROCESSED_WITH_TILING, dt_dev_pixelpipe_iop_t::request_histogram, and dt_dev_pixelpipe_t::type.
Referenced by dt_dev_pixelpipe_process_rec().
|
static |
References _sample_color_picker(), bpp, collect_histogram_on_CPU(), darktable, dt_dev_pixelpipe_cache_wrlock_entry(), DT_DEV_PIXELPIPE_PREVIEW, dt_dev_pixelpipe_iop_t::enabled, FALSE, dt_develop_t::gui_attached, dt_iop_module_t::op, output_format(), darktable_t::pixelpipe_cache, pixelpipe_get_histogram_backbuf(), dt_develop_t::preview_pipe, TRUE, and dt_dev_pixelpipe_t::type.
Referenced by dt_dev_pixelpipe_process_rec().
|
static |
References _transform_for_picker(), dt_lib_t::colorpicker, dt_iop_buffer_dsc_t::cst, darktable, dt_dev_pixelpipe_t::dsc, dt_dev_pixelpipe_iop_t::dsc_in, DT_DEBUG_CONTROL_SIGNAL_RAISE, dt_ioppr_get_pipe_work_profile_info(), dt_ioppr_transform_image_colorspace(), DT_REQUEST_COLORPICK_OFF, DT_SIGNAL_CONTROL_PICKERDATA_READY, dt_iop_module_t::enabled, dt_develop_t::gui_module, dt_iop_roi_t::height, IOP_CS_RAW, darktable_t::lib, dt_iop_module_t::picked_color, dt_iop_module_t::picked_color_max, dt_iop_module_t::picked_color_min, dt_iop_module_t::picked_output_color, dt_iop_module_t::picked_output_color_max, dt_iop_module_t::picked_output_color_min, dt_lib_t::picker_proxy, pixelpipe_picker(), PIXELPIPE_PICKER_INPUT, PIXELPIPE_PICKER_OUTPUT, dt_lib_t::proxy, dt_iop_module_t::request_color_pick, darktable_t::signals, and dt_iop_roi_t::width.
Referenced by _sample_all().
|
static |
References dt_dev_pixelpipe_iop_t::blendop_data, DEVELOP_MASK_DISABLED, FALSE, IOP_FLAGS_SUPPORTS_BLENDING, dt_develop_blend_params_t::mask_mode, and TRUE.
Referenced by pixelpipe_process_on_CPU().
|
static |
References dt_iop_color_picker_get_active_cst(), IOP_CS_HSL, IOP_CS_JZCZHZ, IOP_CS_LAB, IOP_CS_LCH, IOP_CS_NONE, IOP_CS_RAW, and IOP_CS_RGB.
Referenced by _sample_color_picker().
|
inlinestatic |
|
static |
References dt_dev_histogram_stats_t::bins_count, dt_iop_buffer_dsc_t::cst, dt_control_queue_redraw_widget(), dt_ioppr_get_pipe_work_profile_info(), dt_ioppr_transform_image_colorspace(), DT_REQUEST_ON, DT_REQUEST_ONLY_IN_GUI, dt_develop_t::gui_attached, dt_iop_roi_t::height, dt_iop_module_t::histogram, dt_dev_pixelpipe_iop_t::histogram, histogram_collect(), dt_iop_module_t::histogram_max, dt_dev_pixelpipe_iop_t::histogram_max, dt_dev_pixelpipe_iop_t::histogram_stats, IOP_CS_RAW, dt_iop_module_t::request_histogram, dt_dev_pixelpipe_iop_t::request_histogram, dt_iop_module_t::widget, and dt_iop_roi_t::width.
Referenced by _sample_all().
void dt_dev_clear_rawdetail_mask | ( | dt_dev_pixelpipe_t * | pipe | ) |
References dt_free_align, and dt_dev_pixelpipe_t::rawdetail_mask_data.
Referenced by dt_dev_pixelpipe_cleanup(), dt_dev_write_rawdetail_mask(), and process().
float * dt_dev_distort_detail_mask | ( | const dt_dev_pixelpipe_t * | pipe, |
float * | src, | ||
const dt_iop_module_t * | target_module | ||
) |
References dt_dev_pixelpipe_iop_t::data, dt_iop_module_t::dev, dt_alloc_align_float(), DT_DEBUG_MASKS, DT_DEV_DETAIL_MASK_DEMOSAIC, DT_DEV_DETAIL_MASK_RAWPREPARE, dt_dev_pixelpipe_activemodule_disables_currentmodule(), dt_free_align, dt_vprint(), dt_iop_module_t::enabled, dt_dev_pixelpipe_iop_t::enabled, FALSE, dt_iop_roi_t::height, dt_dev_pixelpipe_t::nodes, dt_iop_module_t::op, dt_dev_pixelpipe_t::rawdetail_mask_data, dt_dev_pixelpipe_t::rawdetail_mask_roi, TRUE, dt_dev_pixelpipe_t::want_detail_mask, and dt_iop_roi_t::width.
Referenced by _refine_with_detail_mask().
float * dt_dev_get_raster_mask | ( | dt_dev_pixelpipe_t * | pipe, |
const dt_iop_module_t * | raster_mask_source, | ||
const int | raster_mask_id, | ||
const dt_iop_module_t * | target_module, | ||
gboolean * | free_mask, | ||
int * | error | ||
) |
References _dt_dev_raster_mask_check(), dt_dev_pixelpipe_iop_t::data, delete_underscore(), dt_iop_module_t::dev, dt_alloc_align_float(), DT_DEBUG_MASKS, dt_dev_pixelpipe_activemodule_disables_currentmodule(), dt_dev_pixelpipe_set_reentry(), dt_dev_pixelpipe_unset_reentry(), dt_free_align, dt_print(), dt_iop_module_t::enabled, error(), FALSE, dt_dev_pixelpipe_t::flush_cache, dt_dev_pixelpipe_iop_t::global_mask_hash, dt_iop_module_t::multi_name, dt_dev_pixelpipe_t::nodes, dt_iop_module_t::op, dt_dev_pixelpipe_iop_t::raster_masks, TRUE, and dt_dev_pixelpipe_t::type.
Referenced by dt_develop_blend_process(), write_image(), and write_image().
gboolean dt_dev_pixelpipe_activemodule_disables_currentmodule | ( | struct dt_develop_t * | dev, |
struct dt_iop_module_t * | current_module | ||
) |
void dt_dev_pixelpipe_change | ( | dt_dev_pixelpipe_t * | pipe, |
struct dt_develop_t * | dev | ||
) |
References dt_dev_pixelpipe_t::bypass_blendif, dt_dev_pixelpipe_t::changed, DT_DEBUG_DEV, DT_DEV_DETAIL_MASK_DEMOSAIC, DT_DEV_DETAIL_MASK_RAWPREPARE, DT_DEV_DETAIL_MASK_REQUIRED, DT_DEV_PIPE_REMOVE, DT_DEV_PIPE_SYNCH, DT_DEV_PIPE_TOP_CHANGED, DT_DEV_PIPE_UNCHANGED, dt_dev_pixelpipe_cleanup_nodes(), dt_dev_pixelpipe_create_nodes(), DT_DEV_PIXELPIPE_DISPLAY_NONE, dt_dev_pixelpipe_get_roi_out(), dt_dev_pixelpipe_synch_all, dt_dev_pixelpipe_synch_top(), dt_get_times(), dt_image_is_raw(), dt_image_is_rawprepare_supported(), dt_print(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_show_times_f(), dt_develop_t::history_mutex, dt_dev_pixelpipe_t::iheight, dt_dev_pixelpipe_t::image, dt_dev_pixelpipe_t::iwidth, dt_dev_pixelpipe_t::mask_display, dt_dev_pixelpipe_t::processed_height, dt_dev_pixelpipe_t::processed_width, dt_dev_pixelpipe_t::type, and dt_dev_pixelpipe_t::want_detail_mask.
Referenced by dt_dev_process_image_job(), and dt_dev_process_preview_job().
void dt_dev_pixelpipe_cleanup | ( | dt_dev_pixelpipe_t * | pipe | ) |
References dt_dev_pixelpipe_t::backbuf, dt_dev_pixelpipe_t::backbuf_mutex, dt_dev_pixelpipe_t::busy_mutex, DT_COLORSPACE_NONE, dt_dev_clear_rawdetail_mask(), dt_dev_pixelpipe_cleanup_nodes(), dt_masks_free_form(), dt_pthread_mutex_destroy(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_dev_pixelpipe_t::forms, dt_dev_pixelpipe_t::icc_filename, dt_dev_pixelpipe_t::icc_type, dt_dev_pixelpipe_t::output_backbuf, dt_dev_pixelpipe_t::output_backbuf_height, dt_dev_pixelpipe_t::output_backbuf_width, dt_dev_pixelpipe_t::output_imgid, UNKNOWN_IMAGE, and void().
Referenced by dt_dev_cleanup(), dt_dev_get_final_size(), dt_focus_draw_clusters(), and dt_imageio_export_with_flags().
void dt_dev_pixelpipe_cleanup_nodes | ( | dt_dev_pixelpipe_t * | pipe | ) |
References dt_dev_pixelpipe_iop_t::blendop_data, dt_dev_pixelpipe_iop_t::data, dt_dev_pixelpipe_iop_t::histogram, dt_dev_pixelpipe_t::iop, dt_dev_pixelpipe_t::iop_order_list, dt_dev_pixelpipe_t::nodes, and dt_dev_pixelpipe_iop_t::raster_masks.
Referenced by dt_dev_pixelpipe_change(), dt_dev_pixelpipe_cleanup(), and leave().
void dt_dev_pixelpipe_create_nodes | ( | dt_dev_pixelpipe_t * | pipe, |
dt_develop_t * | dev | ||
) |
References dt_free_align_ptr, dt_iop_init_pipe(), dt_ioppr_iop_order_copy_deep(), DT_REQUEST_ONLY_IN_GUI, dt_dev_pixelpipe_iop_t::enabled, FALSE, dt_dev_pixelpipe_t::iheight, dt_develop_t::iop, dt_dev_pixelpipe_t::iop, dt_develop_t::iop_order_list, dt_dev_pixelpipe_t::iop_order_list, dt_dev_pixelpipe_t::iscale, dt_dev_pixelpipe_t::iwidth, dt_dev_pixelpipe_t::nodes, and TYPE_FLOAT.
Referenced by dt_dev_get_final_size(), dt_dev_pixelpipe_change(), dt_focus_draw_clusters(), and dt_imageio_export_with_flags().
void dt_dev_pixelpipe_disable_after | ( | dt_dev_pixelpipe_t * | pipe, |
const char * | op | ||
) |
References dt_dev_pixelpipe_iop_t::data, dt_dev_pixelpipe_iop_t::enabled, and dt_dev_pixelpipe_t::nodes.
Referenced by _filter_pipeline().
void dt_dev_pixelpipe_disable_before | ( | dt_dev_pixelpipe_t * | pipe, |
const char * | op | ||
) |
References dt_dev_pixelpipe_iop_t::data, dt_dev_pixelpipe_iop_t::enabled, and dt_dev_pixelpipe_t::nodes.
Referenced by _filter_pipeline().
void dt_dev_pixelpipe_get_roi_in | ( | dt_dev_pixelpipe_t * | pipe, |
struct dt_develop_t * | dev, | ||
const struct dt_iop_roi_t | roi_out | ||
) |
void dt_dev_pixelpipe_get_roi_out | ( | dt_dev_pixelpipe_t * | pipe, |
struct dt_develop_t * | dev, | ||
const int | width_in, | ||
const int | height_in, | ||
int * | width, | ||
int * | height | ||
) |
References dt_dev_pixelpipe_iop_t::data, dt_dev_pixelpipe_activemodule_disables_currentmodule(), height, dt_iop_roi_t::height, dt_dev_pixelpipe_t::iop, dt_dev_pixelpipe_t::nodes, width, and dt_iop_roi_t::width.
Referenced by dt_dev_get_final_size(), dt_dev_pixelpipe_change(), dt_focus_draw_clusters(), and dt_imageio_export_with_flags().
gboolean dt_dev_pixelpipe_has_reentry | ( | dt_dev_pixelpipe_t * | pipe | ) |
References dt_dev_pixelpipe_t::reentry.
Referenced by dt_dev_process_image_job(), and dt_dev_process_preview_job().
int dt_dev_pixelpipe_init | ( | dt_dev_pixelpipe_t * | pipe | ) |
References DT_DEV_PIXELPIPE_FULL, dt_dev_pixelpipe_init_cached(), dt_dev_pixelpipe_t::store_all_raster_masks, TRUE, and dt_dev_pixelpipe_t::type.
Referenced by dt_dev_init().
int dt_dev_pixelpipe_init_cached | ( | dt_dev_pixelpipe_t * | pipe | ) |
References dt_dev_pixelpipe_t::backbuf, dt_dev_pixelpipe_t::backbuf_height, dt_dev_pixelpipe_t::backbuf_mutex, dt_dev_pixelpipe_t::backbuf_scale, dt_dev_pixelpipe_t::backbuf_width, dt_dev_pixelpipe_t::backbuf_zoom_x, dt_dev_pixelpipe_t::backbuf_zoom_y, dt_dev_pixelpipe_t::busy_mutex, dt_dev_pixelpipe_t::bypass_blendif, dt_dev_pixelpipe_t::changed, dt_dev_pixelpipe_t::devid, dt_atomic_set_int(), DT_COLORSPACE_NONE, DT_DEV_DETAIL_MASK_NONE, DT_DEV_PIPE_UNCHANGED, DT_DEV_PIXELPIPE_DIRTY, DT_DEV_PIXELPIPE_DISPLAY_NONE, dt_dev_pixelpipe_reset_reentry(), DT_INTENT_LAST, dt_pthread_mutex_init(), FALSE, dt_dev_pixelpipe_t::flush_cache, dt_dev_pixelpipe_t::forms, dt_dev_pixelpipe_t::icc_filename, dt_dev_pixelpipe_t::icc_intent, dt_dev_pixelpipe_t::icc_type, dt_dev_pixelpipe_t::iheight, IMAGEIO_INT8, IMAGEIO_RGB, dt_dev_pixelpipe_t::input_profile_info, dt_dev_pixelpipe_t::input_timestamp, dt_dev_pixelpipe_t::iop, dt_dev_pixelpipe_t::iop_order_list, dt_dev_pixelpipe_t::iwidth, dt_dev_pixelpipe_t::last_history_hash, dt_dev_pixelpipe_t::levels, dt_dev_pixelpipe_t::mask_display, dt_dev_pixelpipe_t::nodes, dt_dev_pixelpipe_t::opencl_error, dt_dev_pixelpipe_t::output_backbuf, dt_dev_pixelpipe_t::output_backbuf_height, dt_dev_pixelpipe_t::output_backbuf_width, dt_dev_pixelpipe_t::output_imgid, dt_dev_pixelpipe_t::output_profile_info, dt_dev_pixelpipe_t::processed_height, dt_dev_pixelpipe_t::processed_width, dt_dev_pixelpipe_t::processing, dt_dev_pixelpipe_t::rawdetail_mask_data, dt_dev_pixelpipe_t::running, dt_dev_pixelpipe_t::shutdown, dt_dev_pixelpipe_t::status, dt_dev_pixelpipe_t::store_all_raster_masks, dt_dev_pixelpipe_t::tiling, UNKNOWN_IMAGE, dt_dev_pixelpipe_t::want_detail_mask, and dt_dev_pixelpipe_t::work_profile_info.
Referenced by dt_dev_pixelpipe_init(), dt_dev_pixelpipe_init_dummy(), dt_dev_pixelpipe_init_export(), dt_dev_pixelpipe_init_preview(), and dt_dev_pixelpipe_init_thumbnail().
int dt_dev_pixelpipe_init_dummy | ( | dt_dev_pixelpipe_t * | pipe, |
int32_t | width, | ||
int32_t | height | ||
) |
References dt_dev_pixelpipe_init_cached(), DT_DEV_PIXELPIPE_THUMBNAIL, and dt_dev_pixelpipe_t::type.
Referenced by dt_dev_get_final_size(), and dt_focus_draw_clusters().
int dt_dev_pixelpipe_init_export | ( | dt_dev_pixelpipe_t * | pipe, |
int32_t | width, | ||
int32_t | height, | ||
int | levels, | ||
gboolean | store_masks | ||
) |
int dt_dev_pixelpipe_init_preview | ( | dt_dev_pixelpipe_t * | pipe | ) |
References dt_dev_pixelpipe_init_cached(), DT_DEV_PIXELPIPE_PREVIEW, dt_dev_pixelpipe_t::store_all_raster_masks, TRUE, and dt_dev_pixelpipe_t::type.
Referenced by dt_dev_init().
int dt_dev_pixelpipe_init_thumbnail | ( | dt_dev_pixelpipe_t * | pipe, |
int32_t | width, | ||
int32_t | height | ||
) |
References dt_dev_pixelpipe_init_cached(), DT_DEV_PIXELPIPE_THUMBNAIL, and dt_dev_pixelpipe_t::type.
Referenced by dt_imageio_export_with_flags().
int dt_dev_pixelpipe_process | ( | dt_dev_pixelpipe_t * | pipe, |
dt_develop_t * | dev, | ||
int | x, | ||
int | y, | ||
int | width, | ||
int | height, | ||
double | scale | ||
) |
References _last_node_in_pipe(), _node_hash(), _pipe_type_to_str(), _print_opencl_errors(), dt_dev_pixelpipe_t::backbuf, dt_dev_pixelpipe_t::backbuf_hash, dt_dev_pixelpipe_t::backbuf_height, dt_dev_pixelpipe_t::backbuf_width, darktable, dt_dev_pixelpipe_t::devid, dt_atomic_get_int(), dt_capabilities_remove(), DT_DEBUG_MEMORY, DT_DEBUG_OPENCL, dt_dev_pixelpipe_cache_print(), dt_dev_pixelpipe_get_roi_in(), dt_dev_pixelpipe_process_rec(), dt_get_times(), dt_iop_nap(), dt_masks_dup_forms_deep(), dt_masks_free_form(), dt_opencl_check_tuning(), dt_opencl_events_flush(), dt_opencl_events_reset(), dt_opencl_lock_device(), DT_OPENCL_MAX_ERRORS, dt_opencl_unlock_device(), dt_opencl_update_settings(), dt_pixelpipe_get_global_hash(), dt_print(), dt_print_mem_usage(), dt_show_times(), dt_opencl_t::error_count, FALSE, dt_dev_pixelpipe_t::flush_cache, dt_develop_t::forms, dt_dev_pixelpipe_t::forms, height, dt_dev_pixelpipe_t::iop, KILL_SWITCH_PIPE, dt_dev_pixelpipe_t::nodes, darktable_t::opencl, dt_dev_pixelpipe_t::opencl_enabled, dt_dev_pixelpipe_t::opencl_error, darktable_t::pixelpipe_cache, dt_dev_pixelpipe_t::shutdown, dt_opencl_t::stopped, TRUE, dt_dev_pixelpipe_t::type, darktable_t::unmuted, void(), and width.
Referenced by dt_dev_pixelpipe_process_no_gamma(), dt_dev_process_image_job(), dt_dev_process_preview_job(), and dt_imageio_export_with_flags().
int dt_dev_pixelpipe_process_no_gamma | ( | dt_dev_pixelpipe_t * | pipe, |
dt_develop_t * | dev, | ||
int | x, | ||
int | y, | ||
int | width, | ||
int | height, | ||
double | scale | ||
) |
References dt_dev_pixelpipe_iop_t::data, dt_dev_pixelpipe_process(), dt_dev_pixelpipe_iop_t::enabled, height, dt_dev_pixelpipe_t::nodes, and width.
Referenced by dt_imageio_export_with_flags().
|
static |
References _init_base_buffer(), _node_hash(), _pipe_type_to_str(), _print_nan_debug(), _print_perf_debug(), _sample_all(), bpp, darktable, dt_dev_pixelpipe_iop_t::data, DEVELOP_MASK_DISABLED, dt_dev_pixelpipe_t::dsc, DT_DEBUG_NAN, DT_DEBUG_PIPE, dt_dev_pixel_pipe_cache_auto_destroy_apply(), dt_dev_pixelpipe_cache_flag_auto_destroy(), dt_dev_pixelpipe_cache_get(), dt_dev_pixelpipe_cache_get_existing(), dt_dev_pixelpipe_cache_get_hash_data(), dt_dev_pixelpipe_cache_rdlock_entry(), dt_dev_pixelpipe_cache_ref_count_entry(), dt_dev_pixelpipe_cache_remove(), dt_dev_pixelpipe_cache_wrlock_entry(), DT_DEV_PIXELPIPE_DISPLAY_NONE, DT_DEV_PIXELPIPE_PREVIEW, dt_dev_pixelpipe_process_rec(), dt_get_times(), dt_iop_buffer_dsc_to_bpp(), dt_iop_nap(), dt_print(), dt_show_times_f(), error(), dt_develop_tiling_t::factor, FALSE, get_output_format(), dt_iop_roi_t::height, IOP_TAG_DISTORT, KILL_SWITCH_ABORT, KILL_SWITCH_AND_FLUSH_CACHE, dt_dev_pixelpipe_t::mask_display, dt_develop_tiling_t::maxbuf, dt_iop_module_t::multi_name, name, dt_iop_module_t::op, dt_develop_tiling_t::overhead, darktable_t::pixelpipe_cache, PIXELPIPE_FLOW_HISTOGRAM_NONE, PIXELPIPE_FLOW_NONE, pixelpipe_process_on_CPU(), dt_dev_pixelpipe_t::reentry, tiling_callback_blendop(), TRUE, dt_dev_pixelpipe_t::type, darktable_t::unmuted, and dt_iop_roi_t::width.
Referenced by dt_dev_pixelpipe_process(), and dt_dev_pixelpipe_process_rec().
void dt_dev_pixelpipe_reset_reentry | ( | dt_dev_pixelpipe_t * | pipe | ) |
void dt_dev_pixelpipe_set_icc | ( | dt_dev_pixelpipe_t * | pipe, |
dt_colorspaces_color_profile_type_t | icc_type, | ||
const gchar * | icc_filename, | ||
dt_iop_color_intent_t | icc_intent | ||
) |
References dt_dev_pixelpipe_t::icc_filename, dt_dev_pixelpipe_t::icc_intent, and dt_dev_pixelpipe_t::icc_type.
Referenced by dt_imageio_export_with_flags().
void dt_dev_pixelpipe_set_input | ( | dt_dev_pixelpipe_t * | pipe, |
dt_develop_t * | dev, | ||
int32_t | imgid, | ||
int | width, | ||
int | height, | ||
float | iscale, | ||
dt_mipmap_size_t | size | ||
) |
References dt_dev_pixelpipe_t::dsc, dt_dev_pixelpipe_reset_reentry(), get_output_format(), height, dt_dev_pixelpipe_t::iheight, dt_dev_pixelpipe_t::image, dt_develop_t::image_storage, dt_dev_pixelpipe_t::imgid, iscale, dt_dev_pixelpipe_t::iscale, dt_dev_pixelpipe_t::iwidth, size, dt_dev_pixelpipe_t::size, and width.
Referenced by dt_dev_get_final_size(), dt_dev_process_image_job(), dt_dev_process_preview_job(), dt_focus_draw_clusters(), and dt_imageio_export_with_flags().
gboolean dt_dev_pixelpipe_set_reentry | ( | dt_dev_pixelpipe_t * | pipe, |
uint64_t | hash | ||
) |
Set the re-entry pipeline flag, only if no object is already capturing it. Re-entered pipelines run with cache disabled, but without flushing the whole cache. This was designed for cases where raster masks references are lost on pipeline, for example when going to lighttable and re-entering darkroom (pipe caches are not flushed for performance, if re-entering the same image), as to trigger a full pipe run and reinit references.
It can be used for any case where a full pipeline recompute is needed once, based on runtime module requirements, but a full cache flush would be overkill.
NOTE: in main darkroom pipe, the coordinates of the ROI can change between runs from the same thread.
pipe | |
hash | Unique ID of the object attempting capture the re-entry flag. This should stay constant between 2 pipeline runs from the same thread. |
References DT_DEBUG_DEV, dt_print(), FALSE, dt_dev_pixelpipe_t::reentry, dt_dev_pixelpipe_t::reentry_hash, and TRUE.
Referenced by dt_dev_get_raster_mask().
void dt_dev_pixelpipe_synch | ( | dt_dev_pixelpipe_t * | pipe, |
dt_develop_t * | dev, | ||
GList * | history | ||
) |
References _commit_history_to_node(), dt_dev_pixelpipe_iop_t::data, and dt_dev_pixelpipe_t::nodes.
Referenced by dt_dev_pixelpipe_synch_top().
void dt_dev_pixelpipe_synch_all_real | ( | dt_dev_pixelpipe_t * | pipe, |
dt_develop_t * | dev, | ||
const char * | caller_func | ||
) |
Find the last history item matching each pipeline node (module), in the order of pipeline execution. This is super important because modules providing raster masks need to be inited before modules using them, in the order of pipeline nodes. But history holds no guaranty that raster masks providers will be older than raster masks users, especially after history compression. So reading in history order is not an option.
pipe | |
dev | |
caller_func |
References _commit_history_to_node(), dt_dev_pixelpipe_iop_t::data, DT_DEBUG_DEV, DT_DEBUG_PIPE, dt_dev_get_history_end(), dt_iop_commit_params(), dt_print(), dt_dev_pixelpipe_iop_t::enabled, FALSE, dt_dev_pixelpipe_iop_t::global_hash, dt_dev_history_item_t::hash, dt_dev_pixelpipe_iop_t::hash, dt_develop_t::history, dt_dev_pixelpipe_t::last_history_hash, dt_dev_pixelpipe_t::nodes, TRUE, and dt_dev_pixelpipe_t::type.
void dt_dev_pixelpipe_synch_top | ( | dt_dev_pixelpipe_t * | pipe, |
dt_develop_t * | dev | ||
) |
gboolean dt_dev_pixelpipe_unset_reentry | ( | dt_dev_pixelpipe_t * | pipe, |
uint64_t | hash | ||
) |
Remove the re-entry pipeline flag, only if the object identifier is the one that set it. See dt_dev_pixelpipe_set_reentry
.
pipe | |
hash | Unique ID of the object attempting capture the re-entry flag. This should stay constant between 2 pipeline runs from the same thread. |
References DT_DEBUG_DEV, dt_print(), FALSE, dt_dev_pixelpipe_t::reentry, dt_dev_pixelpipe_t::reentry_hash, and TRUE.
Referenced by dt_dev_get_raster_mask().
gboolean dt_dev_write_rawdetail_mask | ( | dt_dev_pixelpipe_iop_t * | piece, |
float *const | rgb, | ||
const dt_iop_roi_t *const | roi_in, | ||
const int | mode | ||
) |
References dt_alloc_align_float(), DT_DEBUG_MASKS, dt_dev_clear_rawdetail_mask(), DT_DEV_DETAIL_MASK_RAWPREPARE, DT_DEV_DETAIL_MASK_REQUIRED, dt_free_align, dt_masks_calc_rawdetail_mask(), dt_print(), error(), FALSE, height, dt_iop_roi_t::height, dt_dev_pixelpipe_iop_t::pipe, TRUE, width, and dt_iop_roi_t::width.
void dt_pixelpipe_get_global_hash | ( | dt_dev_pixelpipe_t * | pipe, |
dt_develop_t * | dev | ||
) |
References _default_pipe_hash(), dt_dev_pixelpipe_iop_t::blendop_hash, dt_dev_pixelpipe_iop_t::bypass_cache, dt_dev_pixelpipe_iop_t::data, DT_DEBUG_PIPE, dt_hash(), dt_print(), dt_dev_pixelpipe_iop_t::enabled, FALSE, dt_dev_pixelpipe_iop_t::global_hash, dt_dev_pixelpipe_iop_t::global_mask_hash, dt_dev_pixelpipe_iop_t::hash, IOP_TAG_DISTORT, dt_dev_pixelpipe_t::nodes, dt_dev_pixelpipe_iop_t::planned_roi_in, dt_dev_pixelpipe_iop_t::planned_roi_out, and dt_dev_pixelpipe_t::type.
Referenced by dt_dev_pixelpipe_process().
|
static |
References dt_image_t::buf_dsc, dt_image_is_raw(), dt_dev_pixelpipe_t::image, and dt_iop_buffer_dsc_t::processed_maximum.
Referenced by dt_dev_pixelpipe_process_rec(), and dt_dev_pixelpipe_set_input().
|
static |
References dt_histogram_helper(), dt_histogram_max_helper(), dt_ioppr_get_pipe_work_profile_info(), dt_iop_roi_t::height, dt_dev_pixelpipe_iop_t::histogram_params, dt_dev_pixelpipe_iop_t::histogram_stats, dt_dev_pixelpipe_iop_t::pipe, dt_dev_histogram_collection_params_t::roi, dt_histogram_roi_t::width, and dt_iop_roi_t::width.
Referenced by collect_histogram_on_CPU().
|
static |
References _copy_buffer(), _get_backuf(), dt_backbuf_t::bpp, bpp, dt_backbuf_t::buffer, dt_alloc_align, dt_free_align, dt_get_times(), dt_show_times_f(), dt_backbuf_t::hash, dt_backbuf_t::height, dt_iop_roi_t::height, dt_iop_module_t::op, dt_backbuf_t::width, and dt_iop_roi_t::width.
Referenced by _sample_all().
|
static |
|
static |
References dt_dev_pixelpipe_t::backbuf_height, dt_dev_pixelpipe_t::backbuf_width, dt_colorpicker_sample_t::box, dt_lib_t::colorpicker, darktable, darktable_t::develop, dt_dev_distort_backtransform_plus(), DT_DEV_TRANSFORM_DIR_FORW_EXCL, DT_DEV_TRANSFORM_DIR_FORW_INCL, DT_LIB_COLORPICKER_SIZE_BOX, DT_LIB_COLORPICKER_SIZE_POINT, height, dt_iop_roi_t::height, dt_iop_module_t::iop_order, darktable_t::lib, MAX, MIN, PIXELPIPE_PICKER_INPUT, dt_colorpicker_sample_t::point, dt_develop_t::preview_pipe, dt_lib_t::primary_sample, dt_lib_t::proxy, dt_colorpicker_sample_t::size, width, dt_iop_roi_t::width, dt_iop_roi_t::x, and dt_iop_roi_t::y.
Referenced by pixelpipe_picker().
|
static |
References _transform_for_blend(), bpp, dt_iop_buffer_dsc_t::cst, dt_dev_pixelpipe_t::dsc, dt_develop_blend_colorspace(), dt_develop_blend_process(), dt_iop_buffer_dsc_to_bpp(), dt_ioppr_get_pipe_work_profile_info(), dt_ioppr_transform_image_colorspace(), dt_tiling_piece_fits_host_memory(), dt_iop_roi_t::height, IOP_CS_RAW, MAX, dt_iop_module_t::op, PIXELPIPE_FLOW_BLENDED_ON_CPU, PIXELPIPE_FLOW_BLENDED_ON_GPU, PIXELPIPE_FLOW_PROCESSED_ON_CPU, PIXELPIPE_FLOW_PROCESSED_ON_GPU, PIXELPIPE_FLOW_PROCESSED_WITH_TILING, dt_dev_pixelpipe_iop_t::process_tiling_ready, and dt_iop_roi_t::width.
Referenced by dt_dev_pixelpipe_process_rec().