Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
box_filters.c File Reference
#include <assert.h>
#include <math.h>
#include <stdlib.h>
#include "common/box_filters.h"
#include "common/darktable.h"
#include "develop/imageop.h"
#include "develop/imageop_math.h"
+ Include dependency graph for box_filters.c:

Macros

#define DT_PREFETCH(addr)
 
#define PREFETCH_NTA(addr)
 

Functions

static void blur_horizontal_1ch (float *const restrict buf, const int height, const int width, const int radius, float *const restrict scanlines, const size_t padded_size)
 
static void blur_horizontal_2ch (float *const restrict buf, const int height, const int width, const int radius, float *const restrict scanlines, const size_t padded_size)
 
static void load_add_4wide (float *const restrict out, dt_aligned_pixel_t accum, const float *const restrict values)
 
static void sub_4wide (float *const restrict accum, const dt_aligned_pixel_t values)
 
static void load_add_4wide_Kahan (float *const restrict out, dt_aligned_pixel_t accum, const float *const restrict values, float *const restrict comp)
 
static void sub_4wide_Kahan (float *const restrict accum, const dt_aligned_pixel_t values, float *const restrict comp)
 
static void store_scaled_4wide (float *const restrict out, const dt_aligned_pixel_t in, const float scale)
 
static void sub_16wide (float *const restrict accum, const float *const restrict values)
 
static void load_add_16wide (float *const restrict out, float *const restrict accum, const float *const restrict in)
 
static void sub_16wide_Kahan (float *const restrict accum, const float *const restrict values, float *const restrict comp)
 
static void load_add_16wide_Kahan (float *const restrict out, float *const restrict accum, const float *const restrict in, float *const restrict comp)
 
static void store_16wide (float *const restrict out, const float *const restrict in)
 
static void store_scaled_16wide (float *const restrict out, const float *const restrict in, const float scale)
 
static void sub_Nwide_Kahan (const size_t N, float *const restrict accum, const float *const restrict values, float *const restrict comp)
 
static void load_add_Nwide_Kahan (const size_t N, float *const restrict out, float *const restrict accum, const float *const restrict in, float *const restrict comp)
 
static void store_scaled_Nwide (const size_t N, float *const restrict out, const float *const restrict in, const float scale)
 
static void blur_horizontal_4ch (float *const restrict buf, const size_t height, const size_t width, const size_t radius, float *const restrict scanlines, const size_t padded_size)
 
static void blur_horizontal_4ch_Kahan (float *const restrict buf, const size_t width, const size_t radius, float *const restrict scratch)
 
static void blur_horizontal_Nch_Kahan (const size_t N, float *const restrict buf, const size_t width, const size_t radius, float *const restrict scratch)
 
static void blur_vertical_1wide (float *const restrict buf, const size_t height, const size_t width, const size_t radius, float *const restrict scratch)
 
static void blur_vertical_1wide_Kahan (float *const restrict buf, const size_t height, const size_t width, const size_t radius, float *const restrict scratch)
 
static void blur_vertical_4wide (float *const restrict buf, const size_t height, const size_t width, const size_t radius, float *const restrict scratch)
 
static void blur_vertical_4wide_Kahan (float *const restrict buf, const size_t height, const size_t width, const size_t radius, float *const restrict scratch)
 
static void blur_vertical_16wide (float *const restrict buf, const size_t height, const size_t width, const size_t radius, float *const restrict scratch)
 
static void blur_vertical_16wide_Kahan (float *const restrict buf, const size_t height, const size_t width, const size_t radius, float *const restrict scratch)
 
static void blur_vertical_1ch (float *const restrict buf, const size_t height, const size_t width, const size_t radius, float *const restrict scanlines, const size_t padded_size)
 
static size_t _compute_effective_height (const size_t height, const size_t radius)
 
static void dt_box_mean_1ch (float *const buf, const size_t height, const size_t width, const size_t radius, const unsigned iterations)
 
static void dt_box_mean_4ch (float *const buf, const int height, const int width, const int radius, const unsigned iterations)
 
static void box_mean_vert_1ch_Kahan (float *const buf, const int height, const size_t width, const size_t radius)
 
static void dt_box_mean_4ch_Kahan (float *const buf, const size_t height, const size_t width, const int radius, const unsigned iterations)
 
static void box_mean_2ch (float *const restrict in, const size_t height, const size_t width, const int radius, const unsigned iterations)
 
void dt_box_mean (float *const buf, const size_t height, const size_t width, const int ch, const int radius, const unsigned iterations)
 
void dt_box_mean_horizontal (float *const restrict buf, const size_t width, const int ch, const int radius, float *const restrict user_scratch)
 
void dt_box_mean_vertical (float *const buf, const size_t height, const size_t width, const int ch, const int radius)
 
static float window_max (const float *x, int n)
 
static void box_max_1d (int N, const float *const restrict x, float *const restrict y, size_t stride_y, int w)
 
static void set_16wide (float *const restrict out, const float value)
 
static void update_max_16wide (float m[16], const float *const restrict base)
 
static void load_update_max_16wide (float *const restrict out, float m[16], const float *const restrict base)
 
static void box_max_vert_16wide (const int N, float *const restrict scratch, float *const restrict buf, const int stride, const int w, const size_t mask)
 
static void box_max_1ch (float *const buf, const size_t height, const size_t width, const unsigned w)
 
void dt_box_max (float *const buf, const size_t height, const size_t width, const int ch, const int radius)
 
static float window_min (const float *x, int n)
 
static void box_min_1d (int N, const float *x, float *y, size_t stride_y, int w)
 
static void update_min_16wide (float m[16], const float *const restrict base)
 
static void load_update_min_16wide (float *const restrict out, float m[16], const float *const restrict base)
 
static void box_min_vert_16wide (const int N, float *const restrict scratch, float *const restrict buf, const int stride, const int w, const size_t mask)
 
static void box_min_1ch (float *const buf, const size_t height, const size_t width, const int w)
 
void dt_box_min (float *const buf, const size_t height, const size_t width, const int ch, const int radius)
 

Macro Definition Documentation

◆ DT_PREFETCH

#define DT_PREFETCH (   addr)

◆ PREFETCH_NTA

#define PREFETCH_NTA (   addr)

Function Documentation

◆ _compute_effective_height()

static size_t _compute_effective_height ( const size_t  height,
const size_t  radius 
)
static

◆ blur_horizontal_1ch()

static void blur_horizontal_1ch ( float *const restrict  buf,
const int  height,
const int  width,
const int  radius,
float *const restrict  scanlines,
const size_t  padded_size 
)
static

References dt_get_perthread, height, MIN, and width.

Referenced by dt_box_mean_1ch().

◆ blur_horizontal_2ch()

static void blur_horizontal_2ch ( float *const restrict  buf,
const int  height,
const int  width,
const int  radius,
float *const restrict  scanlines,
const size_t  padded_size 
)
static

References dt_get_perthread, height, MIN, and width.

Referenced by box_mean_2ch().

◆ blur_horizontal_4ch()

static void blur_horizontal_4ch ( float *const restrict  buf,
const size_t  height,
const size_t  width,
const size_t  radius,
float *const restrict  scanlines,
const size_t  padded_size 
)
static

◆ blur_horizontal_4ch_Kahan()

static void blur_horizontal_4ch_Kahan ( float *const restrict  buf,
const size_t  width,
const size_t  radius,
float *const restrict  scratch 
)
static

◆ blur_horizontal_Nch_Kahan()

static void blur_horizontal_Nch_Kahan ( const size_t  N,
float *const restrict  buf,
const size_t  width,
const size_t  radius,
float *const restrict  scratch 
)
static

◆ blur_vertical_16wide()

static void blur_vertical_16wide ( float *const restrict  buf,
const size_t  height,
const size_t  width,
const size_t  radius,
float *const restrict  scratch 
)
static

◆ blur_vertical_16wide_Kahan()

static void blur_vertical_16wide_Kahan ( float *const restrict  buf,
const size_t  height,
const size_t  width,
const size_t  radius,
float *const restrict  scratch 
)
static

◆ blur_vertical_1ch()

static void blur_vertical_1ch ( float *const restrict  buf,
const size_t  height,
const size_t  width,
const size_t  radius,
float *const restrict  scanlines,
const size_t  padded_size 
)
static

◆ blur_vertical_1wide()

static void blur_vertical_1wide ( float *const restrict  buf,
const size_t  height,
const size_t  width,
const size_t  radius,
float *const restrict  scratch 
)
static

References height, MIN, PREFETCH_NTA, and width.

Referenced by blur_vertical_1ch().

◆ blur_vertical_1wide_Kahan()

static void blur_vertical_1wide_Kahan ( float *const restrict  buf,
const size_t  height,
const size_t  width,
const size_t  radius,
float *const restrict  scratch 
)
static

References height, Kahan_sum(), MIN, PREFETCH_NTA, and width.

Referenced by box_mean_vert_1ch_Kahan().

◆ blur_vertical_4wide()

static void blur_vertical_4wide ( float *const restrict  buf,
const size_t  height,
const size_t  width,
const size_t  radius,
float *const restrict  scratch 
)
static

◆ blur_vertical_4wide_Kahan()

static void blur_vertical_4wide_Kahan ( float *const restrict  buf,
const size_t  height,
const size_t  width,
const size_t  radius,
float *const restrict  scratch 
)
static

◆ box_max_1ch()

static void box_max_1ch ( float *const  buf,
const size_t  height,
const size_t  width,
const unsigned  w 
)
static

◆ box_max_1d()

static void box_max_1d ( int  N,
const float *const restrict  x,
float *const restrict  y,
size_t  stride_y,
int  w 
)
inlinestatic

References m, MAX, MIN, N, and window_max().

Referenced by box_max_1ch().

◆ box_max_vert_16wide()

static void box_max_vert_16wide ( const int  N,
float *const restrict  scratch,
float *const restrict  buf,
const int  stride,
const int  w,
const size_t  mask 
)
inlinestatic

◆ box_mean_2ch()

static void box_mean_2ch ( float *const restrict  in,
const size_t  height,
const size_t  width,
const int  radius,
const unsigned  iterations 
)
inlinestatic

◆ box_mean_vert_1ch_Kahan()

static void box_mean_vert_1ch_Kahan ( float *const  buf,
const int  height,
const size_t  width,
const size_t  radius 
)
static

◆ box_min_1ch()

static void box_min_1ch ( float *const  buf,
const size_t  height,
const size_t  width,
const int  w 
)
static

◆ box_min_1d()

static void box_min_1d ( int  N,
const float *  x,
float *  y,
size_t  stride_y,
int  w 
)
inlinestatic

References m, MIN, N, and window_min().

Referenced by box_min_1ch().

◆ box_min_vert_16wide()

static void box_min_vert_16wide ( const int  N,
float *const restrict  scratch,
float *const restrict  buf,
const int  stride,
const int  w,
const size_t  mask 
)
inlinestatic

◆ dt_box_max()

void dt_box_max ( float *const  buf,
const size_t  height,
const size_t  width,
const int  ch,
const int  radius 
)
Todo:
: 4ch version if needed

References box_max_1ch(), dt_unreachable_codepath, height, and width.

Referenced by transition_map().

◆ dt_box_mean()

void dt_box_mean ( float *const  buf,
const size_t  height,
const size_t  width,
const int  ch,
const int  radius,
const unsigned  iterations 
)

◆ dt_box_mean_1ch()

static void dt_box_mean_1ch ( float *const  buf,
const size_t  height,
const size_t  width,
const size_t  radius,
const unsigned  iterations 
)
static

◆ dt_box_mean_4ch()

static void dt_box_mean_4ch ( float *const  buf,
const int  height,
const int  width,
const int  radius,
const unsigned  iterations 
)
static

◆ dt_box_mean_4ch_Kahan()

static void dt_box_mean_4ch_Kahan ( float *const  buf,
const size_t  height,
const size_t  width,
const int  radius,
const unsigned  iterations 
)
static

◆ dt_box_mean_horizontal()

void dt_box_mean_horizontal ( float *const restrict  buf,
const size_t  width,
const int  ch,
const int  radius,
float *const restrict  user_scratch 
)

◆ dt_box_mean_vertical()

void dt_box_mean_vertical ( float *const  buf,
const size_t  height,
const size_t  width,
const int  ch,
const int  radius 
)

◆ dt_box_min()

void dt_box_min ( float *const  buf,
const size_t  height,
const size_t  width,
const int  ch,
const int  radius 
)
Todo:
: 4ch version if needed

References box_min_1ch(), dt_unreachable_codepath, height, and width.

Referenced by dark_channel(), and process().

◆ load_add_16wide()

static void load_add_16wide ( float *const restrict  out,
float *const restrict  accum,
const float *const restrict  in 
)
static

Referenced by blur_vertical_16wide().

◆ load_add_16wide_Kahan()

static void load_add_16wide_Kahan ( float *const restrict  out,
float *const restrict  accum,
const float *const restrict  in,
float *const restrict  comp 
)
static

◆ load_add_4wide()

static void load_add_4wide ( float *const restrict  out,
dt_aligned_pixel_t  accum,
const float *const restrict  values 
)
static

◆ load_add_4wide_Kahan()

static void load_add_4wide_Kahan ( float *const restrict  out,
dt_aligned_pixel_t  accum,
const float *const restrict  values,
float *const restrict  comp 
)
static

◆ load_add_Nwide_Kahan()

static void load_add_Nwide_Kahan ( const size_t  N,
float *const restrict  out,
float *const restrict  accum,
const float *const restrict  in,
float *const restrict  comp 
)
static

References N.

Referenced by blur_horizontal_Nch_Kahan().

◆ load_update_max_16wide()

static void load_update_max_16wide ( float *const restrict  out,
float  m[16],
const float *const restrict  base 
)
inlinestatic

References m.

Referenced by box_max_vert_16wide().

◆ load_update_min_16wide()

static void load_update_min_16wide ( float *const restrict  out,
float  m[16],
const float *const restrict  base 
)
inlinestatic

References m.

Referenced by box_min_vert_16wide().

◆ set_16wide()

static void set_16wide ( float *const restrict  out,
const float  value 
)
static

◆ store_16wide()

static void store_16wide ( float *const restrict  out,
const float *const restrict  in 
)
static

◆ store_scaled_16wide()

static void store_scaled_16wide ( float *const restrict  out,
const float *const restrict  in,
const float  scale 
)
static

◆ store_scaled_4wide()

static void store_scaled_4wide ( float *const restrict  out,
const dt_aligned_pixel_t  in,
const float  scale 
)
static

◆ store_scaled_Nwide()

static void store_scaled_Nwide ( const size_t  N,
float *const restrict  out,
const float *const restrict  in,
const float  scale 
)
static

References N.

Referenced by blur_horizontal_Nch_Kahan().

◆ sub_16wide()

static void sub_16wide ( float *const restrict  accum,
const float *const restrict  values 
)
static

Referenced by blur_vertical_16wide().

◆ sub_16wide_Kahan()

static void sub_16wide_Kahan ( float *const restrict  accum,
const float *const restrict  values,
float *const restrict  comp 
)
static

◆ sub_4wide()

static void sub_4wide ( float *const restrict  accum,
const dt_aligned_pixel_t  values 
)
static

◆ sub_4wide_Kahan()

static void sub_4wide_Kahan ( float *const restrict  accum,
const dt_aligned_pixel_t  values,
float *const restrict  comp 
)
static

◆ sub_Nwide_Kahan()

static void sub_Nwide_Kahan ( const size_t  N,
float *const restrict  accum,
const float *const restrict  values,
float *const restrict  comp 
)
static

References N.

Referenced by blur_horizontal_Nch_Kahan().

◆ update_max_16wide()

static void update_max_16wide ( float  m[16],
const float *const restrict  base 
)
inlinestatic

References m.

Referenced by box_max_vert_16wide().

◆ update_min_16wide()

static void update_min_16wide ( float  m[16],
const float *const restrict  base 
)
inlinestatic

References m.

Referenced by box_min_vert_16wide().

◆ window_max()

static float window_max ( const float *  x,
int  n 
)
inlinestatic

References m, and MAX.

Referenced by box_max_1d().

◆ window_min()

static float window_min ( const float *  x,
int  n 
)
inlinestatic

References m, and MIN.

Referenced by box_min_1d().