30 return 0.005f * powf(slider, 1.1f);
33 dt_iop_roi_t *
const roi_out,
const dt_iop_roi_t *
const roi_in,
const uint32_t filters,
const uint8_t (*
const xtrans)[6],
34 const gboolean dual_mask,
float dual_threshold)
41 if(dual_threshold <= 0.0f)
return;
46 if(!blend || !tmp || !vng_image)
51 dt_control_log(_(
"[dual demosaic] can't allocate internal buffers"));
59 dt_times_t start_blend = { 0 }, end_blend = { 0 };
71 #pragma omp parallel for simd default(none) \
72 dt_omp_firstprivate(blend, rgb_data, vng_image, width, height) \
73 schedule(simd:static) aligned(blend, vng_image, rgb_data : 64)
77 for(
int c = 0; c < 4; c++)
78 rgb_data[idx * 4 + c] = blend[idx];
84 #pragma omp parallel for simd default(none) \
85 dt_omp_firstprivate(blend, rgb_data, vng_image, width, height) \
86 schedule(simd:static) aligned(blend, vng_image, rgb_data : 64)
90 const int oidx = 4 * idx;
91 for(
int c = 0; c < 4; c++)
92 rgb_data[oidx + c] =
intp(blend[idx], rgb_data[oidx + c], vng_image[oidx + c]);
98 fprintf(stderr,
" [demosaic] CPU dual blending %.4f secs (%.4f CPU)\n", end_blend.clock - start_blend.
clock, end_blend.user - start_blend.
user);
108 const int devid = piece->
pipe->devid;
117 size_t sizes[3] = { ROUNDUPDWD(
width, devid), ROUNDUPDHT(
height, devid), 1 };
118 const dt_aligned_pixel_t wb = { piece->pipe->dsc.temperature.coeffs[0], piece->pipe->dsc.temperature.coeffs[1],
119 piece->pipe->dsc.temperature.coeffs[2] };
129 if(err != CL_SUCCESS)
return FALSE;
133 size_t sizes[3] = { ROUNDUPDWD(
width, devid), ROUNDUPDHT(
height, devid), 1 };
140 if(err != CL_SUCCESS)
return FALSE;
145 size_t sizes[3] = { ROUNDUPDWD(
width, devid), ROUNDUPDHT(
height, devid), 1 };
154 if(err != CL_SUCCESS)
return FALSE;
160 cl_mem dev_blurmat = NULL;
161 dev_blurmat = dt_opencl_copy_host_to_device_constant(devid,
sizeof(
float) * 13, blurmat);
162 if(dev_blurmat != NULL)
164 size_t sizes[3] = { ROUNDUPDWD(
width, devid), ROUNDUPDHT(
height, devid), 1 };
173 if(err != CL_SUCCESS)
return FALSE;
183 size_t sizes[3] = { ROUNDUPDWD(
width, devid), ROUNDUPDHT(
height, devid), 1 };
192 if(err != CL_SUCCESS)
return FALSE;
#define TRUE
Definition ashift_lsd.c:151
#define FALSE
Definition ashift_lsd.c:147
static void color_smoothing(float *out, const dt_iop_roi_t *const roi_out, const int num_passes)
Definition basic.c:186
int width
Definition bilateral.h:1
int height
Definition bilateral.h:1
static float intp(const float a, const float b, const float c)
Definition cacorrect.c:141
static float kernel(const float *x, const float *y)
Definition colorchecker.c:435
const char flag
Definition common/image.h:164
void dt_control_log(const char *msg,...)
Definition control.c:424
darktable_t darktable
Definition darktable.c:111
@ DT_DEBUG_DEMOSAIC
Definition darktable.h:493
@ DT_DEBUG_PERF
Definition darktable.h:475
static float * dt_alloc_align_float(size_t pixels)
Definition darktable.h:345
static void dt_get_times(dt_times_t *t)
Definition darktable.h:693
#define dt_free_align(A)
Definition darktable.h:334
@ DT_DEV_PIXELPIPE_DISPLAY_PASSTHRU
Definition develop.h:100
static float slider2contrast(float slider)
Definition dual.c:28
static void dual_demosaic(dt_dev_pixelpipe_iop_t *piece, float *const restrict rgb_data, const float *const restrict raw_data, dt_iop_roi_t *const roi_out, const dt_iop_roi_t *const roi_in, const uint32_t filters, const uint8_t(*const xtrans)[6], const gboolean dual_mask, float dual_threshold)
Definition dual.c:32
void dt_masks_calc_detail_mask(float *const src, float *const out, float *const tmp, const int width, const int height, const float threshold, const gboolean detail)
void dt_masks_blur_9x9_coeff(float *coeffs, const float sigma)
Definition detail.c:163
void dt_masks_calc_rawdetail_mask(float *const src, float *const out, float *const tmp, const int width, const int height, const dt_aligned_pixel_t wb)
static int dt_opencl_enqueue_kernel_2d(const int dev, const int kernel, const size_t *sizes)
Definition opencl.h:560
static int dt_opencl_set_kernel_arg(const int dev, const int kernel, const size_t size, const void *arg)
Definition opencl.h:556
static void dt_opencl_release_mem_object(void *mem)
Definition opencl.h:601
@ DT_DEV_PIXELPIPE_FULL
Definition pixelpipe.h:31
struct dt_opencl_t * opencl
Definition darktable.h:551
int32_t unmuted
Definition darktable.h:526
Definition pixelpipe_hb.h:46
struct dt_iop_module_t *struct dt_dev_pixelpipe_t * pipe
Definition pixelpipe_hb.h:48
void * data
Definition pixelpipe_hb.h:49
Definition demosaic.c:187
Definition demosaic.c:129
int width
Definition imageop.h:33
int height
Definition imageop.h:33
Definition darktable.h:605
double clock
Definition darktable.h:606
double user
Definition darktable.h:607
static void vng_interpolate(float *out, const float *const in, const dt_iop_roi_t *const roi_out, const dt_iop_roi_t *const roi_in, const uint32_t filters, const uint8_t(*const xtrans)[6], const int only_vng_linear)
Definition vng.c:15