Skip to content

Commit 14fe465

Browse files
ralfbrownTurboGit
authored andcommitted
add type dt_boundingbox_t to hold a pair of point coordinates
...and convert uses of float[4] representing such a bounding box.
1 parent 575a1bd commit 14fe465

File tree

17 files changed

+57
-51
lines changed

17 files changed

+57
-51
lines changed

src/common/darktable.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,8 @@ struct dt_undo_t;
238238
struct dt_colorspaces_t;
239239
struct dt_l10n_t;
240240

241+
typedef float dt_boundingbox_t[4]; //(x,y) of upperleft, then (x,y) of lowerright
242+
241243
typedef enum dt_debug_thread_t
242244
{
243245
// powers of two, masking

src/common/exif.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -693,7 +693,7 @@ static bool dt_check_usercrop(Exiv2::ExifData &exifData, dt_image_t *img)
693693
Exiv2::ExifData::const_iterator pos = exifData.findKey(Exiv2::ExifKey("Exif.SubImage1.0xc7b5"));
694694
if(pos != exifData.end() && pos->count() == 4 && pos->size())
695695
{
696-
float crop[4];
696+
dt_boundingbox_t crop;
697697
for(int i = 0; i < 4; i++) crop[i] = pos->toFloat(i);
698698
if (((crop[0]>0)||(crop[1]>0)||(crop[2]<1)||(crop[3]<1))&&(crop[2]-crop[0]>0.05f)&&(crop[3]-crop[1]>0.05f))
699699
{

src/common/image.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ typedef struct dt_image_t
247247
dt_aligned_pixel_t wb_coeffs;
248248

249249
/* DefaultUserCrop */
250-
float usercrop[4];
250+
dt_boundingbox_t usercrop;
251251
/* convenience pointer back into the image cache, so we can return dt_image_t* there directly. */
252252
struct dt_cache_entry_t *cache_entry;
253253
} dt_image_t;

src/develop/imageop.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ typedef struct dt_iop_module_t
209209
/** color picker proxy */
210210
struct dt_iop_color_picker_t *picker;
211211
/** bounding box in which the mean color is requested. */
212-
float color_picker_box[4];
212+
dt_boundingbox_t color_picker_box;
213213
/** single point to pick if in point mode */
214214
float color_picker_point[2];
215215
/** place to store the picked color of module input. */

src/develop/pixelpipe_hb.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -602,7 +602,7 @@ static int pixelpipe_picker_helper(dt_iop_module_t *module, const dt_iop_roi_t *
602602
// position
603603
if(module->color_picker_point[0] < 0 || module->color_picker_point[1] < 0) return 1;
604604

605-
float fbox[4] = { 0.0f };
605+
dt_boundingbox_t fbox = { 0.0f };
606606

607607
// get absolute pixel coordinates in final preview image
608608
if(darktable.lib->proxy.colorpicker.size)

src/gui/color_picker_proxy.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ typedef struct dt_iop_color_picker_t
3737
/** used to avoid recursion when a parameter is modified in the apply() */
3838
GtkWidget *colorpick;
3939
float pick_pos[2]; // last picker positions (max 9 picker per module)
40-
float pick_box[4]; // last picker areas (max 9 picker per module)
40+
dt_boundingbox_t pick_box; // last picker areas (max 9 picker per module)
4141
} dt_iop_color_picker_t;
4242

4343
static gboolean _iop_record_point_area(dt_iop_color_picker_t *self)
@@ -78,7 +78,7 @@ static void _iop_get_point(dt_iop_color_picker_t *self, float *pos)
7878
}
7979
}
8080

81-
static void _iop_get_area(dt_iop_color_picker_t *self, float *box)
81+
static void _iop_get_area(dt_iop_color_picker_t *self, dt_boundingbox_t box)
8282
{
8383
if(!isnan(self->pick_box[0]) && !isnan(self->pick_box[1]))
8484
{
@@ -184,7 +184,7 @@ static gboolean _iop_color_picker_callback_button_press(GtkWidget *button, GdkEv
184184
}
185185
if(kind == DT_COLOR_PICKER_AREA)
186186
{
187-
float box[4];
187+
dt_boundingbox_t box;
188188
_iop_get_area(self, box);
189189
dt_lib_colorpicker_set_box_area(darktable.lib, box);
190190
self->pick_pos[0] = NAN; // trigger difference on first apply

src/iop/ashift.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2849,7 +2849,7 @@ void process(struct dt_iop_module_t *self, dt_dev_pixelpipe_iop_t *piece, const
28492849
const float scale = roi_in->scale / pr_d;
28502850

28512851
// origin of image and opposite corner as reference points
2852-
float points[4] = { 0.0f, 0.0f, (float)piece->buf_in.width, (float)piece->buf_in.height };
2852+
dt_boundingbox_t points = { 0.0f, 0.0f, (float)piece->buf_in.width, (float)piece->buf_in.height };
28532853
float ivec[2] = { points[2] - points[0], points[3] - points[1] };
28542854
float ivecl = sqrtf(ivec[0] * ivec[0] + ivec[1] * ivec[1]);
28552855

@@ -2983,7 +2983,7 @@ int process_cl(struct dt_iop_module_t *self, dt_dev_pixelpipe_iop_t *piece, cl_m
29832983
const float scale = roi_in->scale / pr_d;
29842984

29852985
// origin of image and opposite corner as reference points
2986-
float points[4] = { 0.0f, 0.0f, (float)piece->buf_in.width, (float)piece->buf_in.height };
2986+
dt_boundingbox_t points = { 0.0f, 0.0f, (float)piece->buf_in.width, (float)piece->buf_in.height };
29872987
float ivec[2] = { points[2] - points[0], points[3] - points[1] };
29882988
float ivecl = sqrtf(ivec[0] * ivec[0] + ivec[1] * ivec[1]);
29892989

@@ -3205,7 +3205,7 @@ static uint64_t get_lines_hash(const dt_iop_ashift_line_t *lines, const int line
32053205
uint64_t hash = 5381;
32063206
for(int n = 0; n < lines_count; n++)
32073207
{
3208-
float v[4] = { lines[n].p1[0], lines[n].p1[1], lines[n].p2[0], lines[n].p2[1] };
3208+
const dt_boundingbox_t v = { lines[n].p1[0], lines[n].p1[1], lines[n].p2[0], lines[n].p2[1] };
32093209
union {
32103210
float f;
32113211
uint32_t u;
@@ -3735,7 +3735,7 @@ int mouse_moved(struct dt_iop_module_t *self, double x, double y, double pressur
37353735
{
37363736
dt_iop_ashift_params_t *p = (dt_iop_ashift_params_t *)self->params;
37373737

3738-
float pts[4] = { pzx, pzy, 1.0f, 1.0f };
3738+
dt_boundingbox_t pts = { pzx, pzy, 1.0f, 1.0f };
37393739
dt_dev_distort_backtransform_plus(self->dev, self->dev->preview_pipe, self->iop_order,
37403740
DT_DEV_TRANSFORM_DIR_FORW_INCL, pts, 2);
37413741

@@ -3825,7 +3825,7 @@ int button_pressed(struct dt_iop_module_t *self, double x, double y, double pres
38253825
dt_control_change_cursor(GDK_HAND1);
38263826
g->adjust_crop = TRUE;
38273827

3828-
float pts[4] = { pzx, pzy, 1.0f, 1.0f };
3828+
dt_boundingbox_t pts = { pzx, pzy, 1.0f, 1.0f };
38293829
dt_dev_distort_backtransform_plus(self->dev, self->dev->preview_pipe, self->iop_order,
38303830
DT_DEV_TRANSFORM_DIR_FORW_INCL, pts, 2);
38313831

src/iop/basicadj.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ typedef struct dt_iop_basicadj_gui_data_t
6262
int call_auto_exposure; // should we calculate exposure automatically?
6363
int draw_selected_region; // are we drawing the selected region?
6464
float posx_from, posx_to, posy_from, posy_to; // coordinates of the area
65-
float box_cood[4]; // normalized coordinates
65+
dt_boundingbox_t box_cood; // normalized coordinates
6666
int button_down; // user pressed the mouse button?
6767

6868
GtkWidget *bt_auto_levels;
@@ -1211,7 +1211,7 @@ static void _get_selected_area(struct dt_iop_module_t *self, dt_dev_pixelpipe_io
12111211
{
12121212
const int width = roi_in->width;
12131213
const int height = roi_in->height;
1214-
float box_cood[4] = { g->box_cood[0], g->box_cood[1], g->box_cood[2], g->box_cood[3] };
1214+
dt_boundingbox_t box_cood = { g->box_cood[0], g->box_cood[1], g->box_cood[2], g->box_cood[3] };
12151215

12161216
box_cood[0] *= piece->pipe->iwidth;
12171217
box_cood[1] *= piece->pipe->iheight;

src/iop/clipping.c

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -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];

src/iop/crop.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ static void _commit_box(dt_iop_module_t *self, dt_iop_crop_gui_data_t *g, dt_iop
188188
// we want value in iop space
189189
const float wd = self->dev->preview_pipe->backbuf_width;
190190
const float ht = self->dev->preview_pipe->backbuf_height;
191-
float points[4] = { g->clip_x * wd, g->clip_y * ht, (g->clip_x + g->clip_w) * wd, (g->clip_y + g->clip_h) * ht };
191+
dt_boundingbox_t points = { g->clip_x * wd, g->clip_y * ht, (g->clip_x + g->clip_w) * wd, (g->clip_y + g->clip_h) * ht };
192192
if(dt_dev_distort_backtransform_plus(self->dev, self->dev->preview_pipe, self->iop_order,
193193
DT_DEV_TRANSFORM_DIR_FORW_EXCL, points, 2))
194194
{

0 commit comments

Comments
 (0)