Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
iop_order.c File Reference
#include "common/darktable.h"
#include "common/iop_order.h"
#include "common/styles.h"
#include "common/debug.h"
#include "develop/imageop.h"
#include "develop/pixelpipe.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+ Include dependency graph for iop_order.c:

Macros

#define DT_IOP_ORDER_VERSION   5
 
#define DT_IOP_ORDER_INFO   (darktable.unmuted & DT_DEBUG_IOPORDER)
 

Functions

static void _ioppr_reset_iop_order (GList *iop_order_list)
 
const char * dt_iop_order_string (const dt_iop_order_t order)
 
static void_dup_iop_order_entry (const void *src, gpointer data)
 
static int _count_entries_operation (GList *e_list, const char *operation)
 
static GList * _insert_before (GList *iop_order_list, const char *module, const char *new_module)
 
dt_iop_order_t dt_ioppr_get_iop_order_version (const int32_t imgid)
 
GList * dt_ioppr_get_iop_order_rules ()
 
GList * dt_ioppr_get_iop_order_link (GList *iop_order_list, const char *op_name, const int multi_priority)
 
dt_iop_order_entry_tdt_ioppr_get_iop_order_entry (GList *iop_order_list, const char *op_name, const int multi_priority)
 
int dt_ioppr_get_iop_order (GList *iop_order_list, const char *op_name, const int multi_priority)
 
gint dt_sort_iop_list_by_order (gconstpointer a, gconstpointer b)
 
gint dt_sort_iop_list_by_order_f (gconstpointer a, gconstpointer b)
 
dt_iop_order_t dt_ioppr_get_iop_order_list_kind (GList *iop_order_list)
 
gboolean dt_ioppr_has_multiple_instances (GList *iop_order_list)
 
gboolean dt_ioppr_write_iop_order (const dt_iop_order_t kind, GList *iop_order_list, const int32_t imgid)
 
gboolean dt_ioppr_write_iop_order_list (GList *iop_order_list, const int32_t imgid)
 
GList * _table_to_list (const dt_iop_order_entry_t entries[])
 
GList * dt_ioppr_get_iop_order_list_version (dt_iop_order_t version)
 
gboolean dt_ioppr_has_iop_order_list (int32_t imgid)
 
GList * dt_ioppr_get_iop_order_list (int32_t imgid, gboolean sorted)
 
void dt_ioppr_resync_iop_list (dt_develop_t *dev)
 
void dt_ioppr_resync_modules_order (dt_develop_t *dev)
 
void dt_ioppr_set_default_iop_order (dt_develop_t *dev, const int32_t imgid)
 
void dt_ioppr_migrate_iop_order (struct dt_develop_t *dev, const int32_t imgid)
 
void dt_ioppr_change_iop_order (struct dt_develop_t *dev, const int32_t imgid, GList *new_iop_list)
 
GList * dt_ioppr_extract_multi_instances_list (GList *iop_order_list)
 
GList * dt_ioppr_merge_module_multi_instance_iop_order_list (GList *iop_order_list, const char *operation, GList *multi_instance_list)
 
GList * dt_ioppr_merge_multi_instance_iop_order_list (GList *iop_order_list, GList *multi_instance_list)
 
static void _count_iop_module (GList *iop, const char *operation, int *max_multi_priority, int *count, int *max_multi_priority_enabled, int *count_enabled)
 
static gboolean _operation_already_handled (GList *e_list, const char *operation)
 
int _get_multi_priority (dt_develop_t *dev, const char *operation, const int n, const gboolean only_disabled)
 
void dt_ioppr_update_for_entries (dt_develop_t *dev, GList *entry_list, gboolean append)
 
void dt_ioppr_update_for_style_items (dt_develop_t *dev, GList *st_items, gboolean append)
 
void dt_ioppr_update_for_modules (dt_develop_t *dev, GList *modules, gboolean append)
 
static dt_dev_history_item_t_ioppr_search_history_by_module (GList *history_list, dt_iop_module_t *mod)
 
void dt_ioppr_check_duplicate_iop_order (GList **_iop_list, GList *history_list)
 
int dt_ioppr_check_so_iop_order (GList *iop_list, GList *iop_order_list)
 
GList * dt_ioppr_iop_order_copy_deep (GList *iop_order_list)
 
gint dt_sort_iop_by_order (gconstpointer a, gconstpointer b)
 
gboolean dt_ioppr_check_can_move_before_iop (GList *iop_list, dt_iop_module_t *module, dt_iop_module_t *module_next)
 
gboolean dt_ioppr_check_can_move_after_iop (GList *iop_list, dt_iop_module_t *module, dt_iop_module_t *module_prev)
 
gboolean dt_ioppr_move_iop_before (struct dt_develop_t *dev, dt_iop_module_t *module, dt_iop_module_t *module_next)
 
gboolean dt_ioppr_move_iop_after (struct dt_develop_t *dev, dt_iop_module_t *module, dt_iop_module_t *module_prev)
 
void dt_ioppr_print_module_iop_order (GList *iop_list, const char *msg)
 
void dt_ioppr_print_history_iop_order (GList *history_list, const char *msg)
 
void dt_ioppr_print_iop_order (GList *iop_order_list, const char *msg)
 
static GList * _get_fence_modules_list (GList *iop_list)
 
static void _ioppr_check_rules (GList *iop_list, const int32_t imgid, const char *msg)
 
void dt_ioppr_insert_module_instance (struct dt_develop_t *dev, dt_iop_module_t *module)
 
int dt_ioppr_check_iop_order (dt_develop_t *dev, const int32_t imgid, const char *msg)
 
voiddt_ioppr_serialize_iop_order_list (GList *iop_order_list, size_t *size)
 
char * dt_ioppr_serialize_text_iop_order_list (GList *iop_order_list)
 
static gboolean _ioppr_sanity_check_iop_order (GList *list)
 
GList * dt_ioppr_deserialize_text_iop_order_list (const char *buf)
 
GList * dt_ioppr_deserialize_iop_order_list (const char *buf, size_t size)
 

Variables

const char * iop_order_string []
 
const dt_iop_order_entry_t legacy_order []
 
const dt_iop_order_entry_t v30_order []
 
const dt_iop_order_entry_t v30_jpg_order []
 

Macro Definition Documentation

◆ DT_IOP_ORDER_INFO

#define DT_IOP_ORDER_INFO   (darktable.unmuted & DT_DEBUG_IOPORDER)

◆ DT_IOP_ORDER_VERSION

#define DT_IOP_ORDER_VERSION   5

Function Documentation

◆ _count_entries_operation()

static int _count_entries_operation ( GList *  e_list,
const char *  operation 
)
static

◆ _count_iop_module()

static void _count_iop_module ( GList *  iop,
const char *  operation,
int *  max_multi_priority,
int *  count,
int *  max_multi_priority_enabled,
int *  count_enabled 
)
static

◆ _dup_iop_order_entry()

static void * _dup_iop_order_entry ( const void src,
gpointer  data 
)
static

◆ _get_fence_modules_list()

static GList * _get_fence_modules_list ( GList *  iop_list)
static

References IOP_FLAGS_FENCE.

Referenced by _ioppr_check_rules().

◆ _get_multi_priority()

int _get_multi_priority ( dt_develop_t dev,
const char *  operation,
const int  n,
const gboolean  only_disabled 
)

References FALSE, and dt_develop_t::iop.

Referenced by dt_ioppr_update_for_entries().

◆ _insert_before()

static GList * _insert_before ( GList *  iop_order_list,
const char *  module,
const char *  new_module 
)
static

◆ _ioppr_check_rules()

static void _ioppr_check_rules ( GList *  iop_list,
const int32_t  imgid,
const char *  msg 
)
static

◆ _ioppr_reset_iop_order()

◆ _ioppr_sanity_check_iop_order()

static gboolean _ioppr_sanity_check_iop_order ( GList *  list)
static

◆ _ioppr_search_history_by_module()

static dt_dev_history_item_t * _ioppr_search_history_by_module ( GList *  history_list,
dt_iop_module_t mod 
)
static

◆ _operation_already_handled()

static gboolean _operation_already_handled ( GList *  e_list,
const char *  operation 
)
static

References FALSE, and TRUE.

Referenced by dt_ioppr_update_for_entries().

◆ _table_to_list()

◆ dt_iop_order_string()

const char * dt_iop_order_string ( const dt_iop_order_t  order)

return the name string for that dy_iop_order

References DT_IOP_ORDER_LAST, and iop_order_string.

Referenced by _gui_styles_dialog_run(), dt_gui_hist_dialog_new(), get_query_string(), list_view(), and update().

◆ dt_ioppr_change_iop_order()

◆ dt_ioppr_check_can_move_after_iop()

gboolean dt_ioppr_check_can_move_after_iop ( GList *  iop_list,
struct dt_iop_module_t module,
struct dt_iop_module_t module_prev 
)

◆ dt_ioppr_check_can_move_before_iop()

gboolean dt_ioppr_check_can_move_before_iop ( GList *  iop_list,
struct dt_iop_module_t module,
struct dt_iop_module_t module_next 
)

◆ dt_ioppr_check_duplicate_iop_order()

void dt_ioppr_check_duplicate_iop_order ( GList **  _iop_list,
GList *  history_list 
)

◆ dt_ioppr_check_iop_order()

◆ dt_ioppr_check_so_iop_order()

int dt_ioppr_check_so_iop_order ( GList *  iop_list,
GList *  iop_order_list 
)

returns 1 if there's a module_so without a iop_order defined

References dt_ioppr_get_iop_order_entry().

Referenced by dt_init().

◆ dt_ioppr_deserialize_iop_order_list()

GList * dt_ioppr_deserialize_iop_order_list ( const char *  buf,
size_t  size 
)

returns the iop_order_list from the serialized form found in buf (blob in preset table)

References _ioppr_reset_iop_order(), error(), dt_iop_order_entry_t::instance, dt_iop_order_entry_t::iop_order, dt_iop_order_entry_t::o, dt_iop_order_entry_t::operation, and size.

Referenced by _dev_auto_apply_presets(), set_params(), and update().

◆ dt_ioppr_deserialize_text_iop_order_list()

◆ dt_ioppr_extract_multi_instances_list()

GList * dt_ioppr_extract_multi_instances_list ( GList *  iop_order_list)

extract all modules with multi-instances

References _count_entries_operation(), and _dup_iop_order_entry().

Referenced by dt_ioppr_change_iop_order(), and dt_styles_apply_to_image().

◆ dt_ioppr_get_iop_order()

int dt_ioppr_get_iop_order ( GList *  iop_order_list,
const char *  op_name,
const int  multi_priority 
)

◆ dt_ioppr_get_iop_order_entry()

dt_iop_order_entry_t * dt_ioppr_get_iop_order_entry ( GList *  iop_order_list,
const char *  op_name,
const int  multi_priority 
)

returns the dt_iop_order_entry_t of iop_order_list with operation = op_name

References dt_ioppr_get_iop_order_link().

Referenced by dt_ioppr_check_so_iop_order(), and dt_ioppr_get_iop_order().

◆ dt_ioppr_get_iop_order_link()

GList * dt_ioppr_get_iop_order_link ( GList *  iop_order_list,
const char *  op_name,
const int  multi_priority 
)

◆ dt_ioppr_get_iop_order_list()

◆ dt_ioppr_get_iop_order_list_kind()

dt_iop_order_t dt_ioppr_get_iop_order_list_kind ( GList *  iop_order_list)

returns the kind of the list by looking at the order of the modules, it is either one of the built-in version or a customr order

References DT_IOP_ORDER_CUSTOM, DT_IOP_ORDER_LEGACY, DT_IOP_ORDER_V30, DT_IOP_ORDER_V30_JPG, FALSE, legacy_order, TRUE, v30_jpg_order, and v30_order.

Referenced by _upgrade_library_schema_step(), dt_ioppr_write_iop_order_list(), and update().

◆ dt_ioppr_get_iop_order_list_version()

GList * dt_ioppr_get_iop_order_list_version ( dt_iop_order_t  version)

◆ dt_ioppr_get_iop_order_rules()

GList * dt_ioppr_get_iop_order_rules ( )

◆ dt_ioppr_get_iop_order_version()

dt_iop_order_t dt_ioppr_get_iop_order_version ( const int32_t  imgid)

return the iop-order-version used by imgid (DT_IOP_ORDER_V30 if unknown iop-order-version)

References darktable, darktable_t::db, dt_database_get(), DT_DEBUG_SQLITE3_BIND_INT, DT_DEBUG_SQLITE3_PREPARE_V2, and DT_IOP_ORDER_V30.

Referenced by _exif_xmp_read_data(), _exif_xmp_read_data_export(), _gui_styles_dialog_run(), and dt_gui_hist_dialog_new().

◆ dt_ioppr_has_iop_order_list()

gboolean dt_ioppr_has_iop_order_list ( int32_t  imgid)

returns true if imgid has an iop-order set

References darktable, darktable_t::db, dt_database_get(), DT_DEBUG_SQLITE3_BIND_INT, DT_DEBUG_SQLITE3_PREPARE_V2, and FALSE.

Referenced by _dev_auto_apply_presets().

◆ dt_ioppr_has_multiple_instances()

gboolean dt_ioppr_has_multiple_instances ( GList *  iop_order_list)

For a non custom order, returns TRUE if iop_order_list has multiple instances grouped together

References FALSE, and TRUE.

Referenced by _exif_xmp_read_data(), _exif_xmp_read_data_export(), and dt_ioppr_write_iop_order().

◆ dt_ioppr_insert_module_instance()

void dt_ioppr_insert_module_instance ( struct dt_develop_t dev,
struct dt_iop_module_t module 
)

◆ dt_ioppr_iop_order_copy_deep()

GList * dt_ioppr_iop_order_copy_deep ( GList *  iop_order_list)

◆ dt_ioppr_merge_module_multi_instance_iop_order_list()

GList * dt_ioppr_merge_module_multi_instance_iop_order_list ( GList *  iop_order_list,
const char *  operation,
GList *  multi_instance_list 
)

◆ dt_ioppr_merge_multi_instance_iop_order_list()

GList * dt_ioppr_merge_multi_instance_iop_order_list ( GList *  iop_order_list,
GList *  multi_instance_list 
)

merge all modules with multi-instances as extracted with routine above into a canonical iop-order list

References dt_ioppr_iop_order_copy_deep(), dt_ioppr_merge_module_multi_instance_iop_order_list(), and dt_iop_order_entry_t::operation.

Referenced by dt_ioppr_change_iop_order(), and dt_styles_apply_to_image().

◆ dt_ioppr_migrate_iop_order()

void dt_ioppr_migrate_iop_order ( struct dt_develop_t dev,
const int32_t  imgid 
)

◆ dt_ioppr_move_iop_after()

◆ dt_ioppr_move_iop_before()

gboolean dt_ioppr_move_iop_before ( struct dt_develop_t dev,
struct dt_iop_module_t module,
struct dt_iop_module_t module_next 
)

◆ dt_ioppr_print_history_iop_order()

void dt_ioppr_print_history_iop_order ( GList *  history_list,
const char *  msg 
)

◆ dt_ioppr_print_iop_order()

void dt_ioppr_print_iop_order ( GList *  iop_order_list,
const char *  msg 
)

◆ dt_ioppr_print_module_iop_order()

void dt_ioppr_print_module_iop_order ( GList *  iop_list,
const char *  msg 
)

◆ dt_ioppr_resync_iop_list()

◆ dt_ioppr_resync_modules_order()

◆ dt_ioppr_serialize_iop_order_list()

void * dt_ioppr_serialize_iop_order_list ( GList *  iop_order_list,
size_t *  size 
)

serialize list, used for presets

References size.

Referenced by get_params(), and init_presets().

◆ dt_ioppr_serialize_text_iop_order_list()

char * dt_ioppr_serialize_text_iop_order_list ( GList *  iop_order_list)

◆ dt_ioppr_set_default_iop_order()

void dt_ioppr_set_default_iop_order ( struct dt_develop_t dev,
const int32_t  imgid 
)

◆ dt_ioppr_update_for_entries()

void dt_ioppr_update_for_entries ( struct dt_develop_t dev,
GList *  entry_list,
gboolean  append 
)

◆ dt_ioppr_update_for_modules()

◆ dt_ioppr_update_for_style_items()

◆ dt_ioppr_write_iop_order()

◆ dt_ioppr_write_iop_order_list()

gboolean dt_ioppr_write_iop_order_list ( GList *  iop_order_list,
const int32_t  imgid 
)

◆ dt_sort_iop_by_order()

gint dt_sort_iop_by_order ( gconstpointer  a,
gconstpointer  b 
)

◆ dt_sort_iop_list_by_order()

gint dt_sort_iop_list_by_order ( gconstpointer  a,
gconstpointer  b 
)

◆ dt_sort_iop_list_by_order_f()

gint dt_sort_iop_list_by_order_f ( gconstpointer  a,
gconstpointer  b 
)

Variable Documentation

◆ iop_order_string

const char* iop_order_string[]
Initial value:
=
{
N_("custom"),
N_("legacy"),
N_("v3.0 RAW"),
}

Note : we do not use finite-math-only and fast-math because divisions by zero are not manually avoided in the code fp-contract=fast enables hardware-accelerated Fused Multiply-Add the rest is loop reorganization and vectorization optimization

Referenced by dt_iop_order_string().

◆ legacy_order

◆ v30_jpg_order

◆ v30_order