Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
pixelpipe_hb.c File Reference
#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"
+ Include dependency graph for pixelpipe_hb.c:
+ This graph shows which files directly or indirectly include this file:

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)
 

Macro Definition Documentation

◆ KILL_SWITCH_ABORT

#define KILL_SWITCH_ABORT
Value:
if(dt_atomic_get_int(&pipe->shutdown)) \
{ \
if(*cl_mem_output != NULL) \
{ \
dt_opencl_release_mem_object(*cl_mem_output); \
*cl_mem_output = NULL; \
} \
dt_iop_nap(5000); \
pipe->status = DT_DEV_PIXELPIPE_DIRTY; \
return 1; \
}
int dt_atomic_get_int(dt_atomic_int *var)
Definition atomic.h:46
@ DT_DEV_PIXELPIPE_DIRTY
Definition pixelpipe_hb.h:114

◆ KILL_SWITCH_AND_FLUSH_CACHE

#define KILL_SWITCH_AND_FLUSH_CACHE
Value:
if(dt_atomic_get_int(&pipe->shutdown)) \
{ \
dt_dev_pixelpipe_cache_remove(darktable.pixelpipe_cache, hash, TRUE, output_entry); \
if(*cl_mem_output != NULL) \
{ \
dt_opencl_release_mem_object(*cl_mem_output); \
*cl_mem_output = NULL; \
} \
dt_iop_nap(5000); \
pipe->status = DT_DEV_PIXELPIPE_DIRTY; \
return 1; \
}
#define TRUE
Definition ashift_lsd.c:151
darktable_t darktable
Definition darktable.c:111
struct dt_dev_pixelpipe_cache_t * pixelpipe_cache
Definition darktable.h:556

◆ KILL_SWITCH_PIPE

#define KILL_SWITCH_PIPE
Value:
if(dt_atomic_get_int(&pipe->shutdown)) \
{ \
if(pipe->devid >= 0) \
{ \
dt_opencl_unlock_device(pipe->devid); \
pipe->devid = -1; \
} \
pipe->status = DT_DEV_PIXELPIPE_DIRTY; \
if(pipe->forms) g_list_free_full(pipe->forms, (void (*)(void *))dt_masks_free_form); \
dt_iop_nap(5000); \
return 1; \
}
void dt_iop_nap(int32_t usec)
Definition imageop.c:2431
void dt_masks_free_form(dt_masks_form_t *form)
Definition develop/masks/masks.c:982

Typedef Documentation

◆ dt_pixelpipe_flow_t

◆ dt_pixelpipe_picker_source_t

Enumeration Type Documentation

◆ dt_pixelpipe_flow_t

Enumerator
PIXELPIPE_FLOW_NONE 
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 
PIXELPIPE_FLOW_BLENDED_ON_CPU 
PIXELPIPE_FLOW_BLENDED_ON_GPU 

◆ dt_pixelpipe_picker_source_t

Enumerator
PIXELPIPE_PICKER_INPUT 
PIXELPIPE_PICKER_OUTPUT 

Function Documentation

◆ _commit_history_to_node()

◆ _copy_buffer()

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 
)
inlinestatic

References bpp, and height.

Referenced by _init_base_buffer(), and pixelpipe_get_histogram_backbuf().

◆ _default_pipe_hash()

◆ _dt_dev_raster_mask_check()

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 
)
static

Checks the validity of the raster mask source and target modules, outputs errors if necessary. Also tells the user what to do.

Parameters
source_piece
current_piece
target_module
Returns
gboolean TRUE when all is good, FALSE otherwise.

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().

◆ _get_backuf()

◆ _init_base_buffer()

◆ _last_node_in_pipe()

◆ _node_hash()

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 
)
static

◆ _pipe_type_to_str()

◆ _print_nan_debug()

◆ _print_opencl_errors()

static void _print_opencl_errors ( int  error,
dt_dev_pixelpipe_t pipe 
)
static

◆ _print_perf_debug()

◆ _sample_all()

◆ _sample_color_picker()

◆ _transform_for_blend()

static gboolean _transform_for_blend ( const dt_iop_module_t *const  self,
const dt_dev_pixelpipe_iop_t *const  piece 
)
static

◆ _transform_for_picker()

◆ _uint8_to_float()

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 
)
inlinestatic

References height, and width.

◆ collect_histogram_on_CPU()

◆ dt_dev_clear_rawdetail_mask()

◆ dt_dev_distort_detail_mask()

◆ dt_dev_get_raster_mask()

◆ dt_dev_pixelpipe_activemodule_disables_currentmodule()

◆ dt_dev_pixelpipe_change()

◆ dt_dev_pixelpipe_cleanup()

◆ dt_dev_pixelpipe_cleanup_nodes()

◆ dt_dev_pixelpipe_create_nodes()

◆ dt_dev_pixelpipe_disable_after()

void dt_dev_pixelpipe_disable_after ( dt_dev_pixelpipe_t pipe,
const char *  op 
)

◆ dt_dev_pixelpipe_disable_before()

void dt_dev_pixelpipe_disable_before ( dt_dev_pixelpipe_t pipe,
const char *  op 
)

◆ dt_dev_pixelpipe_get_roi_in()

◆ dt_dev_pixelpipe_get_roi_out()

◆ dt_dev_pixelpipe_has_reentry()

gboolean dt_dev_pixelpipe_has_reentry ( dt_dev_pixelpipe_t pipe)

◆ dt_dev_pixelpipe_init()

◆ dt_dev_pixelpipe_init_cached()

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().

◆ dt_dev_pixelpipe_init_dummy()

int dt_dev_pixelpipe_init_dummy ( dt_dev_pixelpipe_t pipe,
int32_t  width,
int32_t  height 
)

◆ dt_dev_pixelpipe_init_export()

int dt_dev_pixelpipe_init_export ( dt_dev_pixelpipe_t pipe,
int32_t  width,
int32_t  height,
int  levels,
gboolean  store_masks 
)

◆ dt_dev_pixelpipe_init_preview()

◆ dt_dev_pixelpipe_init_thumbnail()

int dt_dev_pixelpipe_init_thumbnail ( dt_dev_pixelpipe_t pipe,
int32_t  width,
int32_t  height 
)

◆ dt_dev_pixelpipe_process()

int dt_dev_pixelpipe_process ( dt_dev_pixelpipe_t pipe,
dt_develop_t dev,
int  x,
int  y,
int  width,
int  height,
double  scale 
)

◆ dt_dev_pixelpipe_process_no_gamma()

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 
)

◆ dt_dev_pixelpipe_process_rec()

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 
)
static
Todo:
: on CPU path and GPU path with tiling, when 2 modules taking different color spaces are back to back,

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().

◆ dt_dev_pixelpipe_reset_reentry()

◆ dt_dev_pixelpipe_set_icc()

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 
)

◆ dt_dev_pixelpipe_set_input()

◆ dt_dev_pixelpipe_set_reentry()

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.

Parameters
pipe
hashUnique ID of the object attempting capture the re-entry flag. This should stay constant between 2 pipeline runs from the same thread.
Returns
gboolean TRUE if the object could capture the flag

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().

◆ dt_dev_pixelpipe_synch()

void dt_dev_pixelpipe_synch ( dt_dev_pixelpipe_t pipe,
dt_develop_t dev,
GList *  history 
)

◆ dt_dev_pixelpipe_synch_all_real()

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.

Parameters
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.

◆ dt_dev_pixelpipe_synch_top()

◆ dt_dev_pixelpipe_unset_reentry()

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.

Parameters
pipe
hashUnique ID of the object attempting capture the re-entry flag. This should stay constant between 2 pipeline runs from the same thread.
Returns
gboolean TRUE if the object could capture the flag

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().

◆ dt_dev_write_rawdetail_mask()

◆ dt_pixelpipe_get_global_hash()

◆ get_output_format()

◆ histogram_collect()

◆ pixelpipe_get_histogram_backbuf()

◆ pixelpipe_picker()

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

◆ pixelpipe_picker_helper()

◆ pixelpipe_process_on_CPU()