Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
profile_gamma.c File Reference
#include "widgets/bauhaus.h"
#include "system/openmp.h"
#include "system/target_clones.h"
#include "system/mem_alloc.h"
#include "common/module_versioning.h"
#include "math/math.h"
#include "develop/develop.h"
#include "develop/imageop_math.h"
#include "develop/imageop_gui.h"
#include "gui/presets.h"
#include "gui/color_picker_proxy.h"
#include "iop/iop_api.h"
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include "widgets/label.h"
+ Include dependency graph for profile_gamma.c:

Go to the source code of this file.

Data Structures

struct  dt_iop_profilegamma_params_t
 
struct  dt_iop_profilegamma_gui_data_t
 
struct  dt_iop_profilegamma_data_t
 

Typedefs

typedef enum dt_iop_profilegamma_mode_t dt_iop_profilegamma_mode_t
 
typedef struct dt_iop_profilegamma_params_t dt_iop_profilegamma_params_t
 
typedef struct dt_iop_profilegamma_gui_data_t dt_iop_profilegamma_gui_data_t
 
typedef struct dt_iop_profilegamma_data_t dt_iop_profilegamma_data_t
 

Enumerations

enum  dt_iop_profilegamma_mode_t {
  PROFILEGAMMA_LOG = 0 ,
  PROFILEGAMMA_GAMMA = 1
}
 

Functions

const char * name ()
 
const char ** description (struct dt_iop_module_t *self)
 
int default_group ()
 
int flags ()
 
int default_colorspace (dt_iop_module_t *self, dt_dev_pixelpipe_t *pipe, const dt_dev_pixelpipe_iop_t *piece)
 
void init_presets (dt_iop_module_so_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)
 
__DT_CLONE_TARGETS__ int process (dt_iop_module_t *self, const dt_dev_pixelpipe_t *pipe, const dt_dev_pixelpipe_iop_t *piece, const void *const ivoid, void *const ovoid)
 
static void apply_auto_grey (dt_iop_module_t *self)
 
static void apply_auto_black (dt_iop_module_t *self)
 
static void apply_auto_dynamic_range (dt_iop_module_t *self)
 
static void apply_autotune (dt_iop_module_t *self)
 
void gui_changed (dt_iop_module_t *self, GtkWidget *w, void *previous)
 
void color_picker_apply (dt_iop_module_t *self, GtkWidget *picker, dt_dev_pixelpipe_t *pipe, dt_dev_pixelpipe_iop_t *piece)
 
void commit_params (dt_iop_module_t *self, dt_iop_params_t *p1, dt_dev_pixelpipe_t *pipe, dt_dev_pixelpipe_iop_t *piece)
 
void init_pipe (dt_iop_module_t *self, dt_dev_pixelpipe_t *pipe, dt_dev_pixelpipe_iop_t *piece)
 
void cleanup_pipe (dt_iop_module_t *self, dt_dev_pixelpipe_t *pipe, dt_dev_pixelpipe_iop_t *piece)
 
void gui_reset (dt_iop_module_t *self)
 
void gui_update (dt_iop_module_t *self)
 Refresh GUI controls from current params and configuration.
 
void gui_init (dt_iop_module_t *self)
 

Typedef Documentation

◆ dt_iop_profilegamma_data_t

◆ dt_iop_profilegamma_gui_data_t

◆ dt_iop_profilegamma_mode_t

◆ dt_iop_profilegamma_params_t

Enumeration Type Documentation

◆ dt_iop_profilegamma_mode_t

Enumerator
PROFILEGAMMA_LOG 
PROFILEGAMMA_GAMMA 

Definition at line 72 of file profile_gamma.c.

Function Documentation

◆ apply_auto_black()

◆ apply_auto_dynamic_range()

◆ apply_auto_grey()

◆ apply_autotune()

◆ cleanup_pipe()

void cleanup_pipe ( dt_iop_module_t *  self,
dt_dev_pixelpipe_t *  pipe,
dt_dev_pixelpipe_iop_t *  piece 
)

Definition at line 516 of file profile_gamma.c.

References dt_free_align, and piece.

◆ color_picker_apply()

void color_picker_apply ( dt_iop_module_t *  self,
GtkWidget *  picker,
dt_dev_pixelpipe_t *  pipe,
dt_dev_pixelpipe_iop_t *  piece 
)

◆ commit_params()

void commit_params ( dt_iop_module_t *  self,
dt_iop_params_t *  p1,
dt_dev_pixelpipe_t *  pipe,
dt_dev_pixelpipe_iop_t *  piece 
)

Definition at line 437 of file profile_gamma.c.

References __OMP_PARALLEL_FOR__, d, dt_iop_estimate_exp(), g, k, linear, p, piece, and x.

◆ default_colorspace()

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

Definition at line 140 of file profile_gamma.c.

References IOP_CS_RGB.

◆ default_group()

int default_group ( )

Definition at line 129 of file profile_gamma.c.

References IOP_GROUP_TECHNICAL.

◆ description()

const char ** description ( struct dt_iop_module_t *  self)

Definition at line 120 of file profile_gamma.c.

References dt_iop_set_description().

◆ flags()

◆ gui_changed()

◆ gui_init()

◆ gui_reset()

void gui_reset ( dt_iop_module_t *  self)

Definition at line 522 of file profile_gamma.c.

References dt_iop_color_picker_reset(), and TRUE.

◆ gui_update()

void gui_update ( dt_iop_module_t *  self)

Refresh GUI controls from current params and configuration.

Todo:
check why needed
Todo:
by hand

Definition at line 527 of file profile_gamma.c.

References dt_iop_color_picker_reset(), dt_iop_gui_data(), g, gui_changed(), and TRUE.

◆ init_pipe()

void init_pipe ( dt_iop_module_t *  self,
dt_dev_pixelpipe_t *  pipe,
dt_dev_pixelpipe_iop_t *  piece 
)

Definition at line 510 of file profile_gamma.c.

References dt_calloc_align(), and piece.

◆ init_presets()

void init_presets ( dt_iop_module_so_t *  self)

◆ legacy_params()

int legacy_params ( dt_iop_module_t *  self,
const void *const  old_params,
const int  old_version,
void *  new_params,
const int  new_version 
)

Definition at line 186 of file profile_gamma.c.

References d, dt_iop_module_t::default_params, linear, n, o, and PROFILEGAMMA_GAMMA.

◆ name()

const char * name ( )

Definition at line 115 of file profile_gamma.c.

◆ process()

__DT_CLONE_TARGETS__ int process ( dt_iop_module_t *  self,
const dt_dev_pixelpipe_t *  pipe,
const dt_dev_pixelpipe_iop_t *  piece,
const void *const  ivoid,
void *const  ovoid 
)

The log2(x) -> -INF when x -> 0 thus very low values (noise) will get even lower, resulting in noise negative amplification, which leads to pepper noise in shadows. To avoid that, we need to clip values that are noise for sure. Using 16 bits RAW data, the black value (known by rawspeed for every manufacturer) could be used as a threshold. However, at this point of the pixelpipe, the RAW levels have already been corrected and everything can happen with black levels in the exposure module. So we define the threshold as the first non-null 16 bit integer

Definition at line 212 of file profile_gamma.c.

References __OMP_FOR_SIMD__, __OMP_PARALLEL_FOR__, ch, DT_DEV_PIXELPIPE_DISPLAY_MASK, dt_iop_eval_exp(), dt_iop_profilegamma_data_t::dynamic_range, fastlog2(), dt_iop_profilegamma_data_t::grey_point, dt_iop_roi_t::height, i, k, dt_dev_pixelpipe_t::mask_display, dt_iop_profilegamma_data_t::mode, noise, out, ovoid, piece, pipe, PROFILEGAMMA_GAMMA, PROFILEGAMMA_LOG, dt_iop_profilegamma_data_t::shadows_range, dt_iop_profilegamma_data_t::table, dt_iop_profilegamma_data_t::unbounded_coeffs, and dt_iop_roi_t::width.