Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
box_filters.h
Go to the documentation of this file.
1/*
2 This file is part of darktable,
3 Copyright (C) 2009-2021 darktable developers.
4
5 darktable is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
9
10 darktable is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with darktable. If not, see <http://www.gnu.org/licenses/>.
17*/
18
19#pragma once
20
21#include <stdlib.h>
22
23// default number of iterations to run for dt_box_mean
24#define BOX_ITERATIONS 8
25
26// flag to add to number of channels to request the slower but more accurate version using Kahan (compensated)
27// summation
28#define BOXFILTER_KAHAN_SUM 0x1000000
29
30// ch = number of channels per pixel. Supported values: 1, 2, 4, and 4|Kahan
31void dt_box_mean(float *const buf, const size_t height, const size_t width, const int ch,
32 const int radius, const unsigned interations);
33// run a single iteration horizonally over a single row. Supported values for ch: 4|Kahan
34// 'scratch' must point at a buffer large enough to hold ch*width floats, or be NULL
35void dt_box_mean_horizontal(float *const restrict buf, const size_t width, const int ch, const int radius,
36 float *const restrict scratch);
37// run a single iteration vertically over the entire image. Supported values for ch: 4|Kahan
38void dt_box_mean_vertical(float *const buf, const size_t height, const size_t width, const int ch, const int radius);
39
40void dt_box_min(float *const buf, const size_t height, const size_t width, const int ch, const int radius);
41void dt_box_max(float *const buf, const size_t height, const size_t width, const int ch, const int radius);
42
43// clang-format off
44// modelines: These editor modelines have been set for all relevant files by tools/update_modelines.py
45// vim: shiftwidth=2 expandtab tabstop=2 cindent
46// kate: tab-indents: off; indent-width 2; replace-tabs on; indent-mode cstyle; remove-trailing-spaces modified;
47// clang-format on
48
int width
Definition bilateral.h:1
int height
Definition bilateral.h:1
void dt_box_max(float *const buf, const size_t height, const size_t width, const int ch, const int radius)
Definition box_filters.c:1435
void dt_box_mean_horizontal(float *const restrict buf, const size_t width, const int ch, const int radius, float *const restrict scratch)
Definition box_filters.c:1248
void dt_box_min(float *const buf, const size_t height, const size_t width, const int ch, const int radius)
Definition box_filters.c:1583
void dt_box_mean(float *const buf, const size_t height, const size_t width, const int ch, const int radius, const unsigned interations)
Definition box_filters.c:1225
void dt_box_mean_vertical(float *const buf, const size_t height, const size_t width, const int ch, const int radius)
Definition box_filters.c:1273