Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
lightroom.c File Reference
#include "develop/lightroom.h"
#include "common/colorlabels.h"
#include "common/colorspaces.h"
#include "common/curve_tools.h"
#include "common/darktable.h"
#include "common/debug.h"
#include "common/iop_order.h"
#include "common/ratings.h"
#include "common/tags.h"
#include "common/metadata.h"
#include "control/control.h"
#include <ctype.h>
#include <libxml/parser.h>
#include <libxml/xpath.h>
#include <libxml/xpathInternals.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
+ Include dependency graph for lightroom.c:

Data Structures

struct  dt_iop_clipping_params_t
 
struct  dt_iop_flip_params_t
 
struct  dt_iop_exposure_params_t
 
struct  dt_iop_grain_params_t
 
struct  dt_iop_fvector_2d_t
 
struct  dt_iop_vignette_params_t
 
struct  spot_t
 
struct  dt_iop_spots_params_t
 
struct  dt_iop_tonecurve_node_t
 
struct  dt_iop_tonecurve_params_t
 
struct  dt_iop_colorzones_params_t
 
struct  dt_iop_splittoning_params_t
 
struct  dt_iop_bilat_params_t
 
struct  dt_iop_colorin_params_v1_t
 
struct  dt_develop_blend_params_t
 
struct  lr2dt
 
struct  lr_data_t
 

Macros

#define LRDT_CLIPPING_VERSION   5
 
#define LRDT_FLIP_VERSION   2
 
#define LRDT_EXPOSURE_VERSION   2
 
#define LRDT_GRAIN_VERSION   1
 
#define LRDT_VIGNETTE_VERSION   3
 
#define LRDT_SPOTS_VERSION   1
 
#define MAX_SPOTS   32
 
#define LRDT_TONECURVE_VERSION   3
 
#define DT_IOP_TONECURVE_MAXNODES   20
 
#define LRDT_COLORZONES_VERSION   2
 
#define DT_IOP_COLORZONES_BANDS   8
 
#define LRDT_SPLITTONING_VERSION   1
 
#define LRDT_BILAT_VERSION   1
 
#define LRDT_COLORIN_VERSION   1
 
#define DT_IOP_COLOR_ICC_LEN_V1   100
 
#define LRDT_BLEND_VERSION   4
 
#define DEVELOP_BLENDIF_SIZE   16
 
#define MAX_PTS   20
 

Typedefs

typedef struct dt_iop_clipping_params_t dt_iop_clipping_params_t
 
typedef struct dt_iop_flip_params_t dt_iop_flip_params_t
 
typedef struct dt_iop_exposure_params_t dt_iop_exposure_params_t
 
typedef enum _dt_iop_grain_channel_t _dt_iop_grain_channel_t
 
typedef struct dt_iop_grain_params_t dt_iop_grain_params_t
 
typedef enum dt_iop_dither_t dt_iop_dither_t
 
typedef struct dt_iop_fvector_2d_t dt_iop_vector_2d_t
 
typedef struct dt_iop_vignette_params_t dt_iop_vignette_params_t
 
typedef struct spot_t spot_t
 
typedef struct dt_iop_spots_params_t dt_iop_spots_params_t
 
typedef enum tonecurve_channel_t tonecurve_channel_t
 
typedef struct dt_iop_tonecurve_node_t dt_iop_tonecurve_node_t
 
typedef struct dt_iop_tonecurve_params_t dt_iop_tonecurve_params_t
 
typedef enum dt_iop_colorzones_channel_t dt_iop_colorzones_channel_t
 
typedef struct dt_iop_colorzones_params_t dt_iop_colorzones_params_t
 
typedef struct dt_iop_splittoning_params_t dt_iop_splittoning_params_t
 
typedef struct dt_iop_bilat_params_t dt_iop_bilat_params_t
 
typedef struct dt_iop_colorin_params_v1_t dt_iop_colorin_params_v1_t
 
typedef struct dt_develop_blend_params_t dt_develop_blend_params_t
 
typedef struct lr2dt lr2dt_t
 
typedef enum lr_curve_kind_t lr_curve_kind_t
 
typedef struct lr_data_t lr_data_t
 

Enumerations

enum  _dt_iop_grain_channel_t {
  DT_GRAIN_CHANNEL_HUE = 0 ,
  DT_GRAIN_CHANNEL_SATURATION ,
  DT_GRAIN_CHANNEL_LIGHTNESS ,
  DT_GRAIN_CHANNEL_RGB
}
 
enum  dt_iop_dither_t {
  DITHER_OFF = 0 ,
  DITHER_8BIT = 1 ,
  DITHER_16BIT = 2
}
 
enum  tonecurve_channel_t {
  ch_L = 0 ,
  ch_a = 1 ,
  ch_b = 2 ,
  ch_max = 3
}
 
enum  dt_iop_colorzones_channel_t {
  DT_IOP_COLORZONES_L = 0 ,
  DT_IOP_COLORZONES_C = 1 ,
  DT_IOP_COLORZONES_h = 2
}
 
enum  lr_curve_kind_t {
  linear = 0 ,
  medium_contrast = 1 ,
  strong_contrast = 2 ,
  custom = 3
}
 

Functions

char * dt_get_lightroom_xmp (int32_t imgid)
 
static float get_interpolate (lr2dt_t lr2dt_table[], float value)
 
static float lr2dt_blacks (float value)
 
static float lr2dt_vignette_gain (float value)
 
static float lr2dt_vignette_midpoint (float value)
 
static float lr2dt_grain_amount (float value)
 
static float lr2dt_grain_frequency (float value)
 
static float lr2dt_splittoning_balance (float value)
 
static float lr2dt_clarity (float value)
 
static void dt_add_hist (int32_t imgid, char *operation, dt_iop_params_t *params, int params_size, char *imported, size_t imported_len, int version, int *import_count)
 
static gboolean _read_float (const char **startptr, const char *key, float *value)
 
static gboolean _skip_key_value_pair (const char **startptr, const char *key)
 
static gboolean _skip_comma (const char **startptr)
 
static void _lrop (const dt_develop_t *dev, const xmlDocPtr doc, const int32_t imgid, const xmlChar *name, const xmlChar *value, const xmlNodePtr node, lr_data_t *data)
 
static int _has_list (char *name)
 
static void _handle_xpath (dt_develop_t *dev, xmlDoc *doc, int32_t imgid, xmlXPathContext *ctx, const xmlChar *xpath, lr_data_t *data)
 
static void flip (float *x, float *y)
 
static void swap (float *x, float *y)
 
static double rotate_x (double x, double y, const double rangle)
 
static double rotate_y (double x, double y, const double rangle)
 
static void rotate_xy (double *cx, double *cy, const double rangle)
 
static float round5 (double x)
 
gboolean dt_lightroom_import (int32_t imgid, dt_develop_t *dev, gboolean iauto)
 

Macro Definition Documentation

◆ DEVELOP_BLENDIF_SIZE

#define DEVELOP_BLENDIF_SIZE   16

◆ DT_IOP_COLOR_ICC_LEN_V1

#define DT_IOP_COLOR_ICC_LEN_V1   100

◆ DT_IOP_COLORZONES_BANDS

#define DT_IOP_COLORZONES_BANDS   8

◆ DT_IOP_TONECURVE_MAXNODES

#define DT_IOP_TONECURVE_MAXNODES   20

◆ LRDT_BILAT_VERSION

#define LRDT_BILAT_VERSION   1

◆ LRDT_BLEND_VERSION

#define LRDT_BLEND_VERSION   4

◆ LRDT_CLIPPING_VERSION

#define LRDT_CLIPPING_VERSION   5

◆ LRDT_COLORIN_VERSION

#define LRDT_COLORIN_VERSION   1

◆ LRDT_COLORZONES_VERSION

#define LRDT_COLORZONES_VERSION   2

◆ LRDT_EXPOSURE_VERSION

#define LRDT_EXPOSURE_VERSION   2

◆ LRDT_FLIP_VERSION

#define LRDT_FLIP_VERSION   2

◆ LRDT_GRAIN_VERSION

#define LRDT_GRAIN_VERSION   1

◆ LRDT_SPLITTONING_VERSION

#define LRDT_SPLITTONING_VERSION   1

◆ LRDT_SPOTS_VERSION

#define LRDT_SPOTS_VERSION   1

◆ LRDT_TONECURVE_VERSION

#define LRDT_TONECURVE_VERSION   3

◆ LRDT_VIGNETTE_VERSION

#define LRDT_VIGNETTE_VERSION   3

◆ MAX_PTS

#define MAX_PTS   20

◆ MAX_SPOTS

#define MAX_SPOTS   32

Typedef Documentation

◆ _dt_iop_grain_channel_t

◆ dt_develop_blend_params_t

◆ dt_iop_bilat_params_t

◆ dt_iop_clipping_params_t

◆ dt_iop_colorin_params_v1_t

◆ dt_iop_colorzones_channel_t

◆ dt_iop_colorzones_params_t

◆ dt_iop_dither_t

◆ dt_iop_exposure_params_t

◆ dt_iop_flip_params_t

◆ dt_iop_grain_params_t

◆ dt_iop_splittoning_params_t

◆ dt_iop_spots_params_t

◆ dt_iop_tonecurve_node_t

◆ dt_iop_tonecurve_params_t

◆ dt_iop_vector_2d_t

◆ dt_iop_vignette_params_t

◆ lr2dt_t

typedef struct lr2dt lr2dt_t

◆ lr_curve_kind_t

◆ lr_data_t

typedef struct lr_data_t lr_data_t

◆ spot_t

typedef struct spot_t spot_t

◆ tonecurve_channel_t

Enumeration Type Documentation

◆ _dt_iop_grain_channel_t

Enumerator
DT_GRAIN_CHANNEL_HUE 
DT_GRAIN_CHANNEL_SATURATION 
DT_GRAIN_CHANNEL_LIGHTNESS 
DT_GRAIN_CHANNEL_RGB 

◆ dt_iop_colorzones_channel_t

Enumerator
DT_IOP_COLORZONES_L 
DT_IOP_COLORZONES_C 
DT_IOP_COLORZONES_h 

◆ dt_iop_dither_t

Enumerator
DITHER_OFF 
DITHER_8BIT 
DITHER_16BIT 

◆ lr_curve_kind_t

Enumerator
linear 
medium_contrast 
strong_contrast 
custom 

◆ tonecurve_channel_t

Enumerator
ch_L 
ch_a 
ch_b 
ch_max 

Function Documentation

◆ _handle_xpath()

static void _handle_xpath ( dt_develop_t dev,
xmlDoc *  doc,
int32_t  imgid,
xmlXPathContext *  ctx,
const xmlChar *  xpath,
lr_data_t data 
)
static

References _has_list(), and _lrop().

Referenced by dt_lightroom_import().

◆ _has_list()

static int _has_list ( char *  name)
static

References name.

Referenced by _handle_xpath().

◆ _lrop()

static void _lrop ( const dt_develop_t dev,
const xmlDocPtr  doc,
const int32_t  imgid,
const xmlChar *  name,
const xmlChar *  value,
const xmlNodePtr  node,
lr_data_t data 
)
static

References _read_float(), _skip_comma(), _skip_key_value_pair(), dt_iop_clipping_params_t::angle, dt_iop_splittoning_params_t::balance, dt_iop_exposure_params_t::black, dt_iop_vignette_params_t::brightness, dt_iop_clipping_params_t::ch, lr_data_t::color, lr_data_t::crop_roundness, lr_data_t::curve_kind, lr_data_t::curve_pts, custom, dt_iop_clipping_params_t::cw, dt_iop_clipping_params_t::cx, dt_iop_clipping_params_t::cy, darktable, dt_iop_bilat_params_t::detail, DT_DEBUG_CONTROL_SIGNAL_RAISE, dt_metadata_set_import(), DT_SIGNAL_TAG_CHANGED, dt_tag_attach(), dt_tag_exists(), dt_tag_new(), dt_util_gps_string_to_number(), dt_iop_colorzones_params_t::equalizer_y, EXIF_ORIENTATION_NONE, EXIF_ORIENTATION_ROTATE_CCW_90_DEG, EXIF_ORIENTATION_ROTATE_CW_90_DEG, dt_iop_exposure_params_t::exposure, dt_iop_vignette_params_t::falloff_scale, FALSE, lr_data_t::has_bilat, lr_data_t::has_colorlabel, lr_data_t::has_colorzones, lr_data_t::has_crop, lr_data_t::has_exposure, lr_data_t::has_flip, lr_data_t::has_gps, lr_data_t::has_grain, lr_data_t::has_rating, lr_data_t::has_splittoning, lr_data_t::has_spots, lr_data_t::has_tags, lr_data_t::has_vignette, dt_iop_splittoning_params_t::highlight_hue, dt_iop_splittoning_params_t::highlight_saturation, lr_data_t::iheight, dt_develop_t::image_storage, lr_data_t::iwidth, lr_data_t::lat, linear, lr_data_t::lon, lr2dt_blacks(), lr2dt_clarity(), lr2dt_grain_amount(), lr2dt_grain_frequency(), lr2dt_splittoning_balance(), lr2dt_vignette_gain(), lr2dt_vignette_midpoint(), MAX_PTS, MAX_SPOTS, medium_contrast, lr_data_t::n_pts, name, dt_iop_spots_params_t::num_spots, dt_image_t::orientation, lr_data_t::orientation, ORIENTATION_NONE, ORIENTATION_ROTATE_CCW_90_DEG, ORIENTATION_ROTATE_CW_90_DEG, lr_data_t::pbl, lr_data_t::pc, lr_data_t::pcz, lr_data_t::pe, lr_data_t::pg, lr_data_t::ps, lr_data_t::pst, lr_data_t::ptc_split, lr_data_t::ptc_value, lr_data_t::pv, lr_data_t::rating, dt_iop_vignette_params_t::saturation, dt_iop_grain_params_t::scale, dt_iop_vignette_params_t::scale, dt_iop_splittoning_params_t::shadow_hue, dt_iop_splittoning_params_t::shadow_saturation, darktable_t::signals, dt_iop_spots_params_t::spot, dt_iop_grain_params_t::strength, strong_contrast, and TRUE.

Referenced by _handle_xpath().

◆ _read_float()

static gboolean _read_float ( const char **  startptr,
const char *  key,
float *  value 
)
static

References FALSE, and key.

Referenced by _lrop().

◆ _skip_comma()

static gboolean _skip_comma ( const char **  startptr)
static

Referenced by _lrop().

◆ _skip_key_value_pair()

static gboolean _skip_key_value_pair ( const char **  startptr,
const char *  key 
)
static

References FALSE, key, and TRUE.

Referenced by _lrop().

◆ dt_add_hist()

static void dt_add_hist ( int32_t  imgid,
char *  operation,
dt_iop_params_t params,
int  params_size,
char *  imported,
size_t  imported_len,
int  version,
int *  import_count 
)
static

◆ dt_get_lightroom_xmp()

char * dt_get_lightroom_xmp ( int32_t  imgid)

◆ dt_lightroom_import()

gboolean dt_lightroom_import ( int32_t  imgid,
dt_develop_t dev,
gboolean  iauto 
)

References _handle_xpath(), dt_iop_clipping_params_t::angle, dt_iop_vignette_params_t::autoratio, dt_iop_vignette_params_t::center, dt_iop_clipping_params_t::ch, ch_a, ch_b, ch_L, dt_iop_grain_params_t::channel, dt_iop_colorzones_params_t::channel, lr_data_t::color, dt_iop_splittoning_params_t::compress, dt_iop_clipping_params_t::crop_auto, lr_data_t::crop_roundness, CUBIC_SPLINE, lr_data_t::curve_kind, lr_data_t::curve_pts, custom, dt_iop_clipping_params_t::cw, dt_iop_clipping_params_t::cx, dt_iop_clipping_params_t::cy, darktable, DITHER_8BIT, dt_iop_vignette_params_t::dithering, dt_add_hist(), dt_colorlabels_set_label(), dt_control_log(), DT_DEBUG_CONTROL_SIGNAL_RAISE, dt_dev_reload_history_items(), dt_get_lightroom_xmp(), dt_image_is_raw(), dt_image_orientation_to_flip_bits(), dt_image_set_location(), dt_image_synch_xmp(), DT_INTENT_PERCEPTUAL, DT_IOP_COLORZONES_BANDS, DT_IOP_COLORZONES_h, dt_ratings_apply_on_image(), DT_SIGNAL_DEVELOP_HISTORY_CHANGE, DT_SIGNAL_GEOTAG_CHANGED, dt_image_geoloc_t::elevation, dt_iop_colorzones_params_t::equalizer_x, EXIF_ORIENTATION_NONE, FALSE, flip(), lr_data_t::fratio, dt_develop_t::gui_attached, lr_data_t::has_bilat, lr_data_t::has_colorlabel, lr_data_t::has_colorzones, lr_data_t::has_crop, lr_data_t::has_exposure, lr_data_t::has_flip, lr_data_t::has_gps, lr_data_t::has_grain, lr_data_t::has_rating, lr_data_t::has_splittoning, lr_data_t::has_spots, lr_data_t::has_tags, lr_data_t::has_vignette, lr_data_t::iheight, dt_develop_t::image_storage, lr_data_t::iwidth, dt_iop_clipping_params_t::k_apply, dt_iop_clipping_params_t::k_h, dt_iop_clipping_params_t::k_sym, dt_iop_clipping_params_t::k_type, dt_iop_clipping_params_t::k_v, dt_iop_clipping_params_t::kxa, dt_iop_clipping_params_t::kxb, dt_iop_clipping_params_t::kxc, dt_iop_clipping_params_t::kxd, dt_iop_clipping_params_t::kya, dt_iop_clipping_params_t::kyb, dt_iop_clipping_params_t::kyc, dt_iop_clipping_params_t::kyd, lr_data_t::lat, dt_image_geoloc_t::latitude, linear, lr_data_t::lon, dt_image_geoloc_t::longitude, LRDT_BILAT_VERSION, LRDT_CLIPPING_VERSION, LRDT_COLORIN_VERSION, LRDT_COLORZONES_VERSION, LRDT_EXPOSURE_VERSION, LRDT_FLIP_VERSION, LRDT_GRAIN_VERSION, LRDT_SPLITTONING_VERSION, LRDT_SPOTS_VERSION, LRDT_TONECURVE_VERSION, LRDT_VIGNETTE_VERSION, M_PI, lr_data_t::n_pts, dt_iop_spots_params_t::num_spots, dt_iop_flip_params_t::orientation, lr_data_t::orientation, ORIENTATION_FLIP_HORIZONTALLY, ORIENTATION_FLIP_VERTICALLY, ORIENTATION_FLIP_X, ORIENTATION_FLIP_Y, ORIENTATION_SWAP_XY, ORIENTATION_TRANSPOSE, ORIENTATION_TRANSVERSE, lr_data_t::pbl, lr_data_t::pc, lr_data_t::pcz, lr_data_t::pe, lr_data_t::pf, lr_data_t::pg, lr_data_t::ps, lr_data_t::pst, lr_data_t::ptc, lr_data_t::ptc_split, lr_data_t::ptc_value, lr_data_t::pv, lr_data_t::rating, dt_iop_clipping_params_t::ratio_d, dt_iop_clipping_params_t::ratio_n, rotate_x(), rotate_xy(), rotate_y(), round5(), dt_iop_vignette_params_t::scale, dt_iop_vignette_params_t::shape, dt_iop_bilat_params_t::sigma_r, dt_iop_bilat_params_t::sigma_s, darktable_t::signals, dt_iop_spots_params_t::spot, swap(), dt_iop_tonecurve_params_t::tonecurve, dt_iop_tonecurve_params_t::tonecurve_autoscale_ab, dt_iop_tonecurve_params_t::tonecurve_nodes, dt_iop_tonecurve_params_t::tonecurve_preset, dt_iop_tonecurve_params_t::tonecurve_type, TRUE, dt_iop_vignette_params_t::whratio, dt_iop_fvector_2d_t::x, spot_t::x, dt_iop_tonecurve_node_t::x, spot_t::xc, dt_iop_fvector_2d_t::y, spot_t::y, dt_iop_tonecurve_node_t::y, and spot_t::yc.

Referenced by _image_import_internal().

◆ flip()

◆ get_interpolate()

static float get_interpolate ( lr2dt_t  lr2dt_table[],
float  value 
)
static

◆ lr2dt_blacks()

static float lr2dt_blacks ( float  value)
static

References get_interpolate().

Referenced by _lrop().

◆ lr2dt_clarity()

static float lr2dt_clarity ( float  value)
static

References get_interpolate().

Referenced by _lrop().

◆ lr2dt_grain_amount()

static float lr2dt_grain_amount ( float  value)
static

References get_interpolate().

Referenced by _lrop().

◆ lr2dt_grain_frequency()

static float lr2dt_grain_frequency ( float  value)
static

References get_interpolate().

Referenced by _lrop().

◆ lr2dt_splittoning_balance()

static float lr2dt_splittoning_balance ( float  value)
static

References get_interpolate().

Referenced by _lrop().

◆ lr2dt_vignette_gain()

static float lr2dt_vignette_gain ( float  value)
static

References get_interpolate().

Referenced by _lrop().

◆ lr2dt_vignette_midpoint()

static float lr2dt_vignette_midpoint ( float  value)
static

References get_interpolate().

Referenced by _lrop().

◆ rotate_x()

static double rotate_x ( double  x,
double  y,
const double  rangle 
)
inlinestatic

Referenced by dt_lightroom_import(), and rotate_xy().

◆ rotate_xy()

static void rotate_xy ( double cx,
double cy,
const double  rangle 
)
inlinestatic

References rotate_x(), and rotate_y().

Referenced by dt_lightroom_import().

◆ rotate_y()

static double rotate_y ( double  x,
double  y,
const double  rangle 
)
inlinestatic

Referenced by dt_lightroom_import(), and rotate_xy().

◆ round5()

static float round5 ( double  x)
inlinestatic

Referenced by dt_lightroom_import().

◆ swap()

static void swap ( float *  x,
float *  y 
)
inlinestatic