34#define DT_BLENDIF_RGB_CH 4
35#define DT_BLENDIF_RGB_BCH 3
39 float *
const restrict
out,
const float *
const restrict mask,
const size_t stride);
49static inline
void _PX_COPY(const float *const restrict src, float *const restrict dst)
51 for(
size_t i = 0;
i < 3;
i++) dst[
i] = src[
i];
57 const
float *const restrict parameters)
60 if(
value <= parameters[0])
65 else if(
value < parameters[1])
70 else if(
value <= parameters[2])
75 else if(
value < parameters[3])
78 factor = 1.0f - (
value - parameters[2]) * parameters[5];
89static inline
void _blendif_gray(const float *const restrict pixels, float *const restrict mask,
90 const size_t stride, const float *const restrict parameters,
91 const unsigned int invert_mask,
96 const float value = dt_ioppr_get_rgb_matrix_luminance(pixels + j, profile->matrix_in, profile->lut_in,
97 profile->unbounded_coeffs_in, profile->lutsize,
98 profile->nonlinearlut);
104static inline
void _blendif_gray_fb(const float *const restrict pixels, float *const restrict mask,
105 const size_t stride, const float *const restrict parameters,
106 const unsigned int invert_mask)
110 const float value = 0.3f * pixels[j + 0] + 0.59f * pixels[j + 1] + 0.11f * pixels[j + 2];
116static inline
void _blendif_rgb_red(const float *const restrict pixels, float *const restrict
mask,
117 const size_t stride, const float *const restrict parameters,
118 const unsigned int invert_mask)
127static inline
void _blendif_rgb_green(const float *const restrict pixels, float *const restrict
mask,
128 const size_t stride, const float *const restrict parameters,
129 const unsigned int invert_mask)
138static inline
void _blendif_rgb_blue(const float *const restrict pixels, float *const restrict
mask,
139 const size_t stride, const float *const restrict parameters,
140 const unsigned int invert_mask)
149static inline
void _blendif_hsl(const float *const restrict pixels, float *const restrict mask,
150 const size_t stride, const float *const restrict parameters,
151 const unsigned int *const restrict invert_mask)
156 dt_RGB_2_HSL(pixels + j,
HSL);
158 for(
size_t i = 0;
i < 3;
i++)
165static
void _blendif_combine_channels(const float *const restrict pixels, float *const restrict mask,
166 const size_t stride, const unsigned int blendif,
167 const float *const restrict parameters,
176 invert_mask, profile);
180 _blendif_gray_fb(pixels, mask, stride,
195 _blendif_rgb_green(pixels, mask, stride,
220 const float *
const restrict a,
221 const float *
const restrict b,
float *
const restrict mask)
229 const int xoffs = roi_out->
x - roi_in->
x;
230 const int yoffs = roi_out->
y - roi_in->
y;
231 const int iwidth = roi_in->
width;
232 const int owidth = roi_out->
width;
233 const int oheight = roi_out->
height;
245 const size_t buffsize = (size_t)owidth * oheight;
248 const float global_opacity =
clamp_simd(
d->opacity / 100.0f);
256 for(
size_t x = 0;
x < buffsize;
x++) mask[
x] = global_opacity * (1.0f - mask[
x]);
263 else if(canceling_channel || !any_channel_active)
268 const float opac = ((mask_inversed == 0) ^ (mask_inclusive == 0)) ? global_opacity : 0.0f;
294 for(
size_t x = 0;
x < buffsize;
x++) temp_mask[
x] = 1.0f;
298 for(
size_t y = 0; y < oheight; y++)
301 _blendif_combine_channels(a + start, temp_mask + (y * owidth), owidth, blendif, parameters, profile);
304 for(
size_t y = 0; y < oheight; y++)
318 for(
size_t x = 0;
x < buffsize;
x++) mask[
x] = global_opacity * (1.0f - mask[
x]) * temp_mask[
x];
323 for(
size_t x = 0;
x < buffsize;
x++) mask[
x] = global_opacity * (1.0f - (1.0f - mask[
x]) * temp_mask[
x]);
331 for(
size_t x = 0;
x < buffsize;
x++) mask[
x] = global_opacity * (1.0f - mask[
x] * temp_mask[
x]);
336 for(
size_t x = 0;
x < buffsize;
x++) mask[
x] = global_opacity * mask[
x] * temp_mask[
x];
348static
void _blend_normal_bounded(const float *const restrict a, const float *const restrict b,
349 float *const restrict
out, const float *const restrict mask, const size_t stride)
353 const float local_opacity = mask[
i];
356 out[j +
k] =
clamp_simd(a[j +
k] * (1.0f - local_opacity) + b[j +
k] * local_opacity);
364static
void _blend_normal_unbounded(const float *const restrict
a, const float *const restrict
b,
365 float *const restrict
out, const float *const restrict
mask,
370 const float local_opacity =
mask[
i];
373 out[j +
k] =
a[j +
k] * (1.0f - local_opacity) + b[j +
k] * local_opacity;
381static
void _blend_lighten(const float *const restrict
a, const float *const restrict
b,
382 float *const restrict
out, const float *const restrict
mask, const size_t stride)
386 const float local_opacity =
mask[
i];
389 out[j +
k] =
clamp_simd(a[j +
k] * (1.0f - local_opacity) + fmaxf(a[j +
k], b[j +
k]) * local_opacity);
397static
void _blend_darken(const float *const restrict
a, const float *const restrict
b,
398 float *const restrict
out, const float *const restrict
mask, const size_t stride)
402 const float local_opacity =
mask[
i];
405 out[j +
k] =
clamp_simd(a[j +
k] * (1.0f - local_opacity) + fminf(a[j +
k], b[j +
k]) * local_opacity);
413static
void _blend_multiply(const float *const restrict
a, const float *const restrict
b,
414 float *const restrict
out, const float *const restrict
mask, const size_t stride)
418 const float local_opacity =
mask[
i];
421 out[j +
k] =
clamp_simd(a[j +
k] * (1.0f - local_opacity) + (a[j +
k] * b[j +
k]) * local_opacity);
429static
void _blend_average(const float *const restrict
a, const float *const restrict
b,
430 float *const restrict
out, const float *const restrict
mask, const size_t stride)
434 const float local_opacity =
mask[
i];
437 out[j +
k] =
clamp_simd(a[j +
k] * (1.0f - local_opacity) + (a[j +
k] + b[j +
k]) / 2.0f * local_opacity);
445static
void _blend_add(const float *const restrict
a, const float *const restrict
b,
446 float *const restrict
out, const float *const restrict
mask, const size_t stride)
450 const float local_opacity =
mask[
i];
453 out[j +
k] =
clamp_simd(a[j +
k] * (1.0f - local_opacity) + (a[j +
k] + b[j +
k]) * local_opacity);
461static
void _blend_subtract(const float *const restrict
a, const float *const restrict
b,
462 float *const restrict
out, const float *const restrict
mask, const size_t stride)
466 const float local_opacity =
mask[
i];
469 out[j +
k] =
clamp_simd(a[j +
k] * (1.0f - local_opacity) + ((b[j +
k] + a[j +
k]) - 1.0f) * local_opacity);
477static
void _blend_difference(const float *const restrict
a, const float *const restrict
b,
478 float *const restrict
out, const float *const restrict
mask, const size_t stride)
482 const float local_opacity =
mask[
i];
485 out[j +
k] =
clamp_simd(a[j +
k] * (1.0f - local_opacity) + fabsf(a[j +
k] - b[j +
k]) * local_opacity);
493static
void _blend_screen(const float *const restrict
a, const float *const restrict
b,
494 float *const restrict
out, const float *const restrict
mask, const size_t stride)
498 const float local_opacity =
mask[
i];
503 out[j +
k] =
clamp_simd(la * (1.0f - local_opacity) + (1.0f - (1.0f - la) * (1.0f - lb)) * local_opacity);
511static
void _blend_overlay(const float *const restrict
a, const float *const restrict
b,
512 float *const restrict
out, const float *const restrict
mask, const size_t stride)
516 const float local_opacity =
mask[
i];
517 const float local_opacity2 = local_opacity * local_opacity;
523 la * (1.0f - local_opacity2)
524 + (la > 0.5f ? 1.0f - (1.0f - 2.0f * (la - 0.5f)) * (1.0f - lb)
534static
void _blend_softlight(const float *const restrict
a, const float *const restrict
b,
535 float *const restrict
out, const float *const restrict
mask, const size_t stride)
539 const float local_opacity =
mask[
i];
540 const float local_opacity2 = local_opacity * local_opacity;
546 la * (1.0f - local_opacity2)
547 + (lb > 0.5f ? 1.0f - (1.0f - la) * (1.0f - (lb - 0.5f))
557static
void _blend_hardlight(const float *const restrict
a, const float *const restrict
b,
558 float *const restrict
out, const float *const restrict
mask, const size_t stride)
562 const float local_opacity =
mask[
i];
563 const float local_opacity2 = local_opacity * local_opacity;
569 la * (1.0f - local_opacity2)
570 + (lb > 0.5f ? 1.0f - (1.0f - 2.0f * (la - 0.5f)) * (1.0f - lb)
580static
void _blend_vividlight(const float *const restrict
a, const float *const restrict
b,
581 float *const restrict
out, const float *const restrict
mask, const size_t stride)
585 float local_opacity =
mask[
i];
586 float local_opacity2 = local_opacity * local_opacity;
592 la * (1.0f - local_opacity2)
593 + (lb > 0.5f ? (lb >= 1.0f ? 1.0f : la / (2.0f * (1.0f - lb)))
594 : (lb <= 0.0f ? 0.0f : 1.0f - (1.0f - la) / (2.0f * lb)))
603static
void _blend_linearlight(const float *const restrict
a, const float *const restrict
b,
604 float *const restrict
out, const float *const restrict
mask, const size_t stride)
608 const float local_opacity =
mask[
i];
609 const float local_opacity2 = local_opacity * local_opacity;
614 out[j +
k] =
clamp_simd(la * (1.0f - local_opacity2) + (la + 2.0f * lb - 1.0f) * local_opacity2);
622static
void _blend_pinlight(const float *const restrict
a, const float *const restrict
b,
623 float *const restrict
out, const float *const restrict
mask, const size_t stride)
627 const float local_opacity =
mask[
i];
628 const float local_opacity2 = local_opacity * local_opacity;
634 la * (1.0f - local_opacity2)
635 + (lb > 0.5f ? fmaxf(la, 2.0f * (lb - 0.5f))
636 : fminf(la, 2.0f * lb))
645static
void _blend_lightness(const float *const restrict
a, const float *const restrict
b,
646 float *const restrict
out, const float *const restrict
mask, const size_t stride)
650 const float local_opacity =
mask[
i];
660 dt_RGB_2_HSL(ta, tta);
661 dt_RGB_2_HSL(tb, ttb);
665 ttb[2] = (tta[2] * (1.0f - local_opacity)) + ttb[2] * local_opacity;
667 dt_HSL_2_RGB(ttb,
out + j);
676static
void _blend_chromaticity(const float *const restrict
a, const float *const restrict
b,
677 float *const restrict
out, const float *const restrict
mask, const size_t stride)
681 const float local_opacity =
mask[
i];
691 dt_RGB_2_HSL(ta, tta);
692 dt_RGB_2_HSL(tb, ttb);
695 ttb[1] = (tta[1] * (1.0f - local_opacity)) + ttb[1] * local_opacity;
698 dt_HSL_2_RGB(ttb,
out + j);
707static
void _blend_hue(const float *const restrict
a, const float *const restrict
b,
708 float *const restrict
out, const float *const restrict
mask, const size_t stride)
712 const float local_opacity =
mask[
i];
722 dt_RGB_2_HSL(ta, tta);
723 dt_RGB_2_HSL(tb, ttb);
726 float d = fabsf(tta[0] - ttb[0]);
727 float s =
d > 0.5f ? -local_opacity * (1.0f -
d) /
d : local_opacity;
728 ttb[0] = fmodf((tta[0] * (1.0f - s)) + ttb[0] * s + 1.0f, 1.0f);
732 dt_HSL_2_RGB(ttb,
out + j);
741static
void _blend_color(const float *const restrict
a, const float *const restrict
b,
742 float *const restrict
out, const float *const restrict
mask, const size_t stride)
746 float local_opacity =
mask[
i];
756 dt_RGB_2_HSL(ta, tta);
757 dt_RGB_2_HSL(tb, ttb);
760 float d = fabsf(tta[0] - ttb[0]);
761 float s =
d > 0.5f ? -local_opacity * (1.0f -
d) /
d : local_opacity;
762 ttb[0] = fmodf((tta[0] * (1.0f - s)) + ttb[0] * s + 1.0f, 1.0f);
764 ttb[1] = (tta[1] * (1.0f - local_opacity)) + ttb[1] * local_opacity;
767 dt_HSL_2_RGB(ttb,
out + j);
776static
void _blend_coloradjust(const float *const restrict
a, const float *const restrict
b,
777 float *const restrict
out, const float *const restrict
mask, const size_t stride)
781 const float local_opacity =
mask[
i];
791 dt_RGB_2_HSL(ta, tta);
792 dt_RGB_2_HSL(tb, ttb);
795 const float d = fabsf(tta[0] - ttb[0]);
796 const float s =
d > 0.5f ? -local_opacity * (1.0f -
d) /
d : local_opacity;
797 ttb[0] = fmodf((tta[0] * (1.0f - s)) + ttb[0] * s + 1.0f, 1.0f);
799 ttb[1] = (tta[1] * (1.0f - local_opacity)) + ttb[1] * local_opacity;
802 dt_HSL_2_RGB(ttb,
out + j);
811static
void _blend_HSV_value(const float *const restrict
a, const float *const restrict
b,
812 float *const restrict
out, const float *const restrict
mask, const size_t stride)
816 const float local_opacity =
mask[
i];
819 dt_RGB_2_HSV(a + j, ta);
820 dt_RGB_2_HSV(b + j, tb);
827 tb[2] = ta[2] * (1.0f - local_opacity) + tb[2] * local_opacity;
829 dt_HSV_2_RGB(tb,
out + j);
836static
void _blend_HSV_color(const float *const restrict a, const float *const restrict b,
837 float *const restrict
out, const float *const restrict mask, const size_t stride)
841 const float local_opacity = mask[
i];
844 dt_RGB_2_HSV(a + j, ta);
845 dt_RGB_2_HSV(b + j, tb);
848 const float xa = ta[1] * cosf(2.0f *
DT_M_PI_F * ta[0]);
849 const float ya = ta[1] * sinf(2.0f *
DT_M_PI_F * ta[0]);
850 const float xb = tb[1] * cosf(2.0f *
DT_M_PI_F * tb[0]);
851 const float yb = tb[1] * sinf(2.0f *
DT_M_PI_F * tb[0]);
854 const float xc = xa * (1.0f - local_opacity) + xb * local_opacity;
855 const float yc = ya * (1.0f - local_opacity) + yb * local_opacity;
857 tb[0] = atan2f(yc, xc) / (2.0f *
DT_M_PI_F);
858 if(tb[0] < 0.0f) tb[0] += 1.0f;
859 tb[1] = sqrtf(xc * xc + yc * yc);
864 dt_HSV_2_RGB(tb,
out + j);
871static
void _blend_RGB_R(const float *const restrict
a, const float *const restrict
b,
872 float *const restrict
out, const float *const restrict
mask, const size_t stride)
876 const float local_opacity =
mask[
i];
877 out[j + 0] =
a[j + 0] * (1.0f - local_opacity) + b[j + 0] * local_opacity;
878 out[j + 1] =
a[j + 1];
879 out[j + 2] =
a[j + 2];
880 out[j + 3] = local_opacity;
886static
void _blend_RGB_G(const float *const restrict
a, const float *const restrict
b,
887 float *const restrict
out, const float *const restrict
mask, const size_t stride)
891 const float local_opacity =
mask[
i];
892 out[j + 0] =
a[j + 0];
893 out[j + 1] =
a[j + 1] * (1.0f - local_opacity) + b[j + 1] * local_opacity;
894 out[j + 2] =
a[j + 2];
895 out[j + 3] = local_opacity;
901static
void _blend_RGB_B(const float *const restrict
a, const float *const restrict
b,
902 float *const restrict
out, const float *const restrict
mask, const size_t stride)
906 const float local_opacity =
mask[
i];
907 out[j + 0] =
a[j + 0];
908 out[j + 1] =
a[j + 1];
909 out[j + 2] =
a[j + 2] * (1.0f - local_opacity) + b[j + 2] * local_opacity;
910 out[j + 3] = local_opacity;
923 blend = _blend_lighten;
926 blend = _blend_darken;
929 blend = _blend_multiply;
932 blend = _blend_average;
938 blend = _blend_subtract;
942 blend = _blend_difference;
945 blend = _blend_screen;
948 blend = _blend_overlay;
951 blend = _blend_softlight;
954 blend = _blend_hardlight;
957 blend = _blend_vividlight;
960 blend = _blend_linearlight;
963 blend = _blend_pinlight;
966 blend = _blend_lightness;
969 blend = _blend_chromaticity;
975 blend = _blend_color;
978 blend = _blend_normal_bounded;
981 blend = _blend_coloradjust;
984 blend = _blend_HSV_value;
987 blend = _blend_HSV_color;
990 blend = _blend_RGB_R;
993 blend = _blend_RGB_G;
996 blend = _blend_RGB_B;
1002 blend = _blend_normal_unbounded;
1011static inline float _rgb_luminance(const float *const restrict
rgb,
1016 value = dt_ioppr_get_rgb_matrix_luminance(
rgb, profile->matrix_in, profile->lut_in,
1017 profile->unbounded_coeffs_in, profile->lutsize,
1018 profile->nonlinearlut);
1025static
void _display_channel(const float *const restrict a, float *const restrict b,
1026 const float *const restrict mask, const size_t stride, const int channel,
1027 const float *const restrict boost_factors,
1125 dt_RGB_2_HSL(a + j,
HSL);
1136 dt_RGB_2_HSL(b + j,
HSL);
1147 dt_RGB_2_HSL(a + j,
HSL);
1158 dt_RGB_2_HSL(b + j,
HSL);
1169 dt_RGB_2_HSL(a + j,
HSL);
1180 dt_RGB_2_HSL(b + j,
HSL);
1198static inline
void _copy_mask(const float *const restrict
a, float *const restrict
b, const size_t stride)
1206 const float *
const restrict a,
float *
const restrict b,
1207 const float *
const restrict mask,
1216 const int xoffs = roi_out->
x - roi_in->
x;
1217 const int yoffs = roi_out->
y - roi_in->
y;
1218 const int iwidth = roi_in->
width;
1219 const int owidth = roi_out->
width;
1220 const int oheight = roi_out->
height;
1232 const float *
const restrict boost_factors =
d->blendif_boost_factors;
1235 for(
size_t y = 0; y < oheight; y++)
1239 const size_t m_start = y * owidth;
1240 _display_channel(a + a_start, b + b_start, mask + m_start, owidth, channel, boost_factors, profile);
1254 for(
size_t y = 0; y < oheight; y++)
1258 const size_t m_start = y * owidth;
1259 blend(tmp_buffer + b_start, a + a_start, b + b_start, mask + m_start, owidth);
1265 for(
size_t y = 0; y < oheight; y++)
1269 const size_t m_start = y * owidth;
1270 blend(a + a_start, tmp_buffer + b_start, b + b_start, mask + m_start, owidth);
1281 for(
size_t y = 0; y < oheight; y++)
1284 const size_t b_start = y * stride;
1285 _copy_mask(a + a_start, b + b_start, stride);
void dt_develop_blendif_process_parameters(float *const restrict parameters, const dt_develop_blend_params_t *const params)
int dt_develop_blendif_init_masking_profile(const struct dt_dev_pixelpipe_t *pipe, const struct dt_dev_pixelpipe_iop_t *piece, dt_iop_order_iccprofile_info_t *blending_profile, dt_develop_blend_colorspace_t cst)
@ DEVELOP_BLEND_CS_RGB_DISPLAY
@ DEVELOP_BLENDIF_GRAY_out
@ DEVELOP_BLENDIF_GREEN_in
@ DEVELOP_BLENDIF_RED_out
@ DEVELOP_BLENDIF_BLUE_in
@ DEVELOP_BLENDIF_BLUE_out
@ DEVELOP_BLENDIF_RGB_MASK
@ DEVELOP_BLENDIF_GRAY_in
@ DEVELOP_BLENDIF_GREEN_out
#define DEVELOP_BLENDIF_PARAMETER_ITEMS
@ DEVELOP_BLEND_CHROMATICITY
@ DEVELOP_BLEND_DIFFERENCE
@ DEVELOP_BLEND_LIGHTNESS
@ DEVELOP_BLEND_MODE_MASK
@ DEVELOP_BLEND_HARDLIGHT
@ DEVELOP_BLEND_HSV_COLOR
@ DEVELOP_BLEND_HSV_VALUE
@ DEVELOP_BLEND_LINEARLIGHT
@ DEVELOP_BLEND_VIVIDLIGHT
@ DEVELOP_BLEND_SOFTLIGHT
@ DEVELOP_BLEND_COLORADJUST
@ DEVELOP_BLEND_DIFFERENCE2
@ DEVELOP_MASK_PARAMETRIC
static _blend_row_func * _choose_blend_func(const unsigned int blend_mode)
static float _blendif_compute_factor(const float value, const unsigned int invert_mask, const float *const restrict parameters)
static void _CLAMP_XYZ(float *const restrict XYZ)
static void _PX_COPY(const float *const restrict src, float *const restrict dst)
void dt_develop_blendif_rgb_hsl_make_mask(const struct dt_dev_pixelpipe_t *pipe, const struct dt_dev_pixelpipe_iop_t *piece, const float *const restrict a, const float *const restrict b, float *const restrict mask)
void dt_develop_blendif_rgb_hsl_blend(const struct dt_dev_pixelpipe_t *pipe, const struct dt_dev_pixelpipe_iop_t *piece, const float *const restrict a, float *const restrict b, const float *const restrict mask, const dt_dev_pixelpipe_display_mask_t request_mask_display)
void() _blend_row_func(const float *const restrict a, const float *const restrict b, float *const restrict out, const float *const restrict mask, const size_t stride)
#define DT_BLENDIF_RGB_BCH
#define DT_BLENDIF_RGB_CH
typedef void((*dt_cache_allocate_t)(void *userdata, dt_cache_entry_t *entry))
static dt_aligned_pixel_t rgb
static dt_aligned_pixel_t HSL
static dt_aligned_pixel_t XYZ
const dt_colormatrix_t dt_aligned_pixel_t out
for(size_t c=0;c< 3;c++) sRGB[c]
dt_dev_pixelpipe_display_mask_t
@ DT_DEV_PIXELPIPE_DISPLAY_OUTPUT
@ DT_DEV_PIXELPIPE_DISPLAY_G
@ DT_DEV_PIXELPIPE_DISPLAY_ANY
@ DT_DEV_PIXELPIPE_DISPLAY_HSL_H
@ DT_DEV_PIXELPIPE_DISPLAY_HSL_S
@ DT_DEV_PIXELPIPE_DISPLAY_MASK
@ DT_DEV_PIXELPIPE_DISPLAY_HSL_l
@ DT_DEV_PIXELPIPE_DISPLAY_GRAY
@ DT_DEV_PIXELPIPE_DISPLAY_B
@ DT_DEV_PIXELPIPE_DISPLAY_R
__DT_CLONE_TARGETS__ void dt_iop_image_mul_const(float *const buf, const float mul_value, const size_t width, const size_t height, const size_t ch)
__DT_CLONE_TARGETS__ void dt_iop_image_copy(float *const __restrict__ out, const float *const __restrict__ in, const size_t nfloats)
__DT_CLONE_TARGETS__ void dt_iop_image_fill(float *const buf, const float fill_value, const size_t width, const size_t height, const size_t ch)
#define DEVELOP_BLENDIF_SIZE
float *const restrict const size_t k
#define IS_NULL_PTR(p)
C is way too permissive with !=, == and if(var) checks, which can mean too many things depending on w...
#define DT_ALIGNED_PIXEL
Align a 4-float pixel on 16 bytes, enough for SSE. Same struct-member caveat as DT_ALIGNED_ARRAY,...
#define DT_ALIGNED_ARRAY
Align an object on a cacheline boundary, so AVX2 can load it whole.
#define __OMP_SIMD__(...)
#define __OMP_DECLARE_SIMD__(...)
#define __OMP_PARALLEL__(...)
#define __OMP_PARALLEL_FOR__(...)
#define __OMP_FOR_SIMD__(...)
#define __OMP_PARALLEL_FOR_SIMD__(...)
static float clamp_simd(const float x)
#define dt_pixelpipe_cache_alloc_align_float_cache(pixels, id)
#define dt_pixelpipe_cache_free_align(mem)
DT_ALIGNED_PIXEL float dt_aligned_pixel_t[4]
static const dt_aligned_pixel_simd_t value
dt_iop_buffer_dsc_t dsc_in
A profile reduced to the arithmetic the pixel loop can run: two matrices and six tone-curve LUTs,...
Region of interest passed through the pixelpipe.