@@ -265,7 +265,7 @@ typedef struct dt_iop_clipping_data_t
265265 uint32_t flags ; // flipping flags
266266 uint32_t flip ; // flipped output buffer so more area would fit.
267267
268- float k_space [ 4 ] ; // space for the "destination" rectangle of the keystone quadrilatere
268+ dt_boundingbox_t k_space ; // space for the "destination" rectangle of the keystone quadrilateral
269269 float kxa , kya , kxb , kyb , kxc , kyc , kxd ,
270270 kyd ; // point of the "source" quadrilatere (modified if keystone is not "full")
271271 float a , b , d , e , g , h ; // value of the transformation matrix (c=f=0 && i=1)
@@ -353,7 +353,7 @@ static int gui_has_focus(struct dt_iop_module_t *self)
353353 && dt_dev_modulegroups_get_activated (darktable .develop ) != DT_MODULEGROUP_BASICS );
354354}
355355
356- static void keystone_get_matrix (float * k_space , float kxa , float kxb , float kxc , float kxd , float kya ,
356+ static void keystone_get_matrix (const dt_boundingbox_t k_space , float kxa , float kxb , float kxc , float kxd , float kya ,
357357 float kyb , float kyc , float kyd , float * a , float * b , float * d , float * e ,
358358 float * g , float * h )
359359{
@@ -389,8 +389,8 @@ static void keystone_get_matrix(float *k_space, float kxa, float kxb, float kxc,
389389#ifdef _OPENMP
390390#pragma omp declare simd
391391#endif
392- static inline void keystone_backtransform (float * i , float * k_space , float a , float b , float d , float e , float g ,
393- float h , float kxa , float kya )
392+ static inline void keystone_backtransform (float * i , const dt_boundingbox_t k_space , float a , float b , float d ,
393+ float e , float g , float h , float kxa , float kya )
394394{
395395 const float xx = i [0 ] - k_space [0 ];
396396 const float yy = i [1 ] - k_space [1 ];
@@ -404,8 +404,8 @@ static inline void keystone_backtransform(float *i, float *k_space, float a, flo
404404#ifdef _OPENMP
405405#pragma omp declare simd
406406#endif
407- static inline void keystone_transform (float * i , float * k_space , float a , float b , float d , float e , float g , float h ,
408- float kxa , float kya )
407+ static inline void keystone_transform (float * i , const dt_boundingbox_t k_space , float a , float b , float d ,
408+ float e , float g , float h , float kxa , float kya )
409409{
410410 const float xx = i [0 ] - kxa ;
411411 const float yy = i [1 ] - kya ;
@@ -465,7 +465,7 @@ int distort_transform(dt_iop_module_t *self, dt_dev_pixelpipe_iop_t *piece, floa
465465 const float rx = piece -> buf_in .width ;
466466 const float ry = piece -> buf_in .height ;
467467
468- float DT_ALIGNED_PIXEL k_space [ 4 ] = { d -> k_space [0 ] * rx , d -> k_space [1 ] * ry , d -> k_space [2 ] * rx , d -> k_space [3 ] * ry };
468+ const dt_boundingbox_t k_space = { d -> k_space [0 ] * rx , d -> k_space [1 ] * ry , d -> k_space [2 ] * rx , d -> k_space [3 ] * ry };
469469 const float kxa = d -> kxa * rx , kxb = d -> kxb * rx , kxc = d -> kxc * rx , kxd = d -> kxd * rx ;
470470 const float kya = d -> kya * ry , kyb = d -> kyb * ry , kyc = d -> kyc * ry , kyd = d -> kyd * ry ;
471471 float ma = 0 , mb = 0 , md = 0 , me = 0 , mg = 0 , mh = 0 ;
@@ -535,7 +535,7 @@ int distort_backtransform(dt_iop_module_t *self, dt_dev_pixelpipe_iop_t *piece,
535535 const float rx = piece -> buf_in .width ;
536536 const float ry = piece -> buf_in .height ;
537537
538- float DT_ALIGNED_PIXEL k_space [ 4 ] = { d -> k_space [0 ] * rx , d -> k_space [1 ] * ry , d -> k_space [2 ] * rx , d -> k_space [3 ] * ry };
538+ const dt_boundingbox_t k_space = { d -> k_space [0 ] * rx , d -> k_space [1 ] * ry , d -> k_space [2 ] * rx , d -> k_space [3 ] * ry };
539539 const float kxa = d -> kxa * rx , kxb = d -> kxb * rx , kxc = d -> kxc * rx , kxd = d -> kxd * rx ;
540540 const float kya = d -> kya * ry , kyb = d -> kyb * ry , kyc = d -> kyc * ry , kyd = d -> kyd * ry ;
541541 float ma , mb , md , me , mg , mh ;
@@ -602,7 +602,7 @@ void distort_mask(struct dt_iop_module_t *self, struct dt_dev_pixelpipe_iop_t *p
602602 const struct dt_interpolation * interpolation = dt_interpolation_new (DT_INTERPOLATION_USERPREF_WARP );
603603 const float rx = piece -> buf_in .width * roi_in -> scale ;
604604 const float ry = piece -> buf_in .height * roi_in -> scale ;
605- float DT_ALIGNED_PIXEL k_space [ 4 ] = { d -> k_space [0 ] * rx , d -> k_space [1 ] * ry , d -> k_space [2 ] * rx , d -> k_space [3 ] * ry };
605+ const dt_boundingbox_t k_space = { d -> k_space [0 ] * rx , d -> k_space [1 ] * ry , d -> k_space [2 ] * rx , d -> k_space [3 ] * ry };
606606 const float kxa = d -> kxa * rx , kxb = d -> kxb * rx , kxc = d -> kxc * rx , kxd = d -> kxd * rx ;
607607 const float kya = d -> kya * ry , kyb = d -> kyb * ry , kyc = d -> kyc * ry , kyd = d -> kyd * ry ;
608608 float ma , mb , md , me , mg , mh ;
@@ -612,7 +612,8 @@ void distort_mask(struct dt_iop_module_t *self, struct dt_dev_pixelpipe_iop_t *p
612612#ifdef _OPENMP
613613#pragma omp parallel for default(none) \
614614 dt_omp_firstprivate(in, kxa, kya, out, roi_in, roi_out) \
615- shared(d, interpolation, k_space, ma, mb, md, me, mg, mh) \
615+ dt_omp_sharedconst(k_space) \
616+ shared(d, interpolation, ma, mb, md, me, mg, mh) \
616617 schedule(static)
617618#endif
618619 // (slow) point-by-point transformation.
@@ -787,11 +788,11 @@ void modify_roi_out(struct dt_iop_module_t *self, struct dt_dev_pixelpipe_iop_t
787788 * roi_out = * roi_in ;
788789 // set roi_out values with rotation and keystone
789790 // initial corners pos
790- float corn_x [ 4 ] = { 0.0f , roi_in -> width , roi_in -> width , 0.0f };
791- float corn_y [ 4 ] = { 0.0f , 0.0f , roi_in -> height , roi_in -> height };
791+ dt_boundingbox_t corn_x = { 0.0f , roi_in -> width , roi_in -> width , 0.0f };
792+ dt_boundingbox_t corn_y = { 0.0f , 0.0f , roi_in -> height , roi_in -> height };
792793 // destination corner points
793- float corn_out_x [ 4 ] = { 0.0f };
794- float corn_out_y [ 4 ] = { 0.0f };
794+ dt_boundingbox_t corn_out_x = { 0.0f };
795+ dt_boundingbox_t corn_out_y = { 0.0f };
795796
796797 // we don't test image flip as autocrop is not completely ok...
797798 d -> flip = 0 ;
@@ -894,10 +895,10 @@ void modify_roi_in(struct dt_iop_module_t *self, struct dt_dev_pixelpipe_iop_t *
894895 const float so = roi_out -> scale ;
895896 const float kw = piece -> buf_in .width * so , kh = piece -> buf_in .height * so ;
896897 const float roi_out_x = roi_out -> x - d -> enlarge_x * so , roi_out_y = roi_out -> y - d -> enlarge_y * so ;
897- float p [2 ], o [2 ],
898- aabb [ 4 ] = { roi_out_x + d -> cix * so , roi_out_y + d -> ciy * so , roi_out_x + d -> cix * so + roi_out -> width ,
898+ float p [2 ], o [2 ];
899+ dt_boundingbox_t aabb = { roi_out_x + d -> cix * so , roi_out_y + d -> ciy * so , roi_out_x + d -> cix * so + roi_out -> width ,
899900 roi_out_y + d -> ciy * so + roi_out -> height };
900- float aabb_in [ 4 ] = { INFINITY , INFINITY , - INFINITY , - INFINITY };
901+ dt_boundingbox_t aabb_in = { INFINITY , INFINITY , - INFINITY , - INFINITY };
901902 for (int c = 0 ; c < 4 ; c ++ )
902903 {
903904 // get corner points of roi_out
@@ -979,7 +980,7 @@ void process(struct dt_iop_module_t *self, dt_dev_pixelpipe_iop_t *piece, const
979980 const struct dt_interpolation * interpolation = dt_interpolation_new (DT_INTERPOLATION_USERPREF_WARP );
980981 const float rx = piece -> buf_in .width * roi_in -> scale ;
981982 const float ry = piece -> buf_in .height * roi_in -> scale ;
982- float k_space [ 4 ] = { d -> k_space [0 ] * rx , d -> k_space [1 ] * ry , d -> k_space [2 ] * rx , d -> k_space [3 ] * ry };
983+ const dt_boundingbox_t k_space = { d -> k_space [0 ] * rx , d -> k_space [1 ] * ry , d -> k_space [2 ] * rx , d -> k_space [3 ] * ry };
983984 const float kxa = d -> kxa * rx , kxb = d -> kxb * rx , kxc = d -> kxc * rx , kxd = d -> kxd * rx ;
984985 const float kya = d -> kya * ry , kyb = d -> kyb * ry , kyc = d -> kyc * ry , kyd = d -> kyd * ry ;
985986 float ma , mb , md , me , mg , mh ;
@@ -989,7 +990,8 @@ void process(struct dt_iop_module_t *self, dt_dev_pixelpipe_iop_t *piece, const
989990#ifdef _OPENMP
990991#pragma omp parallel for default(none) \
991992 dt_omp_firstprivate(ch, ch_width, ivoid, kxa, kya, ovoid, roi_in, roi_out) \
992- shared(d, interpolation, k_space, ma, mb, md, me, mg, mh) \
993+ dt_omp_sharedconst(k_space) \
994+ shared(d, interpolation, ma, mb, md, me, mg, mh) \
993995 schedule(static)
994996#endif
995997 // (slow) point-by-point transformation.
@@ -1089,16 +1091,16 @@ int process_cl(struct dt_iop_module_t *self, dt_dev_pixelpipe_iop_t *piece, cl_m
10891091 float m [4 ] = { d -> m [0 ], d -> m [1 ], d -> m [2 ], d -> m [3 ] };
10901092
10911093 float k_sizes [2 ] = { piece -> buf_in .width * roi_in -> scale , piece -> buf_in .height * roi_in -> scale };
1092- float k_space [ 4 ] = { d -> k_space [0 ] * k_sizes [0 ], d -> k_space [1 ] * k_sizes [1 ], d -> k_space [ 2 ] * k_sizes [ 0 ],
1093- d -> k_space [3 ] * k_sizes [1 ] };
1094- if ( d -> k_apply == 0 ) k_space [2 ] = 0.0f ;
1094+ const dt_boundingbox_t k_space = { d -> k_space [0 ] * k_sizes [0 ], d -> k_space [1 ] * k_sizes [1 ],
1095+ d -> k_apply ? d -> k_space [2 ] * k_sizes [0 ] : 0.0f ,
1096+ d -> k_space [3 ] * k_sizes [ 1 ] } ;
10951097 float ma , mb , md , me , mg , mh ;
10961098 keystone_get_matrix (k_space , d -> kxa * k_sizes [0 ], d -> kxb * k_sizes [0 ], d -> kxc * k_sizes [0 ],
10971099 d -> kxd * k_sizes [0 ], d -> kya * k_sizes [1 ], d -> kyb * k_sizes [1 ], d -> kyc * k_sizes [1 ],
10981100 d -> kyd * k_sizes [1 ], & ma , & mb , & md , & me , & mg , & mh );
1099- float ka [2 ] = { d -> kxa * k_sizes [0 ], d -> kya * k_sizes [1 ] };
1100- float maa [4 ] = { ma , mb , md , me };
1101- float mbb [2 ] = { mg , mh };
1101+ const float ka [2 ] = { d -> kxa * k_sizes [0 ], d -> kya * k_sizes [1 ] };
1102+ const float maa [4 ] = { ma , mb , md , me };
1103+ const float mbb [2 ] = { mg , mh };
11021104
11031105 size_t sizes [3 ];
11041106
@@ -3161,7 +3163,7 @@ int button_released(struct dt_iop_module_t *self, double x, double y, int which,
31613163 if (g -> straightening )
31623164 {
31633165 // adjust the line with possible current angle and flip on this module
3164- float pts [ 4 ] = { x , y , g -> button_down_x , g -> button_down_y };
3166+ dt_boundingbox_t pts = { x , y , g -> button_down_x , g -> button_down_y };
31653167 dt_dev_distort_backtransform_plus (self -> dev , self -> dev -> preview_pipe , self -> iop_order , DT_DEV_TRANSFORM_DIR_FORW_INCL , pts , 2 );
31663168
31673169 float dx = pts [0 ] - pts [2 ];
0 commit comments