Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
rawdenoiseai.c File Reference
#include "widgets/bauhaus.h"
#include "system/macros.h"
#include "system/openmp.h"
#include "system/target_clones.h"
#include "system/mem_alloc.h"
#include "common/logging.h"
#include "common/module_versioning.h"
#include <json-glib/json-glib.h>
#include "caches/pixelpipe_cache_alloc.h"
#include "common/file_location.h"
#include "common/imagebuf.h"
#include "common/nn_model.h"
#include "common/noiseprofiles.h"
#include "common/opencl.h"
#include "develop/imageop.h"
#include "develop/imageop_gui.h"
#include "develop/imageop_math.h"
#include "develop/tiling.h"
#include "iop/iop_api.h"
#include <gtk/gtk.h>
#include <stdlib.h>
#include "widgets/collapsible_section.h"
#include "widgets/label.h"
+ Include dependency graph for rawdenoiseai.c:

Go to the source code of this file.

Data Structures

struct  dt_iop_rawdenoiseai_params_t
 
struct  dt_iop_rawdenoiseai_gui_data_t
 
struct  dt_iop_rawdenoiseai_data_t
 
struct  dt_iop_rawdenoiseai_global_data_t
 
struct  nn_region_t
 

Macros

#define DT_RAWDENOISEAI_MODEL_LEN   128
 
#define DT_RAWDENOISEAI_NUM_VERSIONS   1
 
#define DT_RAWDENOISEAI_NUM_SIZES   3
 
#define DT_RAWDENOISEAI_NUM_SCALES   2
 
#define NN_REGION_MAX_BLOCKS   32
 
#define NN_REGION_SLACK   1.02f
 
#define DT_NN_FUSION_T_CHI2   2.5
 

Typedefs

typedef enum dt_iop_rawdenoiseai_version_t dt_iop_rawdenoiseai_version_t
 
typedef enum dt_iop_rawdenoiseai_size_t dt_iop_rawdenoiseai_size_t
 
typedef enum dt_iop_rawdenoiseai_scale_t dt_iop_rawdenoiseai_scale_t
 
typedef struct dt_iop_rawdenoiseai_params_t dt_iop_rawdenoiseai_params_t
 
typedef struct dt_iop_rawdenoiseai_gui_data_t dt_iop_rawdenoiseai_gui_data_t
 
typedef struct dt_iop_rawdenoiseai_data_t dt_iop_rawdenoiseai_data_t
 
typedef struct dt_iop_rawdenoiseai_global_data_t dt_iop_rawdenoiseai_global_data_t
 
typedef struct nn_region_t nn_region_t
 

Enumerations

enum  dt_iop_rawdenoiseai_version_t { DT_RAWDENOISEAI_V1 = 0 }
 
enum  dt_iop_rawdenoiseai_size_t {
  DT_RAWDENOISEAI_LARGE = 0 ,
  DT_RAWDENOISEAI_HALF = 1 ,
  DT_RAWDENOISEAI_QUARTER = 2
}
 
enum  dt_iop_rawdenoiseai_scale_t {
  DT_RAWDENOISEAI_SINGLE = 0 ,
  DT_RAWDENOISEAI_MULTI = 1
}
 

Functions

static dt_nn_model_t_get_model (dt_iop_rawdenoiseai_global_data_t *gd, dt_iop_rawdenoiseai_version_t ver, dt_iop_rawdenoiseai_size_t sz, dt_iop_rawdenoiseai_scale_t sc)
 
static dt_nn_model_t_get_custom_model (dt_iop_rawdenoiseai_global_data_t *gd, const char *base)
 
static GList_list_custom_models (void)
 
const char * name ()
 
const char ** description (struct dt_iop_module_t *self)
 
int flags ()
 
int default_group ()
 
int default_colorspace (dt_iop_module_t *self, dt_dev_pixelpipe_t *pipe, const dt_dev_pixelpipe_iop_t *piece)
 
void input_format (dt_iop_module_t *self, dt_dev_pixelpipe_t *pipe, dt_dev_pixelpipe_iop_t *piece, dt_iop_buffer_dsc_t *dsc)
 
static void_region_alloc (nn_region_t *r, size_t bytes, int long_lived)
 
static void _region_free (nn_region_t *r, void *p)
 
static void_nn_arena_alloc (size_t bytes, int long_lived)
 
static void _nn_arena_free (void *p)
 
void init_global (dt_iop_module_so_t *module)
 
void cleanup_global (dt_iop_module_so_t *module)
 
static dt_iop_rawdenoiseai_size_t _default_size (void)
 
static gboolean _rawdenoiseai_supported (dt_iop_module_t *module)
 
void reload_defaults (dt_iop_module_t *module)
 
gboolean force_enable (struct dt_iop_module_t *self, const gboolean current_state)
 
static void _fetch_noise_profile (dt_iop_module_t *self, dt_iop_rawdenoiseai_data_t *d)
 
void commit_params (struct dt_iop_module_t *self, dt_iop_params_t *params, dt_dev_pixelpipe_t *pipe, dt_dev_pixelpipe_iop_t *piece)
 
static unsigned _align_lcm (const unsigned a, const unsigned b)
 
void tiling_callback (struct dt_iop_module_t *self, const struct dt_dev_pixelpipe_t *pipe, const struct dt_dev_pixelpipe_iop_t *piece, struct dt_develop_tiling_t *tiling)
 
static __attribute__ ((always_inline))
 
static void _sigma_scale (const dt_iop_rawdenoiseai_data_t *d, float scale[3])
 
static __DT_CLONE_TARGETS__ void _k_bin_planes (const float *const nn_in, float *const coarse_in, float *const cnt, const int pw, const int ph, const int bin, const dt_iop_rawdenoiseai_data_t *const d)
 
static __DT_CLONE_TARGETS__ void _k_assemble (const float *const in, float *const nn_in, const int width, const int height, const int pw, const int ph, const dt_iop_rawdenoiseai_data_t *const d, const uint32_t filters, const uint8_t(*const xtrans)[6], const dt_iop_roi_t *const roi)
 
static __DT_CLONE_TARGETS__ void _k_residual (const float *const in, const float *const head, float *const out, const size_t n)
 
static __DT_CLONE_TARGETS__ void _k_blend_crop (const float *const in, const float *const den, float *const out, const int width, const int height, const int pw, const float strength)
 
static __DT_CLONE_TARGETS__ void _k_bin16_mdv (const float *const nn_in, const float *const denoised, float *const M, float *const D, float *const V, const int pw, const int ph)
 
static __DT_CLONE_TARGETS__ void _k_avg2x2 (const float *const in, float *const out, const int sw, const int sh, const size_t p0)
 
static __DT_CLONE_TARGETS__ void _upsample_bilinear (const float *const src, const int sw, const int sh, const int f, float *const dst)
 
static int _fusion_levels (void)
 
__DT_CLONE_TARGETS__ static __DT_CLONE_TARGETS__ void _k_floor_fuse (const float *const M, const float *const D, const float *const V, float *const fused, const int sw, const int sh, const size_t p0, const int S)
 
static __DT_CLONE_TARGETS__ void _k_fuse_step (const float *const fused_c, const float *const Mf, const float *const Df, const float *const Vf, const float *const Mc, const float *const Dc, float *const fused_f, float *const ups, const int sw, const int sh, const size_t p0, const int sc)
 
static __DT_CLONE_TARGETS__ void _k_bilerp_add (const float *const fused, const float *const D16, float *const scratch, const float *const nn_in, float *const denoised, const int pw, const int ph, const size_t p0, const int cw0, const int ch0)
 
static int _apply_low_band_anchor (const float *const nn_in, float *const denoised, const int pw, const int ph, const int scale)
 
__DT_CLONE_TARGETS__ int process (struct 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)
 
int process_cl (struct dt_iop_module_t *self, const dt_dev_pixelpipe_t *pipe, const dt_dev_pixelpipe_iop_t *piece, cl_mem dev_in, cl_mem dev_out)
 
void init (dt_iop_module_t *module)
 
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)
 
static void _custom_model_callback (GtkWidget *w, dt_iop_module_t *self)
 
static void _custom_model_populate (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)
 
void gui_cleanup (dt_iop_module_t *self)
 

Variables

static const char *const _version_tag [1] = { "v1" }
 
static const char *const _size_tag [3] = { "large", "half", "quarter" }
 
static const char *const _scale_tag [2] = { "single", "multi" }
 
static __thread nn_region_t_nn_region = NULL
 
static const float DT_NN_FUSION_DENS [3] = { 0.25f, 0.5f, 0.25f }
 

Macro Definition Documentation

◆ DT_NN_FUSION_T_CHI2

#define DT_NN_FUSION_T_CHI2   2.5

Definition at line 923 of file rawdenoiseai.c.

◆ DT_RAWDENOISEAI_MODEL_LEN

#define DT_RAWDENOISEAI_MODEL_LEN   128

Definition at line 83 of file rawdenoiseai.c.

◆ DT_RAWDENOISEAI_NUM_SCALES

#define DT_RAWDENOISEAI_NUM_SCALES   2

Definition at line 121 of file rawdenoiseai.c.

◆ DT_RAWDENOISEAI_NUM_SIZES

#define DT_RAWDENOISEAI_NUM_SIZES   3

Definition at line 120 of file rawdenoiseai.c.

◆ DT_RAWDENOISEAI_NUM_VERSIONS

#define DT_RAWDENOISEAI_NUM_VERSIONS   1

Definition at line 119 of file rawdenoiseai.c.

◆ NN_REGION_MAX_BLOCKS

#define NN_REGION_MAX_BLOCKS   32

Definition at line 376 of file rawdenoiseai.c.

◆ NN_REGION_SLACK

#define NN_REGION_SLACK   1.02f

Definition at line 380 of file rawdenoiseai.c.

Typedef Documentation

◆ dt_iop_rawdenoiseai_data_t

◆ dt_iop_rawdenoiseai_global_data_t

◆ dt_iop_rawdenoiseai_gui_data_t

◆ dt_iop_rawdenoiseai_params_t

◆ dt_iop_rawdenoiseai_scale_t

◆ dt_iop_rawdenoiseai_size_t

◆ dt_iop_rawdenoiseai_version_t

◆ nn_region_t

Enumeration Type Documentation

◆ dt_iop_rawdenoiseai_scale_t

Enumerator
DT_RAWDENOISEAI_SINGLE 
DT_RAWDENOISEAI_MULTI 

Definition at line 113 of file rawdenoiseai.c.

◆ dt_iop_rawdenoiseai_size_t

Enumerator
DT_RAWDENOISEAI_LARGE 
DT_RAWDENOISEAI_HALF 
DT_RAWDENOISEAI_QUARTER 

Definition at line 103 of file rawdenoiseai.c.

◆ dt_iop_rawdenoiseai_version_t

Enumerator
DT_RAWDENOISEAI_V1 

Definition at line 91 of file rawdenoiseai.c.

Function Documentation

◆ __attribute__()

static __attribute__ ( (always_inline )
inlinestatic

Definition at line 820 of file rawdenoiseai.c.

References L, n, and v.

◆ _align_lcm()

static unsigned _align_lcm ( const unsigned  a,
const unsigned  b 
)
static

Definition at line 708 of file rawdenoiseai.c.

References t, and x.

Referenced by tiling_callback().

◆ _apply_low_band_anchor()

static int _apply_low_band_anchor ( const float *const  nn_in,
float *const  denoised,
const int  pw,
const int  ph,
const int  scale 
)
static

◆ _custom_model_callback()

◆ _custom_model_populate()

◆ _default_size()

◆ _fetch_noise_profile()

◆ _fusion_levels()

static int _fusion_levels ( void  )
inlinestatic

Definition at line 1049 of file rawdenoiseai.c.

References DT_NN_FUSION_COARSEST, DT_NN_FUSION_FINEST, and n.

Referenced by _apply_low_band_anchor(), and process_cl().

◆ _get_custom_model()

◆ _get_model()

◆ _k_assemble()

static __DT_CLONE_TARGETS__ void _k_assemble ( const float *const  in,
float *const  nn_in,
const int  width,
const int  height,
const int  pw,
const int  ph,
const dt_iop_rawdenoiseai_data_t *const  d,
const uint32_t  filters,
const uint8_t(*)  xtrans[6],
const dt_iop_roi_t *const  roi 
)
static

Definition at line 874 of file rawdenoiseai.c.

References __OMP_PARALLEL_FOR__, _sigma_scale(), d, FC(), FCxtrans(), height, L, MAX, sigma, v, width, and x.

Referenced by process().

◆ _k_avg2x2()

static __DT_CLONE_TARGETS__ void _k_avg2x2 ( const float *const  in,
float *const  out,
const int  sw,
const int  sh,
const size_t  p0 
)
static

Definition at line 992 of file rawdenoiseai.c.

References L, out, w2, and x.

Referenced by _apply_low_band_anchor().

◆ _k_bilerp_add()

static __DT_CLONE_TARGETS__ void _k_bilerp_add ( const float *const  fused,
const float *const  D16,
float *const  scratch,
const float *const  nn_in,
float *const  denoised,
const int  pw,
const int  ph,
const size_t  p0,
const int  cw0,
const int  ch0 
)
static

Definition at line 1165 of file rawdenoiseai.c.

References __OMP_PARALLEL_FOR__, d0, DT_NN_FUSION_FINEST, i, inv, L, and x.

Referenced by _apply_low_band_anchor().

◆ _k_bin16_mdv()

static __DT_CLONE_TARGETS__ void _k_bin16_mdv ( const float *const  nn_in,
const float *const  denoised,
float *const  M,
float *const  D,
float *const  V,
const int  pw,
const int  ph 
)
static

Definition at line 955 of file rawdenoiseai.c.

References __OMP_PARALLEL_FOR__, DT_NN_FUSION_FINEST, i, L, M, n, V, and x.

Referenced by _apply_low_band_anchor().

◆ _k_bin_planes()

static __DT_CLONE_TARGETS__ void _k_bin_planes ( const float *const  nn_in,
float *const  coarse_in,
float *const  cnt,
const int  pw,
const int  ph,
const int  bin,
const dt_iop_rawdenoiseai_data_t *const  d 
)
static

Definition at line 846 of file rawdenoiseai.c.

References __OMP_PARALLEL_FOR__, _sigma_scale(), d, dt_nn_bin_planes(), i, L, MAX, n, and sigma.

Referenced by process().

◆ _k_blend_crop()

static __DT_CLONE_TARGETS__ void _k_blend_crop ( const float *const  in,
const float *const  den,
float *const  out,
const int  width,
const int  height,
const int  pw,
const float  strength 
)
static

Definition at line 939 of file rawdenoiseai.c.

References __OMP_PARALLEL_FOR__, height, L, out, strength(), width, and x.

Referenced by process().

◆ _k_floor_fuse()

__DT_CLONE_TARGETS__ static __DT_CLONE_TARGETS__ void _k_floor_fuse ( const float *const  M,
const float *const  D,
const float *const  V,
float *const  fused,
const int  sw,
const int  sh,
const size_t  p0,
const int  S 
)
static

Definition at line 1070 of file rawdenoiseai.c.

References double(), DT_NN_FUSION_DENS, DT_NN_FUSION_T_CHI2, i, L, M, S, V, and x.

Referenced by _apply_low_band_anchor().

◆ _k_fuse_step()

static __DT_CLONE_TARGETS__ void _k_fuse_step ( const float *const  fused_c,
const float *const  Mf,
const float *const  Df,
const float *const  Vf,
const float *const  Mc,
const float *const  Dc,
float *const  fused_f,
float *const  ups,
const int  sw,
const int  sh,
const size_t  p0,
const int  sc 
)
static

Definition at line 1115 of file rawdenoiseai.c.

References _upsample_bilinear(), d, double(), DT_NN_FUSION_DENS, DT_NN_FUSION_T_CHI2, i, L, n, and x.

Referenced by _apply_low_band_anchor().

◆ _k_residual()

static __DT_CLONE_TARGETS__ void _k_residual ( const float *const  in,
const float *const  head,
float *const  out,
const size_t  n 
)
static

Definition at line 929 of file rawdenoiseai.c.

References __OMP_PARALLEL_FOR__, i, L, n, and out.

Referenced by process().

◆ _list_custom_models()

◆ _nn_arena_alloc()

static void * _nn_arena_alloc ( size_t  bytes,
int  long_lived 
)
static

Definition at line 472 of file rawdenoiseai.c.

References _nn_region, _region_alloc(), dt_pixelpipe_cache_alloc_align_cache, and L.

Referenced by init_global().

◆ _nn_arena_free()

static void _nn_arena_free ( void p)
static

Definition at line 478 of file rawdenoiseai.c.

References _nn_region, _region_free(), dt_pixelpipe_cache_free_align, L, p, and r.

Referenced by init_global().

◆ _rawdenoiseai_supported()

static gboolean _rawdenoiseai_supported ( dt_iop_module_t module)
static

◆ _region_alloc()

static void * _region_alloc ( nn_region_t r,
size_t  bytes,
int  long_lived 
)
static

Definition at line 395 of file rawdenoiseai.c.

References nn_region_t::blocks, DT_DEBUG_ALWAYS, dt_print(), i, L, NN_REGION_MAX_BLOCKS, nn_region_t::off, and r.

Referenced by _nn_arena_alloc(), and process().

◆ _region_free()

static void _region_free ( nn_region_t r,
void p 
)
static

Definition at line 460 of file rawdenoiseai.c.

References i, L, p, and r.

Referenced by _nn_arena_free().

◆ _sigma_scale()

static void _sigma_scale ( const dt_iop_rawdenoiseai_data_t d,
float  scale[3] 
)
static

Definition at line 834 of file rawdenoiseai.c.

References d.

Referenced by _k_assemble(), _k_bin_planes(), and process_cl().

◆ _upsample_bilinear()

static __DT_CLONE_TARGETS__ void _upsample_bilinear ( const float *const  src,
const int  sw,
const int  sh,
const int  f,
float *const  dst 
)
static

Definition at line 1037 of file rawdenoiseai.c.

References f, L, and x.

Referenced by _k_fuse_step().

◆ cleanup_global()

◆ cleanup_pipe()

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

Definition at line 1683 of file rawdenoiseai.c.

References dt_dev_pixelpipe_iop_t::data, dt_free_align, and L.

◆ commit_params()

◆ 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 344 of file rawdenoiseai.c.

References IOP_CS_RAW.

◆ default_group()

int default_group ( )

Definition at line 339 of file rawdenoiseai.c.

References IOP_GROUP_REPAIR.

◆ description()

const char ** description ( struct dt_iop_module_t self)

Definition at line 325 of file rawdenoiseai.c.

References dt_iop_set_description(), and L.

◆ flags()

int flags ( )

Definition at line 334 of file rawdenoiseai.c.

References IOP_FLAGS_ALLOW_TILING, and IOP_FLAGS_SUPPORTS_BLENDING.

◆ force_enable()

gboolean force_enable ( struct dt_iop_module_t self,
const gboolean  current_state 
)

Definition at line 600 of file rawdenoiseai.c.

References _rawdenoiseai_supported(), and L.

◆ gui_cleanup()

void gui_cleanup ( dt_iop_module_t self)

Definition at line 1859 of file rawdenoiseai.c.

References IOP_GUI_FREE.

◆ gui_init()

◆ gui_update()

◆ init()

void init ( dt_iop_module_t module)

Definition at line 1672 of file rawdenoiseai.c.

References dt_iop_default_init(), and L.

◆ init_global()

◆ init_pipe()

◆ input_format()

◆ name()

const char * name ( )

Definition at line 320 of file rawdenoiseai.c.

References L.

Referenced by _get_model(), and _list_custom_models().

◆ process()

◆ process_cl()

◆ reload_defaults()

void reload_defaults ( dt_iop_module_t module)

Definition at line 575 of file rawdenoiseai.c.

References _default_size(), d, DT_RAWDENOISEAI_MULTI, and L.

◆ tiling_callback()

Variable Documentation

◆ _nn_region

__thread nn_region_t* _nn_region = NULL
static

Definition at line 393 of file rawdenoiseai.c.

Referenced by _nn_arena_alloc(), _nn_arena_free(), and process().

◆ _scale_tag

const char* const _scale_tag[2] = { "single", "multi" }
static

Definition at line 127 of file rawdenoiseai.c.

Referenced by _get_model(), _list_custom_models(), commit_params(), and gui_update().

◆ _size_tag

const char* const _size_tag[3] = { "large", "half", "quarter" }
static

Definition at line 126 of file rawdenoiseai.c.

Referenced by _get_model(), _list_custom_models(), commit_params(), and gui_update().

◆ _version_tag

const char* const _version_tag[1] = { "v1" }
static

Definition at line 125 of file rawdenoiseai.c.

Referenced by _get_model(), _list_custom_models(), commit_params(), and gui_update().

◆ DT_NN_FUSION_DENS

const float DT_NN_FUSION_DENS[3] = { 0.25f, 0.5f, 0.25f }
static

Definition at line 918 of file rawdenoiseai.c.

Referenced by _k_floor_fuse(), _k_fuse_step(), and process_cl().