Enrollment 28.2.0
Loading...
Searching...
No Matches
PrintExecutor.h
Go to the documentation of this file.
1
9
10#pragma once
11
13#include "enrollment/Export.h"
17#include <cstdint>
18#include <memory>
19#include <mutex>
20#include <stddef.h>
21#include <string>
22
23namespace inno
24{
25 // Functions and types suitable for DLL interface
26 extern "C"
27 {
28// See doc/Main.markdown "Header and Binary parts" for reason why we use pragma pack 1
29#pragma pack(push, 1)
30 struct INNO_ENROLLMENT_API inno_ICSExtractor_params
31 {
32 unsigned int height;
33 unsigned int width;
34 unsigned int dpi;
35 const uint8_t* data;
36 unsigned int extractOptionsMask;
37 unsigned char* skeletonImage;
38 unsigned char* binarizedImage;
39 unsigned char* filteredImage;
40 int* blockWidth;
41 int* blockHeight;
42 unsigned char* bMask;
43 int palmQualityLowerBound;
44 int palmQualityUpperBound;
45 };
46
47 struct INNO_ENROLLMENT_API inno_ICSVerifyMatcher_params
48 {
49 const uint8_t* probeData;
50 size_t probeSize;
51 const uint8_t* galleryData;
52 size_t gallerySize;
53 int maxRotation;
54 int speed;
55 int score;
56 int* dx;
57 int* dy;
58 unsigned char* dAngle;
59 int* associationCount;
60 uint16_t* assocProbeMinutiae;
61 uint16_t* assocGalleryMinutiae;
62 unsigned char* assocQuality;
63 };
64
65 struct INNO_ENROLLMENT_API inno_PrintDetector_result
66 {
67 static const unsigned int MaxRectangles = 4;
68 int topLeftX[MaxRectangles];
69 int topLeftY[MaxRectangles];
70 int topRightX[MaxRectangles];
71 int topRightY[MaxRectangles];
72 int bottomLeftX[MaxRectangles];
73 int bottomLeftY[MaxRectangles];
74 int bottomRightX[MaxRectangles];
75 int bottomRightY[MaxRectangles];
76 int angle[MaxRectangles];
77 int positions[MaxRectangles];
78 unsigned int count;
79 };
80
81 struct INNO_ENROLLMENT_API inno_Minutia_out
82 {
83 int x;
84 int y;
85 unsigned char angle;
86 unsigned char quality;
87 unsigned char type;
88 };
89
90 struct INNO_ENROLLMENT_API inno_CriticalPoint_out
91 {
92 int x;
93 int y;
94 unsigned char angle;
95 unsigned char type;
96 };
97#pragma pack(pop)
98 using inno_AllocateData = uint8_t* (*)(void*, size_t);
99 using inno_Deleter = void (*)(void*);
100 using inno_AllocateCriticalPoints = inno_CriticalPoint_out* (*)(void*, size_t);
101 }
102
103 class PrintExecutor
104 {
105 public:
106 static constexpr size_t MaxErrorMessage = 200;
107
108 virtual void Extract(inno_ICSExtractor_params* params,
109 LoggerCallBacks logCallbacks,
110 uint8_t** outTemplate,
111 unsigned int* outTemplateSize,
112 ErrorCallbacks errorCallbacks) = 0;
113 virtual void FreeTemplate(const uint8_t* data, unsigned int size) = 0;
114 virtual void GetICSTemplateVersion(const uint8_t* data,
115 uint32_t size,
116 unsigned int* majorVersion,
117 unsigned int* minorVersion,
118 ErrorCallbacks errorCallbacks) = 0;
119 virtual void GetICSTemplateQuality(const uint8_t* data,
120 uint32_t size,
121 uint8_t* quality,
122 ErrorCallbacks errorCallbacks) = 0;
123 virtual void GetICSTemplatePosition(int* position,
124 const uint8_t* data,
125 uint32_t size,
126 ErrorCallbacks errorCallbacks) const = 0;
127 virtual void SetICSTemplatePosition(int position,
128 uint8_t* data,
129 uint32_t size,
130 ErrorCallbacks errorCallbacks) = 0;
131
132 virtual void ConvertICSToISO(const uint8_t* data,
133 size_t size,
134 unsigned int captureEquipmentID,
135 bool compliant,
136 unsigned int dpcm,
137 unsigned int width,
138 unsigned int height,
139 unsigned int fingerPosition,
140 unsigned int impressionType,
141 uint8_t* isoTemplate,
142 size_t* isoTemplateLength,
143 ErrorCallbacks errorCallbacks) = 0;
144 virtual void ConvertICSToANSI(const uint8_t* data,
145 size_t size,
146 unsigned int captureEquipmentID,
147 bool compliant,
148 unsigned int dpcm,
149 unsigned int width,
150 unsigned int height,
151 unsigned int fingerPosition,
152 unsigned int impressionType,
153 uint8_t* ansiTemplate,
154 size_t* ansiTemplateLength,
155 ErrorCallbacks errorCallbacks) = 0;
156 virtual size_t GetMaxISOTemplateSize() = 0;
157 virtual size_t GetMaxANSITemplateSize() = 0;
158 virtual void MatchICS(inno_ICSVerifyMatcher_params* params,
159 LoggerCallBacks logCallbacks,
160 ErrorCallbacks errorCallbacks) = 0;
161 virtual float MatchEmbedding(void* module,
162 const uint8_t* probeTemplate,
163 unsigned int probeTemplateSize,
164 const uint8_t* galleryTemplate,
165 unsigned int galleryTemplateSize,
166 LoggerCallBacks logCallbacks,
167 ErrorCallbacks errorCallbacks) = 0;
168
169 virtual void CalculatePresence(unsigned int width,
170 unsigned int height,
171 unsigned int imageResolution,
172 const uint8_t* rawImage,
173 uint8_t* presence,
174 ErrorCallbacks errorCallbacks) = 0;
175 virtual void CalculateNFIQ1(unsigned int width,
176 unsigned int height,
177 unsigned int imageResolution,
178 const uint8_t* rawImage,
179 uint8_t* NFIQ1,
180 ErrorCallbacks errorCallbacks) = 0;
181 virtual void CalculateNFIQ2(unsigned int width,
182 unsigned int height,
183 unsigned int imageResolution,
184 const uint8_t* rawImage,
185 uint8_t* NFIQ2,
186 ErrorCallbacks errorCallbacks) = 0;
187 virtual void CalculateImageQuality(unsigned int width,
188 unsigned int height,
189 unsigned int imageResolution,
190 const uint8_t* rawImage,
191 uint8_t* imageQuality,
192 ErrorCallbacks errorCallbacks) = 0;
193 virtual void CalculatePlacement(unsigned int width,
194 unsigned int height,
195 unsigned int imageResolution,
196 const uint8_t* rawImage,
197 uint8_t* placement,
198 ErrorCallbacks errorCallbacks) = 0;
199 virtual void GetImageIntensity(unsigned int width,
200 unsigned int height,
201 const uint8_t* rawImage,
202 uint8_t* intensity,
203 ErrorCallbacks errorCallbacks) = 0;
204 virtual inno_PrintDetector_result AlgoSegment(unsigned int height,
205 unsigned int width,
206 unsigned int resolution,
207 const uint8_t* data,
208 unsigned int maxRotation,
209 bool reduceNoise,
210 bool isNarrowFinger,
211 ErrorCallbacks errorCallbacks) = 0;
212 virtual inno_PrintDetector_result NeuralSegment(unsigned int height,
213 unsigned int width,
214 unsigned int resolution,
215 const uint8_t* data,
216 unsigned int maxRotation,
217 unsigned int confidenceThreshold,
218 bool isNarrowFinger,
219 ErrorCallbacks errorCallbacks) = 0;
220 virtual void GetMinutiae(const std::shared_ptr<Logger>& logger,
221 const uint8_t* tmpl,
222 unsigned int tmplSize,
223 inno_Minutia_out** minutiae,
224 size_t* minutiaeCount,
225 ErrorCallbacks errorCallbacks) = 0;
226 virtual void FreeMinutiae(inno_Minutia_out* minutiae) = 0;
227 virtual void GetCriticalPoints(const std::shared_ptr<Logger>& logger,
228 const uint8_t* tmpl,
229 unsigned int tmplSize,
230 inno_CriticalPoint_out** points,
231 size_t* minutiaeCount,
232 inno_AllocateCriticalPoints allocator,
233 void* container,
234 ErrorCallbacks errorCallbacks) = 0;
235 virtual void* IFingerCreateIdentificationModule(inno_Deleter* deleter, ErrorCallbacks errorCallbacks) = 0;
236 virtual void* IFingerCreateMatchingModule(inno_Deleter* deleter, ErrorCallbacks errorCallbacks) = 0;
237 virtual void IFingerCreateEmbedding(void* module,
238 const uint8_t* imageData,
239 inno::RawImage::Type imageType,
240 unsigned int width,
241 unsigned int height,
242 int dpi,
243 inno_AllocateData allocator,
244 void* container,
245 ErrorCallbacks errorCallbacks) const = 0;
246
247 virtual void IFingerGetTemplateVersion(uint32_t* ifingerVersion,
248 uint32_t* enrollmentVersion,
249 const uint8_t* tmpl,
250 unsigned int tmplSize,
251 ErrorCallbacks errorCallbacks) const = 0;
252
253 static constexpr uint8_t INNO_ANSI_TEMPLATE = 0;
254 static constexpr uint8_t INNO_ISO_TEMPLATE = 1;
255 static constexpr uint8_t INNO_ILO_SID_TEMPLATE = 2;
256 static constexpr uint8_t INNO_ISO_CC_TEMPLATE = 3;
257 static constexpr uint8_t INNO_ISO_TEMPLATE_V30 = 4;
258 static constexpr uint8_t INNO_ISO_NC_TEMPLATE = 5;
259 static constexpr uint8_t INNO_TT_UNKNOWN_TYPE = 6;
260
261 virtual void ConvertTemplates(uint8_t inputTemplateType,
262 const uint8_t* inputTemplate,
263 size_t inputTemplateSize,
264 uint8_t outputTemplateType,
265 inno_AllocateData allocator,
266 void* container,
267 ErrorCallbacks errorCallbacks) const = 0;
268
269 virtual void ConvertIsoToIsoCCTemplate(const uint8_t* inputTemplate,
270 size_t inputTemplateSize,
271 uint32_t maxMinutiae,
272 uint8_t primarySort,
273 uint8_t secondarySort,
274 inno_AllocateData allocator,
275 void* container,
276 ErrorCallbacks errorCallbacks) const = 0;
277
278 PrintExecutor() = default;
279 virtual ~PrintExecutor() = default;
280 PrintExecutor(const PrintExecutor&) = delete;
281 PrintExecutor(PrintExecutor&&) = delete;
282 PrintExecutor& operator=(const PrintExecutor&) = delete;
283 PrintExecutor& operator=(PrintExecutor&&) = delete;
284 };
285
286 extern "C"
287 {
288 INNO_ENROLLMENT_API void inno_local_ICSTemplate_free(const uint8_t* data, unsigned int size);
289 INNO_ENROLLMENT_API void inno_local_ICSExtractor_CreateFor(inno_ICSExtractor_params* params,
290 LoggerCallBacks logCallbacks,
291 uint8_t** outTemplate,
292 unsigned int* outTemplateSize,
293 ErrorCallbacks errorCallbacks);
294 INNO_ENROLLMENT_API void inno_local_ICSTemplate_GetVersion(const uint8_t* data,
295 uint32_t size,
296 unsigned int* majorVersion,
297 unsigned int* minorVersion,
298 ErrorCallbacks errorCallbacks);
299 INNO_ENROLLMENT_API void inno_local_ICSTemplate_GetQuality(const uint8_t* data,
300 uint32_t size,
301 uint8_t* quality,
302 ErrorCallbacks errorCallbacks);
303 INNO_ENROLLMENT_API void inno_local_ICSTemplate_GetPosition(int* position,
304 const uint8_t* data,
305 uint32_t size,
306 ErrorCallbacks errorCallbacks);
307 INNO_ENROLLMENT_API void inno_local_ICSTemplate_SetPosition(int position,
308 uint8_t* data,
309 uint32_t size,
310 ErrorCallbacks errorCallbacks);
311 INNO_ENROLLMENT_API void inno_local_ICSTemplate_ConvertToISO(const uint8_t* data,
312 size_t size,
313 unsigned int captureEquipmentID,
314 bool compliant,
315 unsigned int dpcm,
316 unsigned int width,
317 unsigned int height,
318 unsigned int fingerPosition,
319 unsigned int impressionType,
320 uint8_t* isoTemplate,
321 size_t* isoTemplateLength,
322 ErrorCallbacks errorCallbacks);
323 INNO_ENROLLMENT_API void inno_local_ICSTemplate_ConvertToANSI(const uint8_t* data,
324 size_t size,
325 unsigned int captureEquipmentID,
326 bool compliant,
327 unsigned int dpcm,
328 unsigned int width,
329 unsigned int height,
330 unsigned int fingerPosition,
331 unsigned int impressionType,
332 uint8_t* ansiTemplate,
333 size_t* ansiTemplateLength,
334 ErrorCallbacks errorCallbacks);
335 INNO_ENROLLMENT_API size_t inno_local_ICSTemplate_GetMaxISOTemplateSize();
336 INNO_ENROLLMENT_API size_t inno_local_ICSTemplate_GetMaxANSITemplateSize();
337 INNO_ENROLLMENT_API void inno_local_ICSVerifyMatcher_match(inno_ICSVerifyMatcher_params* params,
338 LoggerCallBacks logCallbacks,
339 ErrorCallbacks errorCallbacks);
340 INNO_ENROLLMENT_API float inno_local_EmbeddingVerifyMatcher_match(void* module,
341 const uint8_t* probeTemplate,
342 unsigned int probeTemplateSize,
343 const uint8_t* galleryTemplate,
344 unsigned int galleryTemplateSize,
345 LoggerCallBacks logCallbacks,
346 ErrorCallbacks errorCallbacks);
347 INNO_ENROLLMENT_API void inno_local_CalculatePresence(unsigned int width,
348 unsigned int height,
349 unsigned int imageResolution,
350 const uint8_t* rawImage,
351 uint8_t* presence,
352 ErrorCallbacks errorCallbacks);
353 INNO_ENROLLMENT_API void inno_local_CalculateNFIQ1(unsigned int width,
354 unsigned int height,
355 unsigned int imageResolution,
356 const uint8_t* rawImage,
357 uint8_t* NFIQ1,
358 ErrorCallbacks errorCallbacks);
359 INNO_ENROLLMENT_API void inno_local_CalculateNFIQ2(unsigned int width,
360 unsigned int height,
361 unsigned int imageResolution,
362 const uint8_t* rawImage,
363 uint8_t* NFIQ2,
364 ErrorCallbacks errorCallbacks);
365 INNO_ENROLLMENT_API void inno_local_CalculateImageQuality(unsigned int width,
366 unsigned int height,
367 unsigned int imageResolution,
368 const uint8_t* rawImage,
369 uint8_t* imageQuality,
370 ErrorCallbacks errorCallbacks);
371 INNO_ENROLLMENT_API void inno_local_CalculatePlacement(unsigned int width,
372 unsigned int height,
373 unsigned int imageResolution,
374 const uint8_t* rawImage,
375 uint8_t* placement,
376 ErrorCallbacks errorCallbacks);
377 INNO_ENROLLMENT_API void inno_local_GetImageIntensity(unsigned int width,
378 unsigned int height,
379 const uint8_t* rawImage,
380 uint8_t* intensity,
381 ErrorCallbacks errorCallbacks);
382 INNO_ENROLLMENT_API inno_PrintDetector_result
383 inno_local_PrintDetector_Algo_Segment(unsigned int height,
384 unsigned int width,
385 unsigned int resolution,
386 const uint8_t* data,
387 unsigned int maxRotation,
388 bool reduceNoise,
389 bool isNarrowFinger,
390 ErrorCallbacks errorCallbacks);
391 INNO_ENROLLMENT_API inno_PrintDetector_result
392 inno_local_PrintDetector_Neural_Segment(unsigned int height,
393 unsigned int width,
394 unsigned int resolution,
395 const uint8_t* data,
396 unsigned int maxRotation,
397 unsigned int confidenceThreshold,
398 bool isNarrowFinger,
399 ErrorCallbacks errorCallbacks);
400
401 INNO_ENROLLMENT_API void inno_local_GetMinutiae(LoggerCallBacks logCallbacks,
402 const uint8_t* tmpl,
403 unsigned int tmplSize,
404 inno_Minutia_out** minutiae,
405 size_t* minutiaeCount,
406 ErrorCallbacks errorCallbacks);
407 INNO_ENROLLMENT_API void inno_local_FreeMinutiae(inno_Minutia_out* minutiae);
408
409 INNO_ENROLLMENT_API void inno_local_GetCriticalPoints(LoggerCallBacks logCallbacks,
410 const uint8_t* tmpl,
411 unsigned int tmplSize,
412 inno_CriticalPoint_out** points,
413 size_t* minutiaeCount,
414 inno_AllocateCriticalPoints allocator,
415 void* container,
416 ErrorCallbacks errorCallbacks);
417 INNO_ENROLLMENT_API void* inno_local_IFingerCreateIdentificationModule(inno_Deleter* deleter,
418 ErrorCallbacks errorCallbacks);
419 INNO_ENROLLMENT_API void* inno_local_IFingerCreateMatchingModule(inno_Deleter* deleter,
420 ErrorCallbacks errorCallbacks);
421
422 INNO_ENROLLMENT_API void inno_local_IFingerCreateEmbedding(void* module,
423 const uint8_t* imageData,
424 inno::RawImage::Type imageType,
425 unsigned int width,
426 unsigned int height,
427 int dpi,
428 inno_AllocateData allocator,
429 void* container,
430 ErrorCallbacks errorCallbacks);
431
432 INNO_ENROLLMENT_API void inno_local_IFingerGetTemplateVersion(uint32_t* ifingerVersion,
433 uint32_t* enrollmentVersion,
434 const uint8_t* tmpl,
435 unsigned int tmplSize,
436 ErrorCallbacks errorCallbacks);
437 INNO_ENROLLMENT_API void inno_local_ConvertTemplates(uint8_t inputTemplateType,
438 const uint8_t* inputTemplate,
439 uint8_t outputTemplateType,
440 inno_AllocateData allocator,
441 void* container,
442 ErrorCallbacks errorCallbacks);
443 INNO_ENROLLMENT_API void inno_local_ConvertIsoToIsoCCTemplate(const uint8_t* inputTemplate,
444 uint32_t maxMinutiae,
445 uint8_t primarySort,
446 uint8_t secondarySort,
447 inno_AllocateData allocator,
448 void* container,
449 ErrorCallbacks errorCallbacks);
450 }
451
452 class LocalPrintExecutor : public PrintExecutor
453 {
454 public:
455 void Extract(inno_ICSExtractor_params* params,
456 LoggerCallBacks logCallbacks,
457 uint8_t** outTemplate,
458 unsigned int* outTemplateSize,
459 ErrorCallbacks errorCallbacks) final
460 {
461 inno_local_ICSExtractor_CreateFor(params, logCallbacks, outTemplate, outTemplateSize, errorCallbacks);
462 }
463 void FreeTemplate(const uint8_t* data, unsigned int size) final
464 {
465 inno_local_ICSTemplate_free(data, size);
466 }
467
468 void GetICSTemplateVersion(const uint8_t* data,
469 uint32_t size,
470 unsigned int* majorVersion,
471 unsigned int* minorVersion,
472 ErrorCallbacks errorCallbacks) final
473 {
474 inno_local_ICSTemplate_GetVersion(data, size, majorVersion, minorVersion, errorCallbacks);
475 }
476
477 void GetICSTemplateQuality(const uint8_t* data,
478 uint32_t size,
479 uint8_t* quality,
480 ErrorCallbacks errorCallbacks) final
481 {
482 inno_local_ICSTemplate_GetQuality(data, size, quality, errorCallbacks);
483 }
484
485 void GetICSTemplatePosition(int* position,
486 const uint8_t* data,
487 uint32_t size,
488 ErrorCallbacks errorCallbacks) const final
489 {
490 inno_local_ICSTemplate_GetPosition(position, data, size, errorCallbacks);
491 }
492
493 void SetICSTemplatePosition(int position, uint8_t* data, uint32_t size, ErrorCallbacks errorCallbacks) final
494 {
495 inno_local_ICSTemplate_SetPosition(position, data, size, errorCallbacks);
496 }
497
498 void GetMinutiae(const std::shared_ptr<Logger>& logger,
499 const uint8_t* tmpl,
500 unsigned int tmplSize,
501 inno_Minutia_out** minutiae,
502 size_t* minutiaeCount,
503 ErrorCallbacks errorCallbacks) final
504 {
505 const CallbackLogger slog(logger);
506 inno_local_GetMinutiae(slog.GetCallbacks(), tmpl, tmplSize, minutiae, minutiaeCount, errorCallbacks);
507 }
508
509 void FreeMinutiae(inno_Minutia_out* minutiae) final
510 {
511 inno_local_FreeMinutiae(minutiae);
512 }
513
514 void GetCriticalPoints(const std::shared_ptr<Logger>& logger,
515 const uint8_t* tmpl,
516 unsigned int tmplSize,
517 inno_CriticalPoint_out** points,
518 size_t* minutiaeCount,
519 inno_AllocateCriticalPoints allocator,
520 void* container,
521 ErrorCallbacks errorCallbacks) final
522 {
523 const CallbackLogger slog(logger);
524 inno_local_GetCriticalPoints(
525 slog.GetCallbacks(), tmpl, tmplSize, points, minutiaeCount, allocator, container, errorCallbacks);
526 }
527
528 void ConvertICSToISO(const uint8_t* data,
529 size_t size,
530 unsigned int captureEquipmentID,
531 bool compliant,
532 unsigned int dpcm,
533 unsigned int width,
534 unsigned int height,
535 unsigned int fingerPosition,
536 unsigned int impressionType,
537 uint8_t* isoTemplate,
538 size_t* isoTemplateLength,
539 ErrorCallbacks errorCallbacks) final
540 {
541 inno_local_ICSTemplate_ConvertToISO(data,
542 size,
543 captureEquipmentID,
544 compliant,
545 dpcm,
546 width,
547 height,
548 fingerPosition,
549 impressionType,
550 isoTemplate,
551 isoTemplateLength,
552 errorCallbacks);
553 }
554 void ConvertICSToANSI(const uint8_t* data,
555 size_t size,
556 unsigned int captureEquipmentID,
557 bool compliant,
558 unsigned int dpcm,
559 unsigned int width,
560 unsigned int height,
561 unsigned int fingerPosition,
562 unsigned int impressionType,
563 uint8_t* ansiTemplate,
564 size_t* ansiTemplateLength,
565 ErrorCallbacks errorCallbacks) final
566 {
567 inno_local_ICSTemplate_ConvertToANSI(data,
568 size,
569 captureEquipmentID,
570 compliant,
571 dpcm,
572 width,
573 height,
574 fingerPosition,
575 impressionType,
576 ansiTemplate,
577 ansiTemplateLength,
578 errorCallbacks);
579 }
580 size_t GetMaxISOTemplateSize() final
581 {
582 return inno_local_ICSTemplate_GetMaxISOTemplateSize();
583 }
584 size_t GetMaxANSITemplateSize() final
585 {
586 return inno_local_ICSTemplate_GetMaxANSITemplateSize();
587 }
588 void MatchICS(inno_ICSVerifyMatcher_params* params,
589 LoggerCallBacks logCallbacks,
590 ErrorCallbacks errorCallbacks) final
591 {
592 inno_local_ICSVerifyMatcher_match(params, logCallbacks, errorCallbacks);
593 }
594 float MatchEmbedding(void* module,
595 const uint8_t* probeTemplate,
596 unsigned int probeTemplateSize,
597 const uint8_t* galleryTemplate,
598 unsigned int galleryTemplateSize,
599 LoggerCallBacks logCallbacks,
600 ErrorCallbacks errorCallbacks) final
601 {
602 return inno_local_EmbeddingVerifyMatcher_match(module,
603 probeTemplate,
604 probeTemplateSize,
605 galleryTemplate,
606 galleryTemplateSize,
607 logCallbacks,
608 errorCallbacks);
609 }
610 void CalculatePresence(unsigned int width,
611 unsigned int height,
612 unsigned int imageResolution,
613 const uint8_t* rawImage,
614 uint8_t* presence,
615 ErrorCallbacks errorCallbacks) final
616 {
617 inno_local_CalculatePresence(width, height, imageResolution, rawImage, presence, errorCallbacks);
618 }
619 void CalculateNFIQ1(unsigned int width,
620 unsigned int height,
621 unsigned int imageResolution,
622 const uint8_t* rawImage,
623 uint8_t* NFIQ1,
624 ErrorCallbacks errorCallbacks) final
625 {
626 inno_local_CalculateNFIQ1(width, height, imageResolution, rawImage, NFIQ1, errorCallbacks);
627 }
628 void CalculateNFIQ2(unsigned int width,
629 unsigned int height,
630 unsigned int imageResolution,
631 const uint8_t* rawImage,
632 uint8_t* NFIQ2,
633 ErrorCallbacks errorCallbacks) final
634 {
635 inno_local_CalculateNFIQ2(width, height, imageResolution, rawImage, NFIQ2, errorCallbacks);
636 }
637 void CalculateImageQuality(unsigned int width,
638 unsigned int height,
639 unsigned int imageResolution,
640 const uint8_t* rawImage,
641 uint8_t* imageQuality,
642 ErrorCallbacks errorCallbacks) final
643 {
644 inno_local_CalculateImageQuality(width, height, imageResolution, rawImage, imageQuality, errorCallbacks);
645 }
646 void CalculatePlacement(unsigned int width,
647 unsigned int height,
648 unsigned int imageResolution,
649 const uint8_t* rawImage,
650 uint8_t* placement,
651 ErrorCallbacks errorCallbacks) final
652 {
653 inno_local_CalculatePlacement(width, height, imageResolution, rawImage, placement, errorCallbacks);
654 }
655 void GetImageIntensity(unsigned int width,
656 unsigned int height,
657 const uint8_t* rawImage,
658 uint8_t* intensity,
659 ErrorCallbacks errorCallbacks) final
660 {
661 inno_local_GetImageIntensity(width, height, rawImage, intensity, errorCallbacks);
662 }
663 inno_PrintDetector_result AlgoSegment(unsigned int height,
664 unsigned int width,
665 unsigned int resolution,
666 const uint8_t* data,
667 unsigned int maxRotation,
668 bool reduceNoise,
669 bool isNarrowFinger,
670 ErrorCallbacks errorCallbacks) final
671 {
672 return inno_local_PrintDetector_Algo_Segment(
673 height, width, resolution, data, maxRotation, reduceNoise, isNarrowFinger, errorCallbacks);
674 }
675 inno_PrintDetector_result NeuralSegment(unsigned int height,
676 unsigned int width,
677 unsigned int resolution,
678 const uint8_t* data,
679 unsigned int maxRotation,
680 unsigned int confidenceThreshold,
681 bool isNarrowFinger,
682 ErrorCallbacks errorCallbacks) final
683 {
684 return inno_local_PrintDetector_Neural_Segment(
685 height, width, resolution, data, maxRotation, confidenceThreshold, isNarrowFinger, errorCallbacks);
686 }
687
688 void* IFingerCreateIdentificationModule(inno_Deleter* deleter, ErrorCallbacks errorCallbacks) override
689 {
690 return inno_local_IFingerCreateIdentificationModule(deleter, errorCallbacks);
691 }
692
693 void* IFingerCreateMatchingModule(inno_Deleter* deleter, ErrorCallbacks errorCallbacks) override
694 {
695 return inno_local_IFingerCreateMatchingModule(deleter, errorCallbacks);
696 }
697
698 void IFingerCreateEmbedding(void* module,
699 const uint8_t* imageData,
700 inno::RawImage::Type imageType,
701 unsigned int width,
702 unsigned int height,
703 int dpi,
704 inno_AllocateData allocator,
705 void* container,
706 ErrorCallbacks errorCallbacks) const override
707 {
708 inno_local_IFingerCreateEmbedding(
709 module, imageData, imageType, width, height, dpi, allocator, container, errorCallbacks);
710 }
711
712 void IFingerGetTemplateVersion(uint32_t* ifingerVersion,
713 uint32_t* enrollmentVersion,
714 const uint8_t* tmpl,
715 unsigned int tmplSize,
716 ErrorCallbacks errorCallbacks) const override
717 {
718 inno_local_IFingerGetTemplateVersion(ifingerVersion, enrollmentVersion, tmpl, tmplSize, errorCallbacks);
719 }
720
721 void ConvertTemplates(uint8_t inputTemplateType,
722 const uint8_t* inputTemplate,
723 size_t /* inputTemplateSize */,
724 uint8_t outputTemplateType,
725 inno_AllocateData allocator,
726 void* container,
727 ErrorCallbacks errorCallbacks) const final
728 {
729 inno_local_ConvertTemplates(
730 inputTemplateType, inputTemplate, outputTemplateType, allocator, container, errorCallbacks);
731 }
732
733 void ConvertIsoToIsoCCTemplate(const uint8_t* inputTemplate,
734 size_t /* inputTemplateSize */,
735 uint32_t maxMinutiae,
736 uint8_t primarySort,
737 uint8_t secondarySort,
738 inno_AllocateData allocator,
739 void* container,
740 ErrorCallbacks errorCallbacks) const final
741 {
742 inno_local_ConvertIsoToIsoCCTemplate(
743 inputTemplate, maxMinutiae, primarySort, secondarySort, allocator, container, errorCallbacks);
744 }
745
746 LocalPrintExecutor() = default;
747 virtual ~LocalPrintExecutor() = default;
748 LocalPrintExecutor(const LocalPrintExecutor&) = delete;
749 LocalPrintExecutor(LocalPrintExecutor&&) = delete;
750 LocalPrintExecutor& operator=(const LocalPrintExecutor&) = delete;
751 LocalPrintExecutor& operator=(LocalPrintExecutor&&) = delete;
752 };
753
754 extern "C"
755 {
756 INNO_ENROLLMENT_API void* inno_grpc_print_Create(const char* endpoint);
757 INNO_ENROLLMENT_API void inno_grpc_print_Delete(void* grpc);
758 INNO_ENROLLMENT_API void inno_grpc_ICSTemplate_free(const uint8_t* data, unsigned int size);
759 INNO_ENROLLMENT_API void inno_grpc_ICSExtractor_CreateFor(void* grpc,
760 inno_ICSExtractor_params* params,
761 LoggerCallBacks logCallbacks,
762 uint8_t** outTemplate,
763 unsigned int* outTemplateSize,
764 ErrorCallbacks errorCallbacks);
765 INNO_ENROLLMENT_API void inno_grpc_ICSTemplate_GetVersion(void* grpc,
766 const uint8_t* data,
767 uint32_t size,
768 unsigned int* majorVersion,
769 unsigned int* minorVersion,
770 ErrorCallbacks errorCallbacks);
771 INNO_ENROLLMENT_API void inno_grpc_ICSTemplate_GetQuality(void* grpc,
772 const uint8_t* data,
773 uint32_t size,
774 uint8_t* quality,
775 ErrorCallbacks errorCallbacks);
776 INNO_ENROLLMENT_API void inno_grpc_ICSTemplate_GetPosition(void* grpc,
777 const uint8_t* data,
778 uint32_t size,
779 int* position,
780 ErrorCallbacks errorCallbacks);
781 INNO_ENROLLMENT_API void inno_grpc_ICSTemplate_ConvertToISO(void* grpc,
782 const uint8_t* data,
783 size_t size,
784 unsigned int captureEquipmentID,
785 bool compliant,
786 unsigned int dpcm,
787 unsigned int width,
788 unsigned int height,
789 unsigned int fingerPosition,
790 unsigned int impressionType,
791 uint8_t* isoTemplate,
792 size_t* isoTemplateLength,
793 ErrorCallbacks errorCallbacks);
794 INNO_ENROLLMENT_API void inno_grpc_ICSTemplate_ConvertToANSI(void* grpc,
795 const uint8_t* data,
796 size_t size,
797 unsigned int captureEquipmentID,
798 bool compliant,
799 unsigned int dpcm,
800 unsigned int width,
801 unsigned int height,
802 unsigned int fingerPosition,
803 unsigned int impressionType,
804 uint8_t* ansiTemplate,
805 size_t* ansiTemplateLength,
806 ErrorCallbacks errorCallbacks);
807 INNO_ENROLLMENT_API size_t inno_grpc_ICSTemplate_GetMaxISOTemplateSize();
808 INNO_ENROLLMENT_API size_t inno_grpc_ICSTemplate_GetMaxANSITemplateSize();
809 INNO_ENROLLMENT_API void inno_grpc_ICSVerifyMatcher_match(void* grpc,
810 inno_ICSVerifyMatcher_params* params,
811 LoggerCallBacks logCallbacks,
812 ErrorCallbacks errorCallbacks);
813 INNO_ENROLLMENT_API float inno_grpc_EmbeddingVerifyMatcher_match(void* grpc,
814 void* module,
815 const uint8_t* probeTemplate,
816 unsigned int probeTemplateSize,
817 const uint8_t* galleryTemplate,
818 unsigned int galleryTemplateSize,
819 LoggerCallBacks logCallbacks,
820 ErrorCallbacks errorCallbacks);
821
822 INNO_ENROLLMENT_API void inno_grpc_CalculatePresence(void* grpc,
823 unsigned int width,
824 unsigned int height,
825 unsigned int imageResolution,
826 const uint8_t* rawImage,
827 uint8_t* presence,
828 ErrorCallbacks errorCallbacks);
829 INNO_ENROLLMENT_API void inno_grpc_CalculateNFIQ1(void* grpc,
830 unsigned int width,
831 unsigned int height,
832 unsigned int imageResolution,
833 const uint8_t* rawImage,
834 uint8_t* NFIQ1,
835 ErrorCallbacks errorCallbacks);
836 INNO_ENROLLMENT_API void inno_grpc_CalculateNFIQ2(void* grpc,
837 unsigned int width,
838 unsigned int height,
839 unsigned int imageResolution,
840 const uint8_t* rawImage,
841 uint8_t* NFIQ2,
842 ErrorCallbacks errorCallbacks);
843 INNO_ENROLLMENT_API void inno_grpc_CalculateImageQuality(void* grpc,
844 unsigned int width,
845 unsigned int height,
846 unsigned int imageResolution,
847 const uint8_t* rawImage,
848 uint8_t* imageQuality,
849 ErrorCallbacks errorCallbacks);
850 INNO_ENROLLMENT_API void inno_grpc_CalculatePlacement(void* grpc,
851 unsigned int width,
852 unsigned int height,
853 unsigned int imageResolution,
854 const uint8_t* rawImage,
855 uint8_t* placement,
856 ErrorCallbacks errorCallbacks);
857 INNO_ENROLLMENT_API void inno_grpc_GetImageIntensity(void* grpc,
858 unsigned int width,
859 unsigned int height,
860 const uint8_t* rawImage,
861 uint8_t* intensity,
862 ErrorCallbacks errorCallbacks);
863 INNO_ENROLLMENT_API inno_PrintDetector_result
864 inno_grpc_PrintDetector_Algo_Segment(void* grpc,
865 unsigned int height,
866 unsigned int width,
867 unsigned int resolution,
868 const uint8_t* data,
869 unsigned int maxRotation,
870 bool reduceNoise,
871 bool isNarrowFinger,
872 ErrorCallbacks errorCallbacks);
873 INNO_ENROLLMENT_API inno_PrintDetector_result
874 inno_grpc_PrintDetector_Neural_Segment(void* grpc,
875 unsigned int height,
876 unsigned int width,
877 unsigned int resolution,
878 const uint8_t* data,
879 unsigned int maxRotation,
880 unsigned int confidenceThreshold,
881 bool isNarrowFinger,
882 ErrorCallbacks errorCallbacks);
883
884 INNO_ENROLLMENT_API void inno_grpc_GetMinutiae(void* grpc,
885 LoggerCallBacks logCallbacks,
886 const uint8_t* tmpl,
887 unsigned int tmplSize,
888 inno_Minutia_out** minutiae,
889 size_t* minutiaeCount,
890 ErrorCallbacks errorCallbacks);
891 INNO_ENROLLMENT_API void inno_grpc_FreeMinutiae(inno_Minutia_out* minutiae);
892 INNO_ENROLLMENT_API int inno_grpc_GetCriticalPoints(void* grpc,
893 LoggerCallBacks logCallbacks,
894 const uint8_t* tmpl,
895 unsigned int tmplSize,
896 inno_CriticalPoint_out** points,
897 size_t* minutiaeCount,
898 inno_AllocateCriticalPoints allocator,
899 void* container,
900 ErrorCallbacks errorCallbacks);
901 INNO_ENROLLMENT_API void* inno_grpc_IFingerCreateIdentificationModule(void* grpc,
902 inno_Deleter* deleter,
903 ErrorCallbacks errorCallbacks);
904 INNO_ENROLLMENT_API void* inno_grpc_IFingerCreateMatchingModule(void* grpc,
905 inno_Deleter* deleter,
906 ErrorCallbacks errorCallbacks);
907 INNO_ENROLLMENT_API void inno_grpc_IFingerCreateEmbedding(void* grpc,
908 void* module,
909 const uint8_t* imageData,
910 inno::RawImage::Type imageType,
911 unsigned int width,
912 unsigned int height,
913 int dpi,
914 inno_AllocateData allocator,
915 void* container,
916 ErrorCallbacks errorCallbacks);
917
918 INNO_ENROLLMENT_API void inno_grpc_IFingerGetTemplateVersion(void* grpc,
919 uint32_t* ifingerVersion,
920 uint32_t* enrollmentVersion,
921 const uint8_t* tmpl,
922 unsigned int tmplSize,
923 ErrorCallbacks errorCallbacks);
924 INNO_ENROLLMENT_API void inno_grpc_ConvertTemplates(void* grpc,
925 uint8_t inputTemplateType,
926 const uint8_t* inputTemplate,
927 size_t inputTemplateSize,
928 uint8_t outputTemplateType,
929 inno_AllocateData allocator,
930 void* container,
931 ErrorCallbacks errorCallbacks);
932
933 INNO_ENROLLMENT_API void inno_grpc_ConvertIsoToIsoCCTemplate(void* grpc,
934 const uint8_t* inputTemplate,
935 size_t inputTemplateSize,
936 uint32_t maxMinutiae,
937 uint8_t primarySort,
938 uint8_t secondarySort,
939 inno_AllocateData allocator,
940 void* container,
941 ErrorCallbacks errorCallbacks);
942 }
943
944 class GrpcPrintExecutor : public PrintExecutor
945 {
946 public:
947 void Extract(inno_ICSExtractor_params* params,
948 LoggerCallBacks logCallbacks,
949 uint8_t** outTemplate,
950 unsigned int* outTemplateSize,
951 ErrorCallbacks errorCallbacks) final
952 {
953 inno_grpc_ICSExtractor_CreateFor(
954 grpc.get(), params, logCallbacks, outTemplate, outTemplateSize, errorCallbacks);
955 }
956 void FreeTemplate(const uint8_t* data, unsigned int size) final
957 {
958 inno_grpc_ICSTemplate_free(data, size);
959 }
960
961 void GetICSTemplateVersion(const uint8_t* data,
962 uint32_t size,
963 unsigned int* majorVersion,
964 unsigned int* minorVersion,
965 ErrorCallbacks errorCallbacks) final
966 {
967 inno_grpc_ICSTemplate_GetVersion(grpc.get(), data, size, majorVersion, minorVersion, errorCallbacks);
968 }
969
970 void SetICSTemplatePosition(int position, uint8_t* data, uint32_t size, ErrorCallbacks errorCallbacks) final
971 {
972 inno_local_ICSTemplate_SetPosition(position, data, size, errorCallbacks);
973 }
974
975 void GetICSTemplateQuality(const uint8_t* data,
976 uint32_t size,
977 uint8_t* quality,
978 ErrorCallbacks errorCallbacks) final
979 {
980 inno_grpc_ICSTemplate_GetQuality(grpc.get(), data, size, quality, errorCallbacks);
981 }
982
983 void GetICSTemplatePosition(int* position,
984 const uint8_t* data,
985 uint32_t size,
986 ErrorCallbacks errorCallbacks) const final
987 {
988 inno_grpc_ICSTemplate_GetPosition(grpc.get(), data, size, position, errorCallbacks);
989 }
990
991 void GetMinutiae(const std::shared_ptr<Logger>& logger,
992 const uint8_t* tmpl,
993 unsigned int tmplSize,
994 inno_Minutia_out** minutiae,
995 size_t* minutiaeCount,
996 ErrorCallbacks errorCallbacks) final
997 {
998 const CallbackLogger slog(logger);
999 inno_grpc_GetMinutiae(
1000 grpc.get(), slog.GetCallbacks(), tmpl, tmplSize, minutiae, minutiaeCount, errorCallbacks);
1001 }
1002
1003 void FreeMinutiae(inno_Minutia_out* minutiae) final
1004 {
1005 inno_grpc_FreeMinutiae(minutiae);
1006 }
1007
1008 void GetCriticalPoints(const std::shared_ptr<Logger>& logger,
1009 const uint8_t* tmpl,
1010 unsigned int tmplSize,
1011 inno_CriticalPoint_out** points,
1012 size_t* minutiaeCount,
1013 inno_AllocateCriticalPoints allocator,
1014 void* container,
1015 ErrorCallbacks errorCallbacks) final
1016 {
1017 const CallbackLogger slog(logger);
1018 inno_grpc_GetCriticalPoints(grpc.get(),
1019 slog.GetCallbacks(),
1020 tmpl,
1021 tmplSize,
1022 points,
1023 minutiaeCount,
1024 allocator,
1025 container,
1026 errorCallbacks);
1027 }
1028
1029 void ConvertICSToISO(const uint8_t* data,
1030 size_t size,
1031 unsigned int captureEquipmentID,
1032 bool compliant,
1033 unsigned int dpcm,
1034 unsigned int width,
1035 unsigned int height,
1036 unsigned int fingerPosition,
1037 unsigned int impressionType,
1038 uint8_t* isoTemplate,
1039 size_t* isoTemplateLength,
1040 ErrorCallbacks errorCallbacks) final
1041 {
1042 inno_grpc_ICSTemplate_ConvertToISO(grpc.get(),
1043 data,
1044 size,
1045 captureEquipmentID,
1046 compliant,
1047 dpcm,
1048 width,
1049 height,
1050 fingerPosition,
1051 impressionType,
1052 isoTemplate,
1053 isoTemplateLength,
1054 errorCallbacks);
1055 }
1056 void ConvertICSToANSI(const uint8_t* data,
1057 size_t size,
1058 unsigned int captureEquipmentID,
1059 bool compliant,
1060 unsigned int dpcm,
1061 unsigned int width,
1062 unsigned int height,
1063 unsigned int fingerPosition,
1064 unsigned int impressionType,
1065 uint8_t* ansiTemplate,
1066 size_t* ansiTemplateLength,
1067 ErrorCallbacks errorCallbacks) final
1068 {
1069 inno_grpc_ICSTemplate_ConvertToANSI(grpc.get(),
1070 data,
1071 size,
1072 captureEquipmentID,
1073 compliant,
1074 dpcm,
1075 width,
1076 height,
1077 fingerPosition,
1078 impressionType,
1079 ansiTemplate,
1080 ansiTemplateLength,
1081 errorCallbacks);
1082 }
1083 size_t GetMaxISOTemplateSize() final
1084 {
1085 return inno_grpc_ICSTemplate_GetMaxISOTemplateSize();
1086 }
1087 size_t GetMaxANSITemplateSize() final
1088 {
1089 return inno_grpc_ICSTemplate_GetMaxANSITemplateSize();
1090 }
1091 void MatchICS(inno_ICSVerifyMatcher_params* params,
1092 LoggerCallBacks logCallbacks,
1093 ErrorCallbacks errorCallbacks) final
1094 {
1095 inno_grpc_ICSVerifyMatcher_match(grpc.get(), params, logCallbacks, errorCallbacks);
1096 }
1097 float MatchEmbedding(void* module,
1098 const uint8_t* probeTemplate,
1099 unsigned int probeTemplateSize,
1100 const uint8_t* galleryTemplate,
1101 unsigned int galleryTemplateSize,
1102 LoggerCallBacks logCallbacks,
1103 ErrorCallbacks errorCallbacks) final
1104 {
1105 return inno_grpc_EmbeddingVerifyMatcher_match(grpc.get(),
1106 module,
1107 probeTemplate,
1108 probeTemplateSize,
1109 galleryTemplate,
1110 galleryTemplateSize,
1111 logCallbacks,
1112 errorCallbacks);
1113 }
1114 void CalculatePresence(unsigned int width,
1115 unsigned int height,
1116 unsigned int imageResolution,
1117 const uint8_t* rawImage,
1118 uint8_t* presence,
1119 ErrorCallbacks errorCallbacks) final
1120 {
1121 inno_grpc_CalculatePresence(grpc.get(), width, height, imageResolution, rawImage, presence, errorCallbacks);
1122 }
1123 void CalculateNFIQ1(unsigned int width,
1124 unsigned int height,
1125 unsigned int imageResolution,
1126 const uint8_t* rawImage,
1127 uint8_t* NFIQ1,
1128 ErrorCallbacks errorCallbacks) final
1129 {
1130 inno_grpc_CalculateNFIQ1(grpc.get(), width, height, imageResolution, rawImage, NFIQ1, errorCallbacks);
1131 }
1132 void CalculateNFIQ2(unsigned int width,
1133 unsigned int height,
1134 unsigned int imageResolution,
1135 const uint8_t* rawImage,
1136 uint8_t* NFIQ2,
1137 ErrorCallbacks errorCallbacks) final
1138 {
1139 inno_grpc_CalculateNFIQ2(grpc.get(), width, height, imageResolution, rawImage, NFIQ2, errorCallbacks);
1140 }
1141 void CalculateImageQuality(unsigned int width,
1142 unsigned int height,
1143 unsigned int imageResolution,
1144 const uint8_t* rawImage,
1145 uint8_t* imageQuality,
1146 ErrorCallbacks errorCallbacks) final
1147 {
1148 inno_grpc_CalculateImageQuality(
1149 grpc.get(), width, height, imageResolution, rawImage, imageQuality, errorCallbacks);
1150 }
1151 void CalculatePlacement(unsigned int width,
1152 unsigned int height,
1153 unsigned int imageResolution,
1154 const uint8_t* rawImage,
1155 uint8_t* placement,
1156 ErrorCallbacks errorCallbacks) final
1157 {
1158 inno_grpc_CalculatePlacement(
1159 grpc.get(), width, height, imageResolution, rawImage, placement, errorCallbacks);
1160 }
1161 void GetImageIntensity(unsigned int width,
1162 unsigned int height,
1163 const uint8_t* rawImage,
1164 uint8_t* intensity,
1165 ErrorCallbacks errorCallbacks) final
1166 {
1167 inno_grpc_GetImageIntensity(grpc.get(), width, height, rawImage, intensity, errorCallbacks);
1168 }
1169 inno_PrintDetector_result AlgoSegment(unsigned int height,
1170 unsigned int width,
1171 unsigned int resolution,
1172 const uint8_t* data,
1173 unsigned int maxRotation,
1174 bool reduceNoise,
1175 bool isNarrowFinger,
1176 ErrorCallbacks errorCallbacks) final
1177 {
1178 return inno_grpc_PrintDetector_Algo_Segment(
1179 grpc.get(), height, width, resolution, data, maxRotation, reduceNoise, isNarrowFinger, errorCallbacks);
1180 }
1181 inno_PrintDetector_result NeuralSegment(unsigned int height,
1182 unsigned int width,
1183 unsigned int resolution,
1184 const uint8_t* data,
1185 unsigned int maxRotation,
1186 unsigned int confidenceThreshold,
1187 bool isNarrowFinger,
1188 ErrorCallbacks errorCallbacks) final
1189 {
1190 return inno_grpc_PrintDetector_Neural_Segment(grpc.get(),
1191 height,
1192 width,
1193 resolution,
1194 data,
1195 maxRotation,
1196 confidenceThreshold,
1197 isNarrowFinger,
1198 errorCallbacks);
1199 }
1200
1201 void* IFingerCreateIdentificationModule(inno_Deleter* deleter, ErrorCallbacks errorCallbacks) override
1202 {
1203 return inno_grpc_IFingerCreateIdentificationModule(grpc.get(), deleter, errorCallbacks);
1204 }
1205
1206 void* IFingerCreateMatchingModule(inno_Deleter* deleter, ErrorCallbacks errorCallbacks) override
1207 {
1208 return inno_grpc_IFingerCreateMatchingModule(grpc.get(), deleter, errorCallbacks);
1209 }
1210
1211 void IFingerCreateEmbedding(void* module,
1212 const uint8_t* imageData,
1213 inno::RawImage::Type imageType,
1214 unsigned int width,
1215 unsigned int height,
1216 int dpi,
1217 inno_AllocateData allocator,
1218 void* container,
1219 ErrorCallbacks errorCallbacks) const override
1220 {
1221 inno_grpc_IFingerCreateEmbedding(
1222 grpc.get(), module, imageData, imageType, width, height, dpi, allocator, container, errorCallbacks);
1223 }
1224
1225 void IFingerGetTemplateVersion(uint32_t* ifingerVersion,
1226 uint32_t* enrollmentVersion,
1227 const uint8_t* tmpl,
1228 unsigned int tmplSize,
1229 ErrorCallbacks errorCallbacks) const override
1230 {
1231 inno_grpc_IFingerGetTemplateVersion(
1232 grpc.get(), ifingerVersion, enrollmentVersion, tmpl, tmplSize, errorCallbacks);
1233 }
1234
1235 void ConvertTemplates(uint8_t inputTemplateType,
1236 const uint8_t* inputTemplate,
1237 size_t inputTemplateSize,
1238 uint8_t outputTemplateType,
1239 inno_AllocateData allocator,
1240 void* container,
1241 ErrorCallbacks errorCallbacks) const final
1242 {
1243 inno_grpc_ConvertTemplates(grpc.get(),
1244 inputTemplateType,
1245 inputTemplate,
1246 inputTemplateSize,
1247 outputTemplateType,
1248 allocator,
1249 container,
1250 errorCallbacks);
1251 }
1252
1253 void ConvertIsoToIsoCCTemplate(const uint8_t* inputTemplate,
1254 size_t inputTemplateSize,
1255 uint32_t maxMinutiae,
1256 uint8_t primarySort,
1257 uint8_t secondarySort,
1258 inno_AllocateData allocator,
1259 void* container,
1260 ErrorCallbacks errorCallbacks) const final
1261 {
1262 inno_grpc_ConvertIsoToIsoCCTemplate(grpc.get(),
1263 inputTemplate,
1264 inputTemplateSize,
1265 maxMinutiae,
1266 primarySort,
1267 secondarySort,
1268 allocator,
1269 container,
1270 errorCallbacks);
1271 }
1272
1278 explicit GrpcPrintExecutor(const std::string& endPoint)
1279 : grpc(inno_grpc_print_Create(endPoint.c_str()), inno_grpc_print_Delete)
1280 {
1281 }
1282
1283 GrpcPrintExecutor() = delete;
1284 virtual ~GrpcPrintExecutor() = default;
1285 GrpcPrintExecutor(const GrpcPrintExecutor&) = delete;
1286 GrpcPrintExecutor(GrpcPrintExecutor&&) = delete;
1287 GrpcPrintExecutor& operator=(const GrpcPrintExecutor&) = delete;
1288 GrpcPrintExecutor& operator=(GrpcPrintExecutor&&) = delete;
1289
1290 private:
1291 std::unique_ptr<void, void (*)(void*)> grpc;
1292 };
1293
1300 class GlobalPrintExecutor
1301 {
1302 public:
1307 static std::shared_ptr<PrintExecutor> Get()
1308 {
1309 return GlobalPrintExecutor::Instance().GetInternal();
1310 }
1311
1317 static void Set(std::shared_ptr<PrintExecutor> executor)
1318 {
1319 if (executor == nullptr)
1320 {
1321 throw NullArgumentException("executor can not be null");
1322 }
1323
1324 GlobalPrintExecutor::Instance().SetInternal(std::move(executor));
1325 }
1326
1327 GlobalPrintExecutor() = delete;
1328 virtual ~GlobalPrintExecutor() = default;
1331 GlobalPrintExecutor& operator=(const GlobalPrintExecutor&) = delete;
1332 GlobalPrintExecutor& operator=(GlobalPrintExecutor&&) = delete;
1333
1334 private:
1335 std::shared_ptr<PrintExecutor> pe;
1336 std::mutex peMux;
1337
1338 std::shared_ptr<PrintExecutor> GetInternal()
1339 {
1340 const std::scoped_lock lock(peMux);
1341 return pe;
1342 }
1343
1344 static GlobalPrintExecutor& Instance()
1345 {
1346 static GlobalPrintExecutor e(std::make_shared<LocalPrintExecutor>());
1347 return e;
1348 }
1349
1350 void SetInternal(std::shared_ptr<PrintExecutor> executor)
1351 {
1352 const std::scoped_lock lock(peMux);
1353 pe = std::move(executor);
1354 }
1355
1356 explicit GlobalPrintExecutor(std::shared_ptr<PrintExecutor> e)
1357 : pe(std::move(e))
1358 {
1359 }
1360 };
1361} // namespace inno
Holds instance of PrintExecutor.
Definition PrintExecutor.h:1300
static std::shared_ptr< PrintExecutor > Get()
Provides current executor.
Definition PrintExecutor.h:1306
static void Set(std::shared_ptr< PrintExecutor > executor)
Sets new global executor.
Definition PrintExecutor.h:1316
Null argument is not allowed.
Definition EnrollmentException.h:156
LoggerCallBacks contains logger handle and function pointers as callbacks.
Definition Logger.h:137