From 71e4bb39ec214883bc707b5ba2b95423f1fd05b6 Mon Sep 17 00:00:00 2001
From: Daniel Drake <dsd@cs.manchester.ac.uk>
Date: Fri, 9 Nov 2007 14:57:42 +0000
Subject: [PATCH] Allow drivers to specify custom bz3 match threshold

aes4000 detects fewer minutiae and hence returns lower scores.
---
 libfprint/drivers/aes4000.c | 3 +++
 libfprint/fp_internal.h     | 1 +
 libfprint/imgdev.c          | 9 ++++++++-
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/libfprint/drivers/aes4000.c b/libfprint/drivers/aes4000.c
index 58e1e76..8198132 100644
--- a/libfprint/drivers/aes4000.c
+++ b/libfprint/drivers/aes4000.c
@@ -220,6 +220,9 @@ struct fp_img_driver aes4000_driver = {
 	.img_width = 96,
 	.enlarge_factor = 3,
 
+	/* temporarily lowered until image quality improves */
+	.bz3_threshold = 9,
+
 	.init = dev_init,
 	.exit = dev_exit,
 	.capture = capture,
diff --git a/libfprint/fp_internal.h b/libfprint/fp_internal.h
index f32fc55..3ed42f2 100644
--- a/libfprint/fp_internal.h
+++ b/libfprint/fp_internal.h
@@ -127,6 +127,7 @@ struct fp_img_driver {
 	int img_width;
 	int img_height;
 	unsigned int enlarge_factor;
+	int bz3_threshold;
 
 	/* Device operations */
 	int (*init)(struct fp_img_dev *dev, unsigned long driver_data);
diff --git a/libfprint/imgdev.c b/libfprint/imgdev.c
index 6ccfd65..d8d651a 100644
--- a/libfprint/imgdev.c
+++ b/libfprint/imgdev.c
@@ -186,12 +186,16 @@ int img_dev_enroll(struct fp_dev *dev, gboolean initial, int stage,
 	return FP_ENROLL_COMPLETE;
 }
 
+#define BOZORTH3_DEFAULT_THRESHOLD 40
+
 static int img_dev_verify(struct fp_dev *dev,
 	struct fp_print_data *enrolled_print)
 {
 	struct fp_img_dev *imgdev = dev->priv;
+	struct fp_img_driver *imgdrv = fpi_driver_to_img_driver(dev->drv);
 	struct fp_img *img;
 	struct fp_print_data *print;
+	int match_score = imgdrv->bz3_threshold;
 	int r;
 
 	r = fpi_imgdev_capture(imgdev, 0, &img);
@@ -209,11 +213,14 @@ static int img_dev_verify(struct fp_dev *dev,
 		return FP_VERIFY_RETRY;
 	}
 
+	if (match_score == 0)
+		match_score = BOZORTH3_DEFAULT_THRESHOLD;
+
 	r = fpi_img_compare_print_data(enrolled_print, print);
 	fp_print_data_free(print);
 	if (r < 0)
 		return r;
-	if (r >= 40)
+	if (r >= match_score)
 		return FP_VERIFY_MATCH;
 	else
 		return FP_VERIFY_NO_MATCH;