From 4cf5f92a52cfbf7f448aef185fa8be059e9f0e6a Mon Sep 17 00:00:00 2001 From: Vasily Khoruzhick Date: Wed, 3 Jun 2020 20:44:13 -0700 Subject: [PATCH] lib: re-add partial image flag And activate perimeter points removal if this flag is set This flag should be set for aes1610, aesx660, aes2501, aes2550 and upektc_img since these sensors may produce incomplete image. Fixes: #142 --- libfprint/drivers/aes1610.c | 1 + libfprint/drivers/aes2501.c | 1 + libfprint/drivers/aes2550.c | 1 + libfprint/drivers/aesx660.c | 1 + libfprint/drivers/elan.c | 1 + libfprint/drivers/upektc_img.c | 1 + libfprint/fp-image.c | 6 +++++- libfprint/fpi-image.h | 1 + 8 files changed, 12 insertions(+), 1 deletion(-) diff --git a/libfprint/drivers/aes1610.c b/libfprint/drivers/aes1610.c index 4ea2ff3..6fdecba 100644 --- a/libfprint/drivers/aes1610.c +++ b/libfprint/drivers/aes1610.c @@ -614,6 +614,7 @@ capture_read_strip_cb (FpiUsbTransfer *transfer, FpDevice *device, self->strips = g_slist_reverse (self->strips); fpi_do_movement_estimation (&assembling_ctx, self->strips); img = fpi_assemble_frames (&assembling_ctx, self->strips); + img->flags |= FPI_IMAGE_PARTIAL; g_slist_free_full (self->strips, g_free); self->strips = NULL; diff --git a/libfprint/drivers/aes2501.c b/libfprint/drivers/aes2501.c index 57b0cca..450ac6e 100644 --- a/libfprint/drivers/aes2501.c +++ b/libfprint/drivers/aes2501.c @@ -458,6 +458,7 @@ capture_read_strip_cb (FpiUsbTransfer *transfer, FpDevice *_dev, fpi_do_movement_estimation (&assembling_ctx, self->strips); img = fpi_assemble_frames (&assembling_ctx, self->strips); + img->flags |= FPI_IMAGE_PARTIAL; g_slist_free_full (self->strips, g_free); self->strips = NULL; self->strips_len = 0; diff --git a/libfprint/drivers/aes2550.c b/libfprint/drivers/aes2550.c index 1ebf933..07380b8 100644 --- a/libfprint/drivers/aes2550.c +++ b/libfprint/drivers/aes2550.c @@ -230,6 +230,7 @@ capture_set_idle_reqs_cb (FpiUsbTransfer *transfer, self->strips = g_slist_reverse (self->strips); img = fpi_assemble_frames (&assembling_ctx, self->strips); + img->flags |= FPI_IMAGE_PARTIAL; g_slist_free_full (self->strips, g_free); self->strips = NULL; self->strips_len = 0; diff --git a/libfprint/drivers/aesx660.c b/libfprint/drivers/aesx660.c index 0781606..8921d68 100644 --- a/libfprint/drivers/aesx660.c +++ b/libfprint/drivers/aesx660.c @@ -331,6 +331,7 @@ capture_set_idle_cmd_cb (FpiUsbTransfer *transfer, FpDevice *device, priv->strips = g_slist_reverse (priv->strips); img = fpi_assemble_frames (cls->assembling_ctx, priv->strips); + img->flags |= FPI_IMAGE_PARTIAL; g_slist_foreach (priv->strips, (GFunc) g_free, NULL); g_slist_free (priv->strips); priv->strips = NULL; diff --git a/libfprint/drivers/elan.c b/libfprint/drivers/elan.c index dfccf1e..a498539 100644 --- a/libfprint/drivers/elan.c +++ b/libfprint/drivers/elan.c @@ -325,6 +325,7 @@ elan_submit_image (FpImageDevice *dev) g_slist_foreach (raw_frames, (GFunc) self->process_frame, &frames); fpi_do_movement_estimation (&assembling_ctx, frames); img = fpi_assemble_frames (&assembling_ctx, frames); + img->flags |= FPI_IMAGE_PARTIAL; g_slist_free_full (frames, g_free); diff --git a/libfprint/drivers/upektc_img.c b/libfprint/drivers/upektc_img.c index d5aaf72..be7cdba 100644 --- a/libfprint/drivers/upektc_img.c +++ b/libfprint/drivers/upektc_img.c @@ -310,6 +310,7 @@ capture_read_data_cb (FpiUsbTransfer *transfer, FpDevice *device, fp_dbg ("Image size is %lu\n", self->image_size); img = fp_image_new (IMAGE_WIDTH, IMAGE_HEIGHT); + img->flags |= FPI_IMAGE_PARTIAL; memcpy (img->data, self->image_bits, IMAGE_SIZE); fpi_image_device_image_captured (dev, img); diff --git a/libfprint/fp-image.c b/libfprint/fp-image.c index 2e46e92..c2c9742 100644 --- a/libfprint/fp-image.c +++ b/libfprint/fp-image.c @@ -281,6 +281,7 @@ fp_image_detect_minutiae_thread_func (GTask *task, gint map_w, map_h; gint bw, bh, bd; gint r; + g_autofree LFSPARMS *lfsparms; /* Normalize the image first */ if (data->flags & FPI_IMAGE_H_FLIPPED) @@ -294,12 +295,15 @@ fp_image_detect_minutiae_thread_func (GTask *task, data->flags &= ~(FPI_IMAGE_H_FLIPPED | FPI_IMAGE_V_FLIPPED | FPI_IMAGE_COLORS_INVERTED); + lfsparms = g_memdup (&g_lfsparms_V2, sizeof (LFSPARMS)); + lfsparms->remove_perimeter_pts = data->flags & FPI_IMAGE_PARTIAL ? TRUE : FALSE; + timer = g_timer_new (); r = get_minutiae (&minutiae, &quality_map, &direction_map, &low_contrast_map, &low_flow_map, &high_curve_map, &map_w, &map_h, &bdata, &bw, &bh, &bd, data->image, data->width, data->height, 8, - data->ppmm, &g_lfsparms_V2); + data->ppmm, lfsparms); g_timer_stop (timer); fp_dbg ("Minutiae scan completed in %f secs", g_timer_elapsed (timer, NULL)); diff --git a/libfprint/fpi-image.h b/libfprint/fpi-image.h index dd6dbf8..fcd62b8 100644 --- a/libfprint/fpi-image.h +++ b/libfprint/fpi-image.h @@ -37,6 +37,7 @@ typedef enum { FPI_IMAGE_V_FLIPPED = 1 << 0, FPI_IMAGE_H_FLIPPED = 1 << 1, FPI_IMAGE_COLORS_INVERTED = 1 << 2, + FPI_IMAGE_PARTIAL = 1 << 3, } FpiImageFlags; /**