Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
profile_gamma.c File Reference
#include "bauhaus/bauhaus.h"
#include "common/colorspaces_inline_conversions.h"
#include "common/darktable.h"
#include "common/math.h"
#include "common/opencl.h"
#include "control/control.h"
#include "develop/develop.h"
#include "develop/imageop_math.h"
#include "develop/imageop_gui.h"
#include "dtgtk/button.h"
#include "gui/gtk.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 dependency graph for profile_gamma.c:

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

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 
)

◆ color_picker_apply()

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

◆ default_colorspace()

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

References IOP_CS_RGB.

◆ default_group()

int default_group ( )

References IOP_GROUP_TECHNICAL.

◆ description()

const char ** description ( struct dt_iop_module_t self)

◆ flags()

◆ gui_changed()

◆ gui_init()

◆ gui_reset()

void gui_reset ( dt_iop_module_t self)

◆ 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

References dt_iop_color_picker_reset(), g, gui_changed(), dt_iop_module_t::gui_data, and TRUE.

◆ init_pipe()

◆ init_presets()

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

◆ name()

const char * name ( )

◆ process()

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

References dt_iop_buffer_dsc_t::channels, dt_dev_pixelpipe_iop_t::data, dt_dev_pixelpipe_iop_t::dsc_in, DT_DEV_PIXELPIPE_DISPLAY_MASK, dt_iop_alpha_copy(), 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, dt_dev_pixelpipe_t::mask_display, dt_iop_profilegamma_data_t::mode, out, PROFILEGAMMA_GAMMA, PROFILEGAMMA_LOG, dt_dev_pixelpipe_iop_t::roi_out, 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.