Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
tonecurve.c File Reference
#include <assert.h>
#include <math.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include "bauhaus/bauhaus.h"
#include "common/opencl.h"
#include "common/colorspaces_inline_conversions.h"
#include "common/rgb_norms.h"
#include "control/control.h"
#include "develop/develop.h"
#include "develop/imageop.h"
#include "develop/imageop_math.h"
#include "develop/imageop_gui.h"
#include "dtgtk/drawingarea.h"
#include "dtgtk/paint.h"
#include "gui/draw.h"
#include "gui/gtk.h"
#include "gui/presets.h"
#include "gui/color_picker_proxy.h"
#include "iop/iop_api.h"
#include "libs/colorpicker.h"
+ Include dependency graph for iop/tonecurve.c:

Data Structures

struct  dt_iop_tonecurve_node_t
 
struct  dt_iop_tonecurve_params1_t
 
struct  dt_iop_tonecurve_params3_t
 
struct  dt_iop_tonecurve_params4_t
 
struct  dt_iop_tonecurve_params_t
 
struct  dt_iop_tonecurve_gui_data_t
 
struct  dt_iop_tonecurve_data_t
 
struct  dt_iop_tonecurve_global_data_t
 

Macros

#define DT_GUI_CURVE_EDITOR_INSET   DT_PIXEL_APPLY_DPI(1)
 
#define DT_GUI_CURVE_INFL   .3f
 
#define DT_IOP_TONECURVE_RES   256
 
#define DT_IOP_TONECURVE_MAXNODES   20
 
#define TONECURVE_DEFAULT_STEP   (0.001f)
 

Typedefs

typedef enum tonecurve_channel_t tonecurve_channel_t
 
typedef struct dt_iop_tonecurve_node_t dt_iop_tonecurve_node_t
 
typedef enum dt_iop_tonecurve_autoscale_t dt_iop_tonecurve_autoscale_t
 
typedef struct dt_iop_tonecurve_params1_t dt_iop_tonecurve_params1_t
 
typedef struct dt_iop_tonecurve_params3_t dt_iop_tonecurve_params3_t
 
typedef struct dt_iop_tonecurve_params4_t dt_iop_tonecurve_params4_t
 
typedef struct dt_iop_tonecurve_params_t dt_iop_tonecurve_params_t
 
typedef struct dt_iop_tonecurve_gui_data_t dt_iop_tonecurve_gui_data_t
 
typedef struct dt_iop_tonecurve_data_t dt_iop_tonecurve_data_t
 
typedef struct dt_iop_tonecurve_global_data_t dt_iop_tonecurve_global_data_t
 

Enumerations

enum  tonecurve_channel_t {
  ch_L = 0 ,
  ch_a = 1 ,
  ch_b = 2 ,
  ch_max = 3
}
 
enum  dt_iop_tonecurve_autoscale_t {
  DT_S_SCALE_AUTOMATIC = 1 ,
  DT_S_SCALE_MANUAL = 0 ,
  DT_S_SCALE_AUTOMATIC_XYZ = 2 ,
  DT_S_SCALE_AUTOMATIC_RGB = 3
}
 

Functions

static gboolean dt_iop_tonecurve_draw (GtkWidget *widget, cairo_t *crf, gpointer user_data)
 
static gboolean dt_iop_tonecurve_motion_notify (GtkWidget *widget, GdkEventMotion *event, gpointer user_data)
 
static gboolean dt_iop_tonecurve_button_press (GtkWidget *widget, GdkEventButton *event, gpointer user_data)
 
static gboolean dt_iop_tonecurve_leave_notify (GtkWidget *widget, GdkEventCrossing *event, gpointer user_data)
 
static gboolean dt_iop_tonecurve_enter_notify (GtkWidget *widget, GdkEventCrossing *event, gpointer user_data)
 
static gboolean dt_iop_tonecurve_key_press (GtkWidget *widget, GdkEventKey *event, gpointer user_data)
 
int default_group ()
 
int flags ()
 
int default_colorspace (dt_iop_module_t *self, dt_dev_pixelpipe_t *pipe, dt_dev_pixelpipe_iop_t *piece)
 
const char ** description (struct dt_iop_module_t *self)
 
int legacy_params (dt_iop_module_t *self, const void *const old_params, const int old_version, void *new_params, const int new_version)
 
void process (struct dt_iop_module_t *self, dt_dev_pixelpipe_iop_t *piece, const void *const i, void *const o, const dt_iop_roi_t *const roi_in, const dt_iop_roi_t *const roi_out)
 
void init_presets (dt_iop_module_so_t *self)
 
void commit_params (struct dt_iop_module_t *self, dt_iop_params_t *p1, dt_dev_pixelpipe_t *pipe, dt_dev_pixelpipe_iop_t *piece)
 
static float eval_grey (float x)
 
void init_pipe (struct dt_iop_module_t *self, dt_dev_pixelpipe_t *pipe, dt_dev_pixelpipe_iop_t *piece)
 
void cleanup_pipe (struct dt_iop_module_t *self, dt_dev_pixelpipe_t *pipe, dt_dev_pixelpipe_iop_t *piece)
 
void gui_reset (struct dt_iop_module_t *self)
 
void gui_update (struct dt_iop_module_t *self)
 
void init (dt_iop_module_t *module)
 
void init_global (dt_iop_module_so_t *module)
 
void cleanup_global (dt_iop_module_so_t *module)
 
static void logbase_callback (GtkWidget *slider, dt_iop_module_t *self)
 
void gui_changed (dt_iop_module_t *self, GtkWidget *w, void *previous)
 
static void interpolator_callback (GtkWidget *widget, dt_iop_module_t *self)
 
static void tab_switch (GtkNotebook *notebook, GtkWidget *page, guint page_num, gpointer user_data)
 
static gboolean area_resized (GtkWidget *widget, GdkEvent *event, gpointer user_data)
 
static float to_log (const float x, const float base, const int ch, const int semilog, const int is_ordinate)
 
static float to_lin (const float x, const float base, const int ch, const int semilog, const int is_ordinate)
 
void color_picker_apply (dt_iop_module_t *self, GtkWidget *picker, dt_dev_pixelpipe_iop_t *piece)
 
static void dt_iop_tonecurve_sanity_check (dt_iop_module_t *self, GtkWidget *widget)
 
static gboolean _move_point_internal (dt_iop_module_t *self, GtkWidget *widget, float dx, float dy, guint state)
 
static gboolean _scrolled (GtkWidget *widget, GdkEventScroll *event, gpointer user_data)
 
void gui_init (struct dt_iop_module_t *self)
 
void gui_cleanup (struct dt_iop_module_t *self)
 
static void picker_scale (const float *in, float *out)
 
static int _add_node (dt_iop_tonecurve_node_t *tonecurve, int *nodes, float x, float y)
 

Variables

struct { 
 
   const char *   name 
 
   const char *   maker 
 
   const char *   model 
 
   int   iso_min 
 
   float   iso_max 
 
   struct dt_iop_tonecurve_params_t   preset 
 
preset_camera_curves [] 
 

Macro Definition Documentation

◆ DT_GUI_CURVE_EDITOR_INSET

#define DT_GUI_CURVE_EDITOR_INSET   DT_PIXEL_APPLY_DPI(1)

◆ DT_GUI_CURVE_INFL

#define DT_GUI_CURVE_INFL   .3f

◆ DT_IOP_TONECURVE_MAXNODES

#define DT_IOP_TONECURVE_MAXNODES   20

◆ DT_IOP_TONECURVE_RES

#define DT_IOP_TONECURVE_RES   256

◆ TONECURVE_DEFAULT_STEP

#define TONECURVE_DEFAULT_STEP   (0.001f)

Typedef Documentation

◆ dt_iop_tonecurve_autoscale_t

◆ dt_iop_tonecurve_data_t

◆ dt_iop_tonecurve_global_data_t

◆ dt_iop_tonecurve_gui_data_t

◆ dt_iop_tonecurve_node_t

◆ dt_iop_tonecurve_params1_t

◆ dt_iop_tonecurve_params3_t

◆ dt_iop_tonecurve_params4_t

◆ dt_iop_tonecurve_params_t

◆ tonecurve_channel_t

Enumeration Type Documentation

◆ dt_iop_tonecurve_autoscale_t

Enumerator
DT_S_SCALE_AUTOMATIC 
DT_S_SCALE_MANUAL 
DT_S_SCALE_AUTOMATIC_XYZ 
DT_S_SCALE_AUTOMATIC_RGB 

◆ tonecurve_channel_t

Enumerator
ch_L 
ch_a 
ch_b 
ch_max 

Function Documentation

◆ _add_node()

static int _add_node ( dt_iop_tonecurve_node_t tonecurve,
int *  nodes,
float  x,
float  y 
)
inlinestatic

◆ _move_point_internal()

◆ _scrolled()

static gboolean _scrolled ( GtkWidget *  widget,
GdkEventScroll *  event,
gpointer  user_data 
)
static

◆ area_resized()

static gboolean area_resized ( GtkWidget *  widget,
GdkEvent *  event,
gpointer  user_data 
)
static

References TRUE.

Referenced by gui_init().

◆ cleanup_global()

◆ cleanup_pipe()

◆ color_picker_apply()

◆ commit_params()

◆ default_colorspace()

int default_colorspace ( dt_iop_module_t self,
dt_dev_pixelpipe_t pipe,
dt_dev_pixelpipe_iop_t piece 
)

References IOP_CS_LAB.

◆ default_group()

int default_group ( )

References IOP_GROUP_TONES.

◆ description()

const char ** description ( struct dt_iop_module_t self)

◆ dt_iop_tonecurve_button_press()

◆ dt_iop_tonecurve_draw()

static gboolean dt_iop_tonecurve_draw ( GtkWidget *  widget,
cairo_t *  crf,
gpointer  user_data 
)
static

◆ dt_iop_tonecurve_enter_notify()

static gboolean dt_iop_tonecurve_enter_notify ( GtkWidget *  widget,
GdkEventCrossing *  event,
gpointer  user_data 
)
static

References TRUE.

Referenced by gui_init().

◆ dt_iop_tonecurve_key_press()

static gboolean dt_iop_tonecurve_key_press ( GtkWidget *  widget,
GdkEventKey *  event,
gpointer  user_data 
)
static

◆ dt_iop_tonecurve_leave_notify()

static gboolean dt_iop_tonecurve_leave_notify ( GtkWidget *  widget,
GdkEventCrossing *  event,
gpointer  user_data 
)
static

References TRUE.

Referenced by gui_init().

◆ dt_iop_tonecurve_motion_notify()

◆ dt_iop_tonecurve_sanity_check()

◆ eval_grey()

static float eval_grey ( float  x)
static

Referenced by gui_update(), and logbase_callback().

◆ flags()

◆ gui_changed()

void gui_changed ( dt_iop_module_t self,
GtkWidget *  w,
void previous 
)

◆ gui_cleanup()

◆ gui_init()

◆ gui_reset()

◆ gui_update()

◆ init()

◆ init_global()

◆ init_pipe()

◆ init_presets()

◆ interpolator_callback()

◆ legacy_params()

◆ logbase_callback()

static void logbase_callback ( GtkWidget *  slider,
dt_iop_module_t self 
)
static

◆ picker_scale()

static void picker_scale ( const float *  in,
float *  out 
)
static

Referenced by dt_iop_tonecurve_draw().

◆ process()

◆ tab_switch()

static void tab_switch ( GtkNotebook *  notebook,
GtkWidget *  page,
guint  page_num,
gpointer  user_data 
)
static

◆ to_lin()

static float to_lin ( const float  x,
const float  base,
const int  ch,
const int  semilog,
const int  is_ordinate 
)
static

◆ to_log()

static float to_log ( const float  x,
const float  base,
const int  ch,
const int  semilog,
const int  is_ordinate 
)
static

Variable Documentation

◆ iso_max

◆ iso_min

◆ maker

◆ model

const char* model

Referenced by _add_selected_metadata(), _add_tag_button_clicked(), _append_row_to_remove(), _attach_selected_tag(), _attached_key_pressed(), _calculate_sel_on_path(), _calculate_sel_on_tree(), _click_on_view_attached(), _click_on_view_dictionary(), _completion_match_func(), _create_filtered_model(), _delete_selected_rows(), _delete_tree_path(), _delete_tree_path(), _delete_tree_tag(), _detach_selected_tag(), _dictionary_key_pressed(), _display_buttons(), _dnd_clear_root(), _event_dnd_received(), _find_and_rank_matches(), _find_exif_model(), _find_mask_iter_by_values(), _find_metadata_iter_per_text(), _find_root_iter_iter(), _find_tag_iter_id(), _find_tag_iter_tagid(), _find_tag_iter_tagname(), _get_crawler_entry_from_model(), _get_node_for_name(), _get_selected_style_names(), _gui_hist_get_active_items(), _gui_hist_is_copy_module_order_set(), _gui_hist_item_toggled(), _gui_hist_set_items(), _gui_preferences_enum_set(), _gui_styles_get_active_items(), _gui_styles_is_copy_module_order_set(), _gui_styles_is_update_module_order_set(), _gui_styles_item_new_toggled(), _gui_styles_item_toggled(), _gui_styles_select_all_items(), _gui_styles_update_toggled(), _gui_styles_update_view(), _init_treeview(), _is_user_tag(), _lib_masks_get_selected(), _lib_masks_get_values(), _lib_masks_recreate_list(), _lib_masks_remove_item(), _lib_masks_selection_change(), _lib_masks_selection_change_r(), _lib_masks_update_list(), _locations_tree_update(), _make_column_clearable(), _make_column_editable(), _map_source_changed(), _match_func(), _match_selected(), _match_text(), _menuitem_preferences(), _name_editing_done(), _name_start_editing(), _new_button_clicked(), _pop_menu_attached(), _pop_menu_attached_attach_to_all(), _pop_menu_delete_location(), _pop_menu_dictionary(), _pop_menu_dictionary_change_path(), _pop_menu_dictionary_copy_tag(), _pop_menu_dictionary_create_tag(), _pop_menu_dictionary_delete_node(), _pop_menu_dictionary_delete_tag(), _pop_menu_dictionary_edit_tag(), _pop_menu_dictionary_goto_tag_collection(), _pop_menu_dictionary_set_as_tag(), _pop_menu_edit_location(), _pop_menu_view(), _propagate_sel_to_parents(), _remove_foreach(), _remove_tag_from_list(), _reset_sel_on_path(), _reset_sel_on_path_full(), _row_tooltip_setup(), _search_func(), _select_next_user_attached_tag(), _select_previous_user_attached_tag(), _selection_changed(), _set_iter_name(), _set_location_collection(), _set_matching_tag_visibility(), _set_matching_tag_visibility(), _show_iter_on_view(), _show_location(), _show_tag_on_view(), _sort_model_by_relevance_func(), _sort_model_func(), _sort_model_func(), _sort_position_names_func(), _sort_tree_count_func(), _sort_tree_path_func(), _sort_tree_tag_func(), _styles_row_activated_callback(), _tag_name_changed(), _tag_name_changed(), _tree_button_pressed(), _tree_cell_edited(), _tree_delete_shape(), _tree_difference(), _tree_duplicate_shape(), _tree_exclusion(), _tree_group(), _tree_intersection(), _tree_inverse(), _tree_movedown(), _tree_moveup(), _tree_name_show(), _tree_query_tooltip(), _tree_reveal_func(), _tree_select_show(), _tree_selection_change(), _tree_tagname_show(), _tree_tagname_show_attached(), _tree_tagname_show_dictionary(), _tree_union(), _update_atdetach_buttons(), _update_attached_count(), _update_foreach(), _update_layout(), _update_sel_on_tree(), _update_tag_name_per_name(), _update_tag_name_per_name(), _view_map_geotag_changed(), apply_clicked(), camera_autosearch_clicked(), camera_set(), compare_rows_presets(), delete_clicked(), dt_collection_get_makermodel(), dt_gtkentry_setup_completion(), dt_gui_presets_update_mml(), dt_imageio_lookup_makermodel(), dt_nvidia_gpu_supports_sm_20(), dt_presets_import_from_file(), dt_presets_save_to_file(), dt_rawspeed_lookup_makermodel(), edit_clicked(), entry_activated(), export_clicked(), filter_callback(), find_coeffs(), generate_preset_combo(), gui_init(), gui_init(), gui_update(), import_preset(), init_tab_presets(), lens_autosearch_clicked(), lens_set(), list_match_string(), list_select(), list_view(), main(), on_match_func(), on_match_select(), parse_model(), preset_tune_callback(), range_select(), reload_defaults(), row_activated_with_event(), sync_db_to_xmp(), sync_newest_to_oldest(), sync_oldest_to_newest(), sync_xmp_to_db(), tree_count_show(), tree_expand(), tree_insert_presets(), tree_key_press_presets(), tree_match_string(), tree_on_row_activated(), tree_reveal_func(), tree_row_activated_presets(), tree_set_visibility(), tree_view(), view_onButtonPressed(), view_popup_menu_onRemove(), and view_popup_menu_onSearchFilmroll().

◆ name

const char* name

Referenced by init_presets().

◆ preset

◆ [struct]

const struct { ... } preset_camera_curves[]
Initial value:
= {
{"Nikon D750", "NIKON CORPORATION", "NIKON D750", 0, FLT_MAX, {{{{0.000000, 0.000000}, {0.083508, 0.073677}, {0.212191, 0.274799}, {0.397095, 0.594035}, {0.495025, 0.714660}, {0.683565, 0.878550}, {0.854059, 0.950927}, {1.000000, 1.000000}}, {{0.000000, 0.000000}, {0.125000, 0.125000}, {0.250000, 0.250000}, {0.375000, 0.375000}, {0.500000, 0.500000}, {0.625000, 0.625000}, {0.750000, 0.750000}, {0.875000, 0.875000}}, {{0.000000, 0.000000}, {0.125000, 0.125000}, {0.250000, 0.250000}, {0.375000, 0.375000}, {0.500000, 0.500000}, {0.625000, 0.625000}, {0.750000, 0.750000}, {0.875000, 0.875000} }}, {8, 8, 8}, {2, 2, 2}, 1, 0, 0}},
{"NIKON D5100", "NIKON CORPORATION", "NIKON D5100", 0, FLT_MAX, {{{{0.000000, 0.000000}, {0.000957, 0.000176}, {0.002423, 0.000798}, {0.005893, 0.003685}, {0.013219, 0.006619}, {0.023372, 0.011954}, {0.037580, 0.017817}, {0.069695, 0.035353}, {0.077276, 0.040315}, {0.123707, 0.082707}, {0.145249, 0.112105}, {0.189168, 0.186135}, {0.219576, 0.243677}, {0.290201, 0.385251}, {0.428150, 0.613355}, {0.506199, 0.700256}, {0.622833, 0.805488}, {0.702763, 0.870959}, {0.935053, 0.990139}, {1.000000, 1.000000}}, {{0.000000, 0.000000}, {0.050000, 0.050000}, {0.100000, 0.100000}, {0.150000, 0.150000}, {0.200000, 0.200000}, {0.250000, 0.250000}, {0.300000, 0.300000}, {0.350000, 0.350000}, {0.400000, 0.400000}, {0.450000, 0.450000}, {0.500000, 0.500000}, {0.550000, 0.550000}, {0.600000, 0.600000}, {0.650000, 0.650000}, {0.700000, 0.700000}, {0.750000, 0.750000}, {0.800000, 0.800000}, {0.850000, 0.850000}, {0.900000, 0.900000}, {0.950000, 0.950000}}, {{0.000000, 0.000000}, {0.050000, 0.050000}, {0.100000, 0.100000}, {0.150000, 0.150000}, {0.200000, 0.200000}, {0.250000, 0.250000}, {0.300000, 0.300000}, {0.350000, 0.350000}, {0.400000, 0.400000}, {0.450000, 0.450000}, {0.500000, 0.500000}, {0.550000, 0.550000}, {0.600000, 0.600000}, {0.650000, 0.650000}, {0.700000, 0.700000}, {0.750000, 0.750000}, {0.800000, 0.800000}, {0.850000, 0.850000}, {0.900000, 0.900000}, {0.950000, 0.950000}}}, {20, 20, 20}, {2, 2, 2}, 1, 0, 0}},
{"Nikon D7000", "NIKON CORPORATION", "NIKON D7000", 0, FLT_MAX, {{{{0.000000, 0.000000}, {0.110633, 0.111192}, {0.209771, 0.286963}, {0.355888, 0.561236}, {0.454987, 0.673098}, {0.769212, 0.920485}, {0.800468, 0.933428}, {1.000000, 1.000000}}, {{0.000000, 0.000000}, {0.125000, 0.125000}, {0.250000, 0.250000}, {0.375000, 0.375000}, {0.500000, 0.500000}, {0.625000, 0.625000}, {0.750000, 0.750000}, {0.875000, 0.875000}}, {{0.000000, 0.000000}, {0.125000, 0.125000}, {0.250000, 0.250000}, {0.375000, 0.375000}, {0.500000, 0.500000}, {0.625000, 0.625000}, {0.750000, 0.750000}, {0.875000, 0.875000}}}, {8, 8, 8}, {2, 2, 2}, 1, 0, 0}},
{"Nikon D7200", "NIKON CORPORATION", "NIKON D7200", 0, FLT_MAX, {{{{0.000000, 0.000000}, {0.000618, 0.003286}, {0.001639, 0.003705}, {0.005227, 0.005101}, {0.013299, 0.011192}, {0.016048, 0.013130}, {0.037941, 0.027014}, {0.058195, 0.041339}, {0.086531, 0.069088}, {0.116679, 0.107283}, {0.155629, 0.159422}, {0.205477, 0.246265}, {0.225923, 0.287343}, {0.348056, 0.509104}, {0.360629, 0.534732}, {0.507562, 0.762089}, {0.606899, 0.865692}, {0.734828, 0.947468}, {0.895488, 0.992021}, {1.000000, 1.000000}}, {{0.000000, 0.000000}, {0.050000, 0.050000}, {0.100000, 0.100000}, {0.150000, 0.150000}, {0.200000, 0.200000}, {0.250000, 0.250000}, {0.300000, 0.300000}, {0.350000, 0.350000}, {0.400000, 0.400000}, {0.450000, 0.450000}, {0.500000, 0.500000}, {0.550000, 0.550000}, {0.600000, 0.600000}, {0.650000, 0.650000}, {0.700000, 0.700000}, {0.750000, 0.750000}, {0.800000, 0.800000}, {0.850000, 0.850000}, {0.900000, 0.900000}, {0.950000, 0.950000}}, {{0.000000, 0.000000}, {0.050000, 0.050000}, {0.100000, 0.100000}, {0.150000, 0.150000}, {0.200000, 0.200000}, {0.250000, 0.250000}, {0.300000, 0.300000}, {0.350000, 0.350000}, {0.400000, 0.400000}, {0.450000, 0.450000}, {0.500000, 0.500000}, {0.550000, 0.550000}, {0.600000, 0.600000}, {0.650000, 0.650000}, {0.700000, 0.700000}, {0.750000, 0.750000}, {0.800000, 0.800000}, {0.850000, 0.850000}, {0.900000, 0.900000}, {0.950000, 0.950000}}}, {20, 20, 20}, {2, 2, 2}, 1, 0, 0}},
{"NIKON D7500", "NIKON CORPORATION", "NIKON D7500", 0, FLT_MAX, {{{{0.000000, 0.000000}, {0.000421, 0.003412}, {0.003775, 0.004001}, {0.013762, 0.008704}, {0.016698, 0.010230}, {0.034965, 0.018732}, {0.087311, 0.049808}, {0.101389, 0.060789}, {0.166845, 0.145269}, {0.230944, 0.271288}, {0.333399, 0.502609}, {0.353207, 0.542549}, {0.550014, 0.819535}, {0.731749, 0.944033}, {0.783283, 0.960546}, {1.000000, 1.000000}}, {{0.000000, 0.000000}, {0.062500, 0.062500}, {0.125000, 0.125000}, {0.187500, 0.187500}, {0.250000, 0.250000}, {0.312500, 0.312500}, {0.375000, 0.375000}, {0.437500, 0.437500}, {0.500000, 0.500000}, {0.562500, 0.562500}, {0.625000, 0.625000}, {0.687500, 0.687500}, {0.750000, 0.750000}, {0.812500, 0.812500}, {0.875000, 0.875000}, {0.937500, 0.937500}}, {{0.000000, 0.000000}, {0.062500, 0.062500}, {0.125000, 0.125000}, {0.187500, 0.187500}, {0.250000, 0.250000}, {0.312500, 0.312500}, {0.375000, 0.375000}, {0.437500, 0.437500}, {0.500000, 0.500000}, {0.562500, 0.562500}, {0.625000, 0.625000}, {0.687500, 0.687500}, {0.750000, 0.750000}, {0.812500, 0.812500}, {0.875000, 0.875000}, {0.937500, 0.937500}}}, {16, 16, 16}, {2, 2, 2}, 1, 0, 0}},
{"Nikon D90", "NIKON CORPORATION", "NIKON D90", 0, FLT_MAX, {{{{0.000000, 0.000000}, {0.002915, 0.006453}, {0.023324, 0.021601}, {0.078717, 0.074963}, {0.186589, 0.242230}, {0.364432, 0.544956}, {0.629738, 0.814127}, {1.000000, 1.000000}}, {{0.000000, 0.000000}, {0.125000, 0.125000}, {0.250000, 0.250000}, {0.375000, 0.375000}, {0.500000, 0.500000}, {0.625000, 0.625000}, {0.750000, 0.750000}, {0.875000, 0.875000}}, {{0.000000, 0.000000}, {0.125000, 0.125000}, {0.250000, 0.250000}, {0.375000, 0.375000}, {0.500000, 0.500000}, {0.625000, 0.625000}, {0.750000, 0.750000}, {0.875000, 0.875000}}}, {8, 8, 8}, {2, 2, 2}, 1, 0, 0}},
{"Olympus OM-D E-M10 II", "OLYMPUS CORPORATION ", "E-M10MarkII ", 0, FLT_MAX, {{{{0.000000, 0.000000}, {0.004036, 0.000809}, {0.015047, 0.009425}, {0.051948, 0.042053}, {0.071777, 0.066635}, {0.090018, 0.086722}, {0.110197, 0.118773}, {0.145817, 0.171861}, {0.207476, 0.278652}, {0.266832, 0.402823}, {0.428061, 0.696319}, {0.559728, 0.847113}, {0.943576, 0.993482}, {1.000000, 1.000000}}, {{0.000000, 0.000000}, {0.071429, 0.071429}, {0.142857, 0.142857}, {0.214286, 0.214286}, {0.285714, 0.285714}, {0.357143, 0.357143}, {0.428571, 0.428571}, {0.500000, 0.500000}, {0.571429, 0.571429}, {0.642857, 0.642857}, {0.714286, 0.714286}, {0.785714, 0.785714}, {0.857143, 0.857143}, {0.928571, 0.928571}}, {{0.000000, 0.000000}, {0.071429, 0.071429}, {0.142857, 0.142857}, {0.214286, 0.214286}, {0.285714, 0.285714}, {0.357143, 0.357143}, {0.428571, 0.428571}, {0.500000, 0.500000}, {0.571429, 0.571429}, {0.642857, 0.642857}, {0.714286, 0.714286}, {0.785714, 0.785714}, {0.857143, 0.857143}, {0.928571, 0.928571}}}, {14, 14, 14}, {2, 2, 2}, 1, 0, 0}},
}

Referenced by init_presets().