From 5ab2b5bc536c20956e74a295d5f8e5fb3947f2d9 Mon Sep 17 00:00:00 2001 From: Josh Klontz Date: Thu, 12 Jun 2014 10:19:08 -0400 Subject: [PATCH] multi-thread br-enroll --- app/br-enroll/br-enroll.cpp | 2 +- app/br-print/br-print.cpp | 2 +- app/br-search/br-search.cpp | 2 +- app/br-select/br-select.cpp | 2 +- openbr/universal_template.cpp | 19 +++++++++++++++---- openbr/universal_template.h | 2 +- 6 files changed, 20 insertions(+), 9 deletions(-) diff --git a/app/br-enroll/br-enroll.cpp b/app/br-enroll/br-enroll.cpp index 89bf072..7ca420f 100644 --- a/app/br-enroll/br-enroll.cpp +++ b/app/br-enroll/br-enroll.cpp @@ -89,7 +89,7 @@ int main(int argc, char *argv[]) Globals->quiet = true; Globals->enrollAll = true; algorithm = Transform::fromAlgorithm("FaceRecognition"); - br_iterate_utemplates_file(stdin, enroll_utemplate, NULL); + br_iterate_utemplates_file(stdin, enroll_utemplate, NULL, true); Context::finalize(); return EXIT_SUCCESS; } diff --git a/app/br-print/br-print.cpp b/app/br-print/br-print.cpp index 8540548..a64d7c5 100644 --- a/app/br-print/br-print.cpp +++ b/app/br-print/br-print.cpp @@ -45,6 +45,6 @@ int main(int argc, char *argv[]) for (int i=1; iquiet = true; - br_iterate_utemplates_file(stdin, search_utemplate, NULL); + br_iterate_utemplates_file(stdin, search_utemplate, NULL, false); Context::finalize(); return EXIT_SUCCESS; diff --git a/app/br-select/br-select.cpp b/app/br-select/br-select.cpp index c6887ce..c37b34d 100644 --- a/app/br-select/br-select.cpp +++ b/app/br-select/br-select.cpp @@ -49,6 +49,6 @@ int main(int argc, char *argv[]) else if (!strcmp(argv[i], "-algorithmID")) algorithmID = new int(atoi(argv[++i])); } - br_iterate_utemplates_file(stdin, select_utemplate, NULL); + br_iterate_utemplates_file(stdin, select_utemplate, NULL, false); return EXIT_SUCCESS; } diff --git a/openbr/universal_template.cpp b/openbr/universal_template.cpp index 64763a4..84ad7ca 100644 --- a/openbr/universal_template.cpp +++ b/openbr/universal_template.cpp @@ -1,6 +1,8 @@ #include +#include #include #include +#include #include #include @@ -47,8 +49,15 @@ void br_iterate_utemplates(br_const_utemplate begin, br_const_utemplate end, br_ } } -void br_iterate_utemplates_file(FILE *file, br_utemplate_callback callback, br_callback_context context) +static void callAndFree(br_utemplate_callback callback, br_utemplate t, br_callback_context context) { + callback(t, context); + free(t); +} + +void br_iterate_utemplates_file(FILE *file, br_utemplate_callback callback, br_callback_context context, bool parallel) +{ + QFutureSynchronizer futures; while (!feof(file)) { br_utemplate t = (br_utemplate) malloc(sizeof(br_universal_template)); @@ -56,9 +65,11 @@ void br_iterate_utemplates_file(FILE *file, br_utemplate_callback callback, br_c t = (br_utemplate) realloc(t, sizeof(br_universal_template) + t->size); if (fread(t+1, 1, t->size, file) != t->size) qFatal("Unexepected EOF when reading universal template data."); - callback(t, context); + if (parallel) futures.addFuture(QtConcurrent::run(callAndFree, callback, t, context)); + else callAndFree(callback, t, context); + } else { + free(t); } - - free(t); } + futures.waitForFinished(); } diff --git a/openbr/universal_template.h b/openbr/universal_template.h index 748c795..f7fc9bd 100644 --- a/openbr/universal_template.h +++ b/openbr/universal_template.h @@ -81,7 +81,7 @@ BR_EXPORT void br_iterate_utemplates(br_const_utemplate begin, br_const_utemplat * \brief Iterate over br_universal_template in a file. * \see br_iterate_utemplates */ -BR_EXPORT void br_iterate_utemplates_file(FILE *file, br_utemplate_callback callback, br_callback_context context); +BR_EXPORT void br_iterate_utemplates_file(FILE *file, br_utemplate_callback callback, br_callback_context context, bool parallel); #ifdef __cplusplus } -- libgit2 0.21.4