Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
histogram.c File Reference
#include <stdint.h>
#include "bauhaus/bauhaus.h"
#include "common/atomic.h"
#include "common/color_vocabulary.h"
#include "common/darktable.h"
#include "common/debug.h"
#include "common/histogram.h"
#include "common/iop_profile.h"
#include "common/imagebuf.h"
#include "common/image_cache.h"
#include "common/math.h"
#include "control/conf.h"
#include "control/control.h"
#include "develop/develop.h"
#include "dtgtk/drawingarea.h"
#include "dtgtk/button.h"
#include "gui/color_picker_proxy.h"
#include "gui/draw.h"
#include "gui/gtk.h"
#include "libs/lib.h"
#include "libs/lib_api.h"
#include "libs/colorpicker.h"
+ Include dependency graph for libs/histogram.c:

Data Structures

struct  dt_lib_histogram_cache_t
 
struct  dt_lib_histogram_t
 

Macros

#define HISTOGRAM_BINS   256
 
#define TONES   128
 
#define GAMMA   1.f / 1.5f
 

Typedefs

typedef enum dt_lib_histogram_scope_type_t dt_lib_histogram_scope_type_t
 
typedef struct dt_lib_histogram_cache_t dt_lib_histogram_cache_t
 
typedef enum dt_lib_colorpicker_model_t dt_lib_colorpicker_model_t
 
typedef struct dt_lib_histogram_t dt_lib_histogram_t
 

Enumerations

enum  dt_lib_histogram_scope_type_t {
  DT_LIB_HISTOGRAM_SCOPE_HISTOGRAM = 0 ,
  DT_LIB_HISTOGRAM_SCOPE_WAVEFORM_HORIZONTAL ,
  DT_LIB_HISTOGRAM_SCOPE_WAVEFORM_VERTICAL ,
  DT_LIB_HISTOGRAM_SCOPE_PARADE_HORIZONTAL ,
  DT_LIB_HISTOGRAM_SCOPE_PARADE_VERTICAL ,
  DT_LIB_HISTOGRAM_SCOPE_VECTORSCOPE ,
  DT_LIB_HISTOGRAM_SCOPE_N
}
 
enum  dt_lib_colorpicker_model_t {
  DT_LIB_COLORPICKER_MODEL_RGB = 0 ,
  DT_LIB_COLORPICKER_MODEL_LAB ,
  DT_LIB_COLORPICKER_MODEL_LCH ,
  DT_LIB_COLORPICKER_MODEL_HSL ,
  DT_LIB_COLORPICKER_MODEL_HSV ,
  DT_LIB_COLORPICKER_MODEL_NONE
}
 

Functions

const char * name (struct dt_lib_module_t *self)
 
const char ** views (dt_lib_module_t *self)
 
uint32_t container (dt_lib_module_t *self)
 
int expandable (dt_lib_module_t *self)
 
int position ()
 
static void _update_picker_output (dt_lib_module_t *self)
 
static void _update_samples_output (dt_lib_module_t *self)
 
static void _update_sample_label (dt_lib_module_t *self, dt_colorpicker_sample_t *sample)
 
dt_backbuf_t_get_backuf (dt_develop_t *dev, const char *op)
 
void _backbuf_int_to_op (const int value, dt_lib_histogram_t *d)
 
int _backbuf_op_to_int (dt_lib_histogram_t *d)
 
void _scope_pixel_to_xyz (const dt_aligned_pixel_t rgb_in, dt_aligned_pixel_t xyz_out, dt_lib_histogram_t *d)
 
void _scope_pixel_to_display_rgb (const dt_aligned_pixel_t rgb_in, dt_aligned_pixel_t rgb_out, dt_lib_histogram_t *d)
 
void _reset_cache (dt_lib_histogram_t *d)
 
static gboolean _is_backbuf_ready (dt_lib_histogram_t *d)
 
static void _redraw_scopes (dt_lib_histogram_t *d)
 
uint32_t _find_max_histogram (const uint32_t *const restrict bins, const size_t binning_size)
 
static void _bin_pixels_histogram_in_roi (const float *const restrict image, uint32_t *const restrict bins, const size_t min_x, const size_t max_x, const size_t min_y, const size_t max_y, const size_t width)
 
static void _bin_pickers_histogram (const float *const restrict image, const size_t width, const size_t height, uint32_t *bins, dt_colorpicker_sample_t *sample)
 
static void _process_histogram (dt_backbuf_t *backbuf, cairo_t *cr, const int width, const int height)
 
static void _bin_pixels_waveform_in_roi (const float *const restrict image, uint32_t *const restrict bins, const size_t min_x, const size_t max_x, const size_t min_y, const size_t max_y, const size_t width, const size_t binning_size, const gboolean vertical)
 
static void _bin_pickers_waveforms (const float *const restrict image, uint32_t *const restrict bins, const size_t width, const size_t height, const size_t binning_size, const gboolean vertical, dt_colorpicker_sample_t *sample)
 
static void _bin_pixels_waveform (const float *const restrict image, uint32_t *const restrict bins, const size_t width, const size_t height, const size_t binning_size, const gboolean vertical)
 
static void _create_waveform_image (const uint32_t *const restrict bins, uint8_t *const restrict image, const uint32_t max_hist, const size_t width, const size_t height)
 
static void _mask_waveform (const uint8_t *const restrict image, uint8_t *const restrict masked, const size_t width, const size_t height, const size_t channel)
 
static void _paint_waveform (cairo_t *cr, uint8_t *const restrict image, const int width, const int height, const size_t img_width, const size_t img_height, const gboolean vertical)
 
static void _paint_parade (cairo_t *cr, uint8_t *const restrict image, const int width, const int height, const size_t img_width, const size_t img_height, const gboolean vertical)
 
static void _process_waveform (dt_backbuf_t *backbuf, cairo_t *cr, const int width, const int height, const gboolean vertical, const gboolean parade)
 
static float _Luv_to_vectorscope_coord_zoom (const float value, const float zoom)
 
static float _vectorscope_coord_zoom_to_Luv (const float value, const float zoom)
 
static void _bin_pixels_vectorscope_in_roi (const float *const restrict image, uint32_t *const restrict vectorscope, const size_t min_x, const size_t max_x, const size_t min_y, const size_t max_y, const size_t width, const float zoom, dt_lib_histogram_t *d)
 
static void _bin_pickers_vectorscope (const float *const restrict image, uint32_t *const restrict vectorscope, const size_t width, const size_t height, const float zoom, dt_lib_histogram_t *d, const dt_colorpicker_sample_t *const sample)
 
static void _create_vectorscope_image (const uint32_t *const restrict vectorscope, uint8_t *const restrict image, const uint32_t max_hist, const float zoom)
 
static void _bin_vectorscope (const float *const restrict image, uint32_t *const vectorscope, const size_t width, const size_t height, const float zoom, dt_lib_histogram_t *d)
 
static void _process_vectorscope (dt_backbuf_t *backbuf, cairo_t *cr, const int width, const int height, const float zoom, dt_lib_histogram_t *d)
 
gboolean _needs_recompute (dt_lib_histogram_t *d, const int width, const int height)
 
static gboolean _draw_callback (GtkWidget *widget, cairo_t *crf, gpointer user_data)
 
void _get_allocation_size (dt_lib_histogram_t *d, int *width, int *height)
 
gboolean _redraw_surface (dt_lib_histogram_t *d)
 
static void _destroy_surface (dt_lib_histogram_t *d)
 
gboolean _trigger_recompute (dt_lib_histogram_t *d)
 
static void _pixelpipe_pick_from_image (const dt_backbuf_t *const backbuf, dt_colorpicker_sample_t *const sample, dt_lib_histogram_t *d)
 
static void _pixelpipe_pick_samples (dt_lib_histogram_t *d)
 
static void _update_everything (dt_lib_module_t *self)
 
static void _lib_histogram_preview_updated_callback (gpointer instance, dt_lib_module_t *self)
 
void view_enter (struct dt_lib_module_t *self, struct dt_view_t *old_view, struct dt_view_t *new_view)
 
void view_leave (struct dt_lib_module_t *self, struct dt_view_t *old_view, struct dt_view_t *new_view)
 
void _stage_callback (GtkWidget *widget, dt_lib_module_t *self)
 
void _display_callback (GtkWidget *widget, dt_lib_module_t *self)
 
static void _resize_callback (GtkWidget *widget, GdkRectangle *allocation, dt_lib_histogram_t *d)
 
static gboolean _area_scrolled_callback (GtkWidget *widget, GdkEventScroll *event, dt_lib_histogram_t *d)
 
void _set_params (dt_lib_histogram_t *d)
 
static gboolean _sample_draw_callback (GtkWidget *widget, cairo_t *cr, dt_colorpicker_sample_t *sample)
 
static void _picker_button_toggled (GtkToggleButton *button, dt_lib_histogram_t *d)
 
static void _update_size (dt_lib_module_t *self, dt_lib_colorpicker_size_t size)
 
static void _set_sample_box_area (dt_lib_module_t *self, const dt_boundingbox_t box)
 
static void _set_sample_point (dt_lib_module_t *self, const float pos[2])
 
static gboolean _sample_tooltip_callback (GtkWidget *widget, gint x, gint y, gboolean keyboard_mode, GtkTooltip *tooltip, const dt_colorpicker_sample_t *sample)
 
static void _statistic_changed (GtkWidget *widget, dt_lib_module_t *self)
 
static void _color_mode_changed (GtkWidget *widget, dt_lib_module_t *self)
 
static void _label_size_allocate_callback (GtkWidget *widget, GdkRectangle *allocation, gpointer user_data)
 
static gboolean _sample_enter_callback (GtkWidget *widget, GdkEvent *event, dt_colorpicker_sample_t *sample)
 
static gboolean _sample_leave_callback (GtkWidget *widget, GdkEvent *event, gpointer data)
 
static void _remove_sample (dt_colorpicker_sample_t *sample)
 
static void _remove_sample_cb (GtkButton *widget, dt_colorpicker_sample_t *sample)
 
static gboolean _live_sample_button (GtkWidget *widget, GdkEventButton *event, dt_colorpicker_sample_t *sample)
 
static void _add_sample (GtkButton *widget, dt_lib_module_t *self)
 
static void _display_samples_changed (GtkToggleButton *button, dt_lib_module_t *self)
 
static void _restrict_histogram_changed (GtkToggleButton *button, dt_lib_module_t *self)
 
void gui_reset (dt_lib_module_t *self)
 
void gui_init (dt_lib_module_t *self)
 
void gui_cleanup (dt_lib_module_t *self)
 

Variables

const gchar * dt_lib_colorpicker_model_names [] = { N_("RGB"), N_("Lab"), N_("LCh"), N_("HSL"), N_("HSV"), N_("none"), NULL }
 
const gchar * dt_lib_colorpicker_statistic_names [] = { N_("mean"), N_("min"), N_("max"), NULL }
 

Macro Definition Documentation

◆ GAMMA

#define GAMMA   1.f / 1.5f

◆ HISTOGRAM_BINS

#define HISTOGRAM_BINS   256

◆ TONES

#define TONES   128

Typedef Documentation

◆ dt_lib_colorpicker_model_t

◆ dt_lib_histogram_cache_t

◆ dt_lib_histogram_scope_type_t

◆ dt_lib_histogram_t

Enumeration Type Documentation

◆ dt_lib_colorpicker_model_t

Enumerator
DT_LIB_COLORPICKER_MODEL_RGB 
DT_LIB_COLORPICKER_MODEL_LAB 
DT_LIB_COLORPICKER_MODEL_LCH 
DT_LIB_COLORPICKER_MODEL_HSL 
DT_LIB_COLORPICKER_MODEL_HSV 
DT_LIB_COLORPICKER_MODEL_NONE 

◆ dt_lib_histogram_scope_type_t

Enumerator
DT_LIB_HISTOGRAM_SCOPE_HISTOGRAM 
DT_LIB_HISTOGRAM_SCOPE_WAVEFORM_HORIZONTAL 
DT_LIB_HISTOGRAM_SCOPE_WAVEFORM_VERTICAL 
DT_LIB_HISTOGRAM_SCOPE_PARADE_HORIZONTAL 
DT_LIB_HISTOGRAM_SCOPE_PARADE_VERTICAL 
DT_LIB_HISTOGRAM_SCOPE_VECTORSCOPE 
DT_LIB_HISTOGRAM_SCOPE_N 

Function Documentation

◆ _add_sample()

◆ _area_scrolled_callback()

◆ _backbuf_int_to_op()

void _backbuf_int_to_op ( const int  value,
dt_lib_histogram_t d 
)

References dt_lib_histogram_t::op.

Referenced by _stage_callback().

◆ _backbuf_op_to_int()

int _backbuf_op_to_int ( dt_lib_histogram_t d)

◆ _bin_pickers_histogram()

static void _bin_pickers_histogram ( const float *const restrict  image,
const size_t  width,
const size_t  height,
uint32_t *  bins,
dt_colorpicker_sample_t sample 
)
inlinestatic

◆ _bin_pickers_vectorscope()

static void _bin_pickers_vectorscope ( const float *const restrict  image,
uint32_t *const restrict  vectorscope,
const size_t  width,
const size_t  height,
const float  zoom,
dt_lib_histogram_t d,
const dt_colorpicker_sample_t *const  sample 
)
inlinestatic

◆ _bin_pickers_waveforms()

static void _bin_pickers_waveforms ( const float *const restrict  image,
uint32_t *const restrict  bins,
const size_t  width,
const size_t  height,
const size_t  binning_size,
const gboolean  vertical,
dt_colorpicker_sample_t sample 
)
inlinestatic

◆ _bin_pixels_histogram_in_roi()

static void _bin_pixels_histogram_in_roi ( const float *const restrict  image,
uint32_t *const restrict  bins,
const size_t  min_x,
const size_t  max_x,
const size_t  min_y,
const size_t  max_y,
const size_t  width 
)
inlinestatic

References HISTOGRAM_BINS, and width.

Referenced by _bin_pickers_histogram(), and _process_histogram().

◆ _bin_pixels_vectorscope_in_roi()

static void _bin_pixels_vectorscope_in_roi ( const float *const restrict  image,
uint32_t *const restrict  vectorscope,
const size_t  min_x,
const size_t  max_x,
const size_t  min_y,
const size_t  max_y,
const size_t  width,
const float  zoom,
dt_lib_histogram_t d 
)
static

◆ _bin_pixels_waveform()

static void _bin_pixels_waveform ( const float *const restrict  image,
uint32_t *const restrict  bins,
const size_t  width,
const size_t  height,
const size_t  binning_size,
const gboolean  vertical 
)
inlinestatic

◆ _bin_pixels_waveform_in_roi()

static void _bin_pixels_waveform_in_roi ( const float *const restrict  image,
uint32_t *const restrict  bins,
const size_t  min_x,
const size_t  max_x,
const size_t  min_y,
const size_t  max_y,
const size_t  width,
const size_t  binning_size,
const gboolean  vertical 
)
inlinestatic

References TONES, and width.

Referenced by _bin_pickers_waveforms(), and _bin_pixels_waveform().

◆ _bin_vectorscope()

static void _bin_vectorscope ( const float *const restrict  image,
uint32_t *const  vectorscope,
const size_t  width,
const size_t  height,
const float  zoom,
dt_lib_histogram_t d 
)
static

◆ _color_mode_changed()

static void _color_mode_changed ( GtkWidget *  widget,
dt_lib_module_t self 
)
static

◆ _create_vectorscope_image()

static void _create_vectorscope_image ( const uint32_t *const restrict  vectorscope,
uint8_t *const restrict  image,
const uint32_t  max_hist,
const float  zoom 
)
static

◆ _create_waveform_image()

static void _create_waveform_image ( const uint32_t *const restrict  bins,
uint8_t *const restrict  image,
const uint32_t  max_hist,
const size_t  width,
const size_t  height 
)
static

References GAMMA, height, and width.

Referenced by _process_waveform().

◆ _destroy_surface()

static void _destroy_surface ( dt_lib_histogram_t d)
static

◆ _display_callback()

◆ _display_samples_changed()

static void _display_samples_changed ( GtkToggleButton *  button,
dt_lib_module_t self 
)
static

◆ _draw_callback()

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

References dt_lib_histogram_t::cst.

Referenced by gui_init().

◆ _find_max_histogram()

uint32_t _find_max_histogram ( const uint32_t *const restrict  bins,
const size_t  binning_size 
)

◆ _get_allocation_size()

void _get_allocation_size ( dt_lib_histogram_t d,
int *  width,
int *  height 
)

◆ _get_backuf()

◆ _is_backbuf_ready()

◆ _label_size_allocate_callback()

static void _label_size_allocate_callback ( GtkWidget *  widget,
GdkRectangle *  allocation,
gpointer  user_data 
)
static

Referenced by _add_sample(), and gui_init().

◆ _lib_histogram_preview_updated_callback()

static void _lib_histogram_preview_updated_callback ( gpointer  instance,
dt_lib_module_t self 
)
static

◆ _live_sample_button()

◆ _Luv_to_vectorscope_coord_zoom()

static float _Luv_to_vectorscope_coord_zoom ( const float  value,
const float  zoom 
)
static

◆ _mask_waveform()

static void _mask_waveform ( const uint8_t *const restrict  image,
uint8_t *const restrict  masked,
const size_t  width,
const size_t  height,
const size_t  channel 
)
static

References height, and width.

Referenced by _paint_parade().

◆ _needs_recompute()

◆ _paint_parade()

static void _paint_parade ( cairo_t *  cr,
uint8_t *const restrict  image,
const int  width,
const int  height,
const size_t  img_width,
const size_t  img_height,
const gboolean  vertical 
)
static

◆ _paint_waveform()

static void _paint_waveform ( cairo_t *  cr,
uint8_t *const restrict  image,
const int  width,
const int  height,
const size_t  img_width,
const size_t  img_height,
const gboolean  vertical 
)
static

References double(), height, TONES, and width.

Referenced by _process_waveform().

◆ _picker_button_toggled()

static void _picker_button_toggled ( GtkToggleButton *  button,
dt_lib_histogram_t d 
)
static

◆ _pixelpipe_pick_from_image()

◆ _pixelpipe_pick_samples()

◆ _process_histogram()

◆ _process_vectorscope()

◆ _process_waveform()

static void _process_waveform ( dt_backbuf_t backbuf,
cairo_t *  cr,
const int  width,
const int  height,
const gboolean  vertical,
const gboolean  parade 
)
static

◆ _redraw_scopes()

static void _redraw_scopes ( dt_lib_histogram_t d)
static

◆ _redraw_surface()

◆ _remove_sample()

◆ _remove_sample_cb()

static void _remove_sample_cb ( GtkButton *  widget,
dt_colorpicker_sample_t sample 
)
static

◆ _reset_cache()

◆ _resize_callback()

static void _resize_callback ( GtkWidget *  widget,
GdkRectangle *  allocation,
dt_lib_histogram_t d 
)
static

References _reset_cache(), and _trigger_recompute().

Referenced by gui_init().

◆ _restrict_histogram_changed()

static void _restrict_histogram_changed ( GtkToggleButton *  button,
dt_lib_module_t self 
)
static

◆ _sample_draw_callback()

static gboolean _sample_draw_callback ( GtkWidget *  widget,
cairo_t *  cr,
dt_colorpicker_sample_t sample 
)
static

◆ _sample_enter_callback()

static gboolean _sample_enter_callback ( GtkWidget *  widget,
GdkEvent *  event,
dt_colorpicker_sample_t sample 
)
static

◆ _sample_leave_callback()

static gboolean _sample_leave_callback ( GtkWidget *  widget,
GdkEvent *  event,
gpointer  data 
)
static

◆ _sample_tooltip_callback()

static gboolean _sample_tooltip_callback ( GtkWidget *  widget,
gint  x,
gint  y,
gboolean  keyboard_mode,
GtkTooltip *  tooltip,
const dt_colorpicker_sample_t sample 
)
static

◆ _scope_pixel_to_display_rgb()

◆ _scope_pixel_to_xyz()

◆ _set_params()

◆ _set_sample_box_area()

◆ _set_sample_point()

◆ _stage_callback()

◆ _statistic_changed()

◆ _trigger_recompute()

◆ _update_everything()

◆ _update_picker_output()

static void _update_picker_output ( dt_lib_module_t self)
static

References _update_everything().

Referenced by _update_size(), gui_init(), and gui_reset().

◆ _update_sample_label()

◆ _update_samples_output()

static void _update_samples_output ( dt_lib_module_t self)
static

References _update_everything().

Referenced by gui_init().

◆ _update_size()

◆ _vectorscope_coord_zoom_to_Luv()

static float _vectorscope_coord_zoom_to_Luv ( const float  value,
const float  zoom 
)
static

References HISTOGRAM_BINS.

Referenced by _create_vectorscope_image().

◆ container()

uint32_t container ( dt_lib_module_t self)

◆ expandable()

int expandable ( dt_lib_module_t self)

◆ gui_cleanup()

◆ gui_init()

void gui_init ( dt_lib_module_t self)

References _add_sample(), _area_scrolled_callback(), _color_mode_changed(), _display_callback(), _display_samples_changed(), _draw_callback(), _label_size_allocate_callback(), _picker_button_toggled(), _reset_cache(), _resize_callback(), _restrict_histogram_changed(), _sample_draw_callback(), _sample_enter_callback(), _sample_leave_callback(), _sample_tooltip_callback(), _set_params(), _set_sample_box_area(), _set_sample_point(), _stage_callback(), _statistic_changed(), _update_picker_output(), _update_samples_output(), dt_lib_histogram_t::add_sample_button, darktable_t::bauhaus, dt_lib_histogram_t::color_mode_selector, dt_colorpicker_sample_t::color_patch, dt_lib_t::colorpicker, dt_lib_histogram_t::cst, darktable, dt_lib_module_t::data, dt_lib_histogram_t::display, dt_lib_t::display_samples, dt_lib_histogram_t::display_samples_check_box, dt_bauhaus_combobox_add(), dt_bauhaus_combobox_new(), dt_bauhaus_combobox_new_full(), dt_bauhaus_combobox_set_entries_ellipsis(), dt_bauhaus_widget_set_label(), dt_calloc_align(), dt_color_picker_new(), DT_COLOR_PICKER_POINT_AREA, dt_conf_get_bool(), dt_conf_get_string_const(), dt_gui_add_class(), DT_GUI_MODULE, dt_lib_colorpicker_model_names, dt_lib_colorpicker_statistic_names, DT_PIXEL_APPLY_DPI, dt_ui_scroll_wrap(), dt_ui_section_label_new(), dtgtk_button_new(), dtgtk_cairo_paint_square_plus(), dtgtk_drawing_area_new_with_aspect_ratio(), FALSE, darktable_t::gui, darktable_t::lib, dt_lib_t::live_samples, dt_lib_histogram_t::model, dt_colorpicker_sample_t::output_label, dt_lib_histogram_t::picker_button, dt_lib_t::picker_proxy, dt_lib_histogram_t::primary_sample, dt_lib_t::primary_sample, dt_lib_t::proxy, dt_lib_t::restrict_histogram, dt_lib_histogram_t::samples_container, dt_lib_histogram_t::scope_draw, dt_gui_gtk_t::scroll_mask, dt_lib_t::set_sample_box_area, dt_lib_t::set_sample_point, dt_lib_histogram_t::stage, dt_lib_histogram_t::statistic, dt_lib_histogram_t::statistic_selector, dt_colorpicker_sample_t::swatch, TRUE, dt_lib_t::update_panel, dt_lib_t::update_samples, and dt_lib_module_t::widget.

◆ gui_reset()

◆ name()

const char * name ( struct dt_lib_module_t self)

◆ position()

int position ( )

◆ view_enter()

◆ view_leave()

◆ views()

const char ** views ( dt_lib_module_t self)

Variable Documentation

◆ dt_lib_colorpicker_model_names

const gchar* dt_lib_colorpicker_model_names[] = { N_("RGB"), N_("Lab"), N_("LCh"), N_("HSL"), N_("HSV"), N_("none"), NULL }

Referenced by _color_mode_changed(), and gui_init().

◆ dt_lib_colorpicker_statistic_names

const gchar* dt_lib_colorpicker_statistic_names[] = { N_("mean"), N_("min"), N_("max"), NULL }